320 likes | 396 Views
Anotação de Documentos. Elementos, Atributos, Entidades, Comentários, Declarações e Instruções de Processamento. Organização de um documento. Documentos XML têm estrutura física e estrutura lógica estrutura física — entidades (unidades de armazenamento)
E N D
Anotação de Documentos Elementos, Atributos, Entidades, Comentários, Declarações e Instruções de Processamento
Organização de um documento • Documentos XML têm estrutura física e estrutura lógica • estrutura física — entidades (unidades de armazenamento) • estrutura lógica — declarações, comentários, referências, instruções de processamento
Estrutura Lógica/Física Document Document Unit Sub-unit elementos entidades processador XML = parser + gestor de entidades
Elementos • Um elemento é constituído por uma tag-inicial, um conteúdo (contendo texto e eventualmente outros elementos) e uma tag-final indo eu indo eu a caminho de <name>Viseu</name>, encontrei indo eu indo eu a caminho de *ITAViseu*ROM, encontrei indo eu indo eu a caminho de Viseu, encontrei • Um documento XML constitui uma hierarquia de elementos (possivelmente recursiva): pais, antepassados, filhos, ... • Os elementos possíveis são definidos num DTD Livro Secção Capítulo Secção Secção Capítulo Secção Secção Livro Capítulo Capítulo
Declarações • Instruções para o processador de XML • Obrigatória <?XML version="1.0" encoding="UTF-8" standalone="yes" ?> • Opcionalmente <!DOCTYPE Book SYSTEM "http://www.fe.up.pt/jlopes/dtds/Book.dtd" !> • Comentários (não fazem parte do documento) <!-- Início da parte XML do doc --> UTF-8 é uma codificação do Unicode em caracteres de 8-bit : os primeiros 128 são os mesmos que ASCII, os outros são usados para codificar o resto do Unicode em sequências de 2 a 6 bytes. UTF-8 é incompatível com ISO 8859-1 (ISO Latin-1) acima do 126 decimal (fim do ASCII)
Estrutura Física de um Documento Entidades
Distribuição por Componentes • Um documento XML pode ser distribuído por vários ficheiros • facilita reutilização de componentes intra e inter-documentos • permite a inclusão de dados que não são XML • Cada unidade de informação é uma Entidade • possui um nome (identificador) • A entidade documento (root) • não tem nome • seleccionada ou passada ao parser pelo nome do ficheiro document entity document entity
Entidades • São definidas num DTD pelas tags de declaração de entidades <!ENTITY XML "eXtensible Markup Language"> • São inseridas no texto no local de referência O formato &XML; inclui entidades. O formato eXtensible Markup Language inclui entidades. declaração A "A" "A"
Entidades Internas (texto) • Para evitar redundâncias • Declaração <!ENTITY size 'mede 6" de comprimento'> • Uso O objecto &size; sempre.
Entidades Externas (texto) • Quando o texto vai ser usado em diversos documentos • Quando o texto é demasiado grande para estar dentro da declaração <!ENTITY Chapter2 SYSTEM "/Book/Ents/Chapter2.xml"> • Para agrupar entidades internas • declarações de entidades ISO • ISOnum (<, >, etc), ISOlat1, ISOgrk1, ISOpub (publishing), ISOtech (symbol) • Usar primeiro catálogo local de entidades <!ENTITY Chars PUBLIC "-//Feup//Entity Chars//EN" "/ents/Chars.xml">
Entidades Binárias (externas) • Contendo dados que não são XML • não é verificada pelo parser <!ENTITY jlopes SYSTEM "/fotos/jlopes.tif" NDATA TIFF> • a aplicação processa directamente ou lança outra aplicação • Uso Foto do <pic name="jlopes"/> J.C.Lopes.
Outras Entidades • Entidades built-in • Entidades de carácter << < • Entidades parâmetro • usadas na construção de DTDs <!ENTITY % Part "emph | supersc" > <!ELEMENT para (% Part ;ript)* > • para agrupar declarações <!ENTITY % ISOnum PUBLIC "ISO 8879:1986//ENTITIES Numeric and Special Graphics//EN" "/ents/isonum.ent"> &ISOnum; • isonum.ent <!ENTITY excl "!"> <!ENTITY reg "*REG*"> ... declaração referência
DTD Livro Capítulo Sections Parágrafo Livro Capítulo + Parágrafo * Capítulo Parágrafo Sections ? Capítulo Parágrafo • XML possibilita a criação de templates para anotação de documentos permitindo controlar (e validar!) a posição de elementos e seus atributos • DTD é um conjunto (formal) de regras definindo a estrutura do documento • que elementos podem ser usados e qual a sua sequência • especificam portanto a hierarquia e granularidade do documento • A estrutura em árvore do documento tem de estar conforme a estrutura do DTD
Componentes de um DTD • Um DTD é composto por várias declarações • ELEMENT (definição de marcas) • ATTLIST (definição de atributos) • ENTITY (definição de entidades) • NOTATION (definição de dados do tipo notation) • As declarações estão agrupadas dentro da declaração DOCTYPE <!DOCTYPE MyBook [ <!-- DTD MyBook --> <! ... > ]>
DTD simples <?xml version="1.0" standalone="yes" ?> <!DOCTYPE saudacao [ <!ELEMENT saudacao (#PCDATA) > ]> <saudacao> Bom dia a quem chegou a horas! </saudacao> • Nome do DTD (document type definition) tem que ser o nome do elemento raiz • Maiúsculas e minúsculas são significativas • O tipo do elemento é PCDATA (parsable character data) o que significa texto simples, sem outros elementos, embora substitua referências a entidades • A alternativa são os elementos compostos
DTD composto <escola> <turma> <aluno> <nome>Rui Silva</nome> <media>13.6</media> </aluno> <aluno> <nome>João Sousa</nome> <media>11.0</media> </aluno> </turma> <turma> <aluno> <nome>João Sousa</nome> <media>11.0</media> </aluno> <aluno><nome>Ana Costa</nome> <media>17.0</media></aluno> </turma> </escola> <?xml version=“1.0” standalone=“yes”?> <!DOCTYPE escola [ <!ELEMENT escola (turma, turma)> <!ELEMENT turma (aluno, aluno)> <!ELEMENT aluno (nome, media)> <!ELEMENT nome (#PCDATA)> <!ELEMENT media (#PCDATA)> ]> • Sequência (","): um aluno é definido como a sequência de dois elementos, os filhos nome e média • uma turma é uma sequência de dois alunos
DTD composto (cont.) <escola> <turma> <aluno> <nome>Rui Silva</nome> <media>13.6</media> </aluno> <aluno> <nome>João Sousa</nome> <media>11.0</media> <frequencia>nocturno</frequencia> </aluno> </turma> <turma> <aluno> <nome>João Sousa</nome> </aluno> <aluno><nome>Ana Costa</nome> <media>17.0</media></aluno> </turma> </escola> <?xml version=“1.0” standalone=“yes”?> <!DOCTYPE escola [ <!ELEMENT escola (turma+)> <!ELEMENT turma (aluno*)> <!ELEMENT aluno (nome, media?, frequencia?)> <!ELEMENT nome (#PCDATA)> <!ELEMENT media (#PCDATA)> <!ELEMENT frequencia (diurno | nocturno)> ]> • Escolha ("|") • Um de entre uma lista de valores • Cardinalidadade • ("+")escola tem uma ou mais turmas • ("*") turma tem zero ou mais alunos • ("?")aluno tem um nome e zero ou uma media (optativa) e frequencia
Declaração de Elementos • Usada para definir um novo elemento e especificar o seu conteúdo <!ELEMENT element_name rule> • As regras podem conter • sequências: A, B • escolhas: A | B • indicadores de quantidade: A? A+ A* • Um elemento pode ter filhos, conter texto ou ser vazio <!ELEMENT book (p*, chapter+)+> <!ELEMENT p ANY> <!ELEMENT image EMPTY> <book><p>Há uma imagem neste <image/> ponto do texto.</p></book> • ANY permite a mistura de texto e elementos, o que não é aconselhável, a não ser para documentos muito pouco estruturados • Um elemento vazio não tem conteúdo; pode substituir-se a marca de fecho por "/>" na de abertura • Os parênteses permitem a criação de expressões complexas
Declaração de Elementos Mistos • Texto pode ocorrer em sítios com Parsable Character Data • PCDATA tem de ser o primeiro token do grupo, o grupo deve ser uma escolha e tem de ser opcional e repetitivo <!ELEMENT emph (#PCDATA | sub | super)*> <!ELEMENT sub (#PCDATA)> <!ELEMENT super (#PCDATA)> <emph>H<sub>2</sub>O é água</emph> • Só se consegue especificar os elementos admissíveis mas não a sua ocorrência ou ordem • Útil ao começar a anotar um documento legado; no fim, não devem ocorrer situações de mistura
DTD externo • Podem ser incluídos DTD externos <!DOCTYPE MyBook SYSTEM "../dtds/MyBook.dtd" [ <!-- subconjunto interno do DTD MyBook --> <! ... > ]> • Podem ser assim partilhados por vários documentos • DTD externo não inclui a declaração de DOCTYPE que fica no doc • No DOCTYPE o atributo SYSTEM dá o URL onde se encontra o DTD • DTD externo público tem, para além do URL, um parâmetro de nome, para facilitar a pesquisa em vários repositórios <!DOCTYPE MyBook PUBLIC "//article//PT" "../dtds/MyBook.dtd" [ • Num documento só existe um DTD • Para combinar vários DTDs num mesmo documento é necessário utilizar entidades externas
Processamento de DTDs • Se houver conflito de definições, vence o subconjunto interno • A sua inclusão pode ser controlada pela declaração XML <?xml version="1.0" standalone="yes"> • <?xml version="1.0" standalone="no"> subconjunto interno subconjunto externo
Entidades paramétricas • As entidades são declaradas no DTD mas são incluídas no documento propriamente dito • Para incluir entidades no DTD é necessário usar o mecanismo da referência a entidades paramétricas <!ENTITY % PCD "(#PCDATA)"> <!ELEMENT ANIMAL %PCD;> <!ELEMENT COMIDA %PCD;> • Modularizar o DTD <!ELEMENT escola (turma+)> <!ELEMENT turma (aluno*)> <!ENTITY % aluno SYSTEM "aluno.dtd"> %aluno; • Constrói-se assim um DTD a partir de vários • Cuidado a ter: não fazer referências circulares nos DTDs • Os documentos importados por entidades externas não podem ter o seu próprio DTD
Atributos • Para além do nome, um elemento pode conter outra informação em atributos (meta-informação) <para security="secret" author="jlopes">Este parágrafo é secreto</para> • Num DTD um atributo é associado a um elemento particular e é-lhe atribuído um dado tipo <!ELEMENT para (#PCDATA)> <!ATTLIST para security CDATA author CDATA> • Alguns atributos são reservados • linguagens <para xml:lang="en">Hello</para> <para xml:lang="pt-PT">Olá</para> • espaços <para xml:space="preserve">Hello, Champion!</para>
Declaração de Atributos • Usada para associar atributos a um dado elemento <!ATTLIST target_element attr_name attr_type default> • Por exemplo: <!ATTLIST box length CDATA "0"> <!ATTLIST box width CDATA "0"> <!ATTLIST frame visible (true | false) "true"> <!ATTLIST person marital (single | married | divorced | widowed) #IMPLIED> • Os valores por omissão, incluem • qualquer valor permitido pelo tipo: "0" "true" • deve ser especificado no elemento: #REQUIRED • valor não fornecido e opcional: #IMPLIED • valor fixo: #FIXED • Atributos reservados (começados por xml) <!ATTLIST english xml:lang NMTOKEN "en">
Declaração de Atributos • Declarações múltiplas <!ATTLIST book id ID #REQUIRED type (novel | fact) #REQUIRED> <!ATTLIST book width (thick | thin ) "thin" author CDATA #IMPLIED> <book id="X123" type="fact" author="jlopes"> <book id="X127" width="thick" type="novel"> • width por omissão é thin; o autor é optativo
Tipo dos Atributos • O tipo do atributo restringe os valores possíveis
Atributo NMTOKEN • NMTOKEN • Trata-se de um tipo para os atributos que segue as regras dos identificadores e está preparado para ligar a linguagens de programação; não admite espaços • <!ATTLIST address state NMTOKEN #REQUIRED> • NMTOKENS, forma plural
Atributo ID • ID • Destina-se a identificar univocamente um elemento no documento, portanto não admite repetições • Constituído por uma palavra a começar por uma letra e sem espaços • Usado por programas que manipulem XML <?xml version=“1.0” standalone=“yes”?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (P*)> <!ELEMENT P (#PCDATA)> <!ATTLIST P PNUMBER ID #REQUIRED> ]> <DOCUMENT> <P PNUMBER="p1">Heróis do mar</P> <P PNUMBER="p2">Heróis do mar</P> </DOCUMENT>
Atributo IDREF • IDREF • O valor de um atributo com o tipo IDREF é o ID de outro elemento no documento • Exemplo de estabelecimento de relações familiares <?xml version=“1.0” standalone=“yes”?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (PERSON*)> <!ELEMENT PERSON (#PCDATA)> <!ATTLIST PERSON PNUMBER ID #REQUIRED> <!ATTLIST PERSON FATHER IDREF #IMPLIED> <!ATTLIST PERSON MOTHER IDREF #IMPLIED> ]> <DOCUMENT> <PERSON PNUMBER="a1">Susana</PERSON> <PERSON PNUMBER="a2">Joaquim</PERSON> <PERSON PNUMBER="a3" MOTHER="a1" FATHER="a2">Chico</PERSON> <PERSON PNUMBER="a4" MOTHER="a1" FATHER="a2">David</PERSON> </DOCUMENT>
Atributo ENTITY • ENTITY • Destina-se a ligar dados binários externos • O seu valor é uma entidade geral não analisada declarada no DTD, que liga para dados externos, por exemplo uma imagem <!ELEMENT IMAGE EMPTY> <!ATTLIST IMAGE SOURCE ENTITY #REQUIRED> <!ENTITY LOGO SYSTEM "logo.gif"> <DOCUMENT> ... <IMAGE SOURCE="LOGO"/> ... </DOCUMENT>
Declaração de Notações • Elementos ou entidades podem conter dados em formatos diferentes de XML • Uma declaração de elemento deve especificar que formatos podem ser embebidos <!NOTATION TeX PUBLIC "-//MyCorp/NOTATION TeX Help File//EN" SYSTEM "/APPS/texview.exe"> • Uma declaração de entidades deve especificar o formato que está embebido <!ENTITY Logo SYSTEM="logo.tex" NDATA TeX> • Também podem ser referidas em declarações de atributos <!NOTATION mpeg SYSTEM "mpegplay.exe"> <!NOTATION jpeg SYSTEM "netscape.exe"> <!NOTATION mov SYSTEM "mplayer.exe"> <!NOTATION avi SYSTEM "mplayer.exe"> <!ATTLIST media player NOTATIONS (mpeg | jpeg | mov) #REQUIRED