1
Anotação de Documentos
Elementos, Atributos, Entidades, Comentários,
Declarações e Instruções de Processamento
FEUP
XML
2
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
FEUP
XML
3
Estrutura Lógica/Física
Document
Document
Unit
Sub-unit
elementos
entidades
processador XML = parser + gestor de entidades
FEUP
XML
4
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
Livro
Secção
Secção
Capítulo
Capítulo
FEUP
XML
5
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)
FEUP
XML
6
Estrutura Física de um
Documento
Entidades
FEUP
XML
7
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
FEUP
document
entity
XML
8
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"
FEUP
XML
9
Entidades Internas (texto)
• Para evitar redundâncias
• Declaração
<!ENTITY size 'mede 6" de comprimento'>
• Uso
O objecto &size; sempre.
FEUP
XML
10
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">
FEUP
XML
11
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.
FEUP
XML
12
Outras Entidades
• Entidades built-in
• Entidades de carácter
&#x3C;
&#60;
&lt;
<
&gt;
>
&amp:
&
&apos;
'
&quot;
"
&lt;
• Entidades parâmetro
– usadas na construção de DTDs
<!ENTITY % Part "emph | supersc" >
<!ELEMENT para (% Part ;ript)* >
declaração
– para agrupar declarações
<!ENTITY % ISOnum PUBLIC "ISO 8879:1986//ENTITIES Numeric and Special
Graphics//EN" "/ents/isonum.ent">
&ISOnum;
referência
– isonum.ent
<!ENTITY excl "!"> <!ENTITY reg "*REG*"> ...
FEUP
XML
13
Estrutura Lógica de um
Documento
DTD
FEUP
XML
14
DTD
• 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
Livro
Capítulo
Sections
Parágrafo
Livro
Capítulo +
Parágrafo *
Sections ?
Capítulo
Parágrafo
Capítulo
FEUP
Parágrafo
XML
15
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 -->
<! ... >
]>
FEUP
XML
16
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
FEUP
XML
17
DTD composto
<?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
FEUP
<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
18
DTD composto (cont.)
–
–
FEUP
<?xml version=“1.0” standalone=“yes”?>
<escola>
<!DOCTYPE escola [
<turma>
<!ELEMENT escola (turma+)>
<aluno>
<!ELEMENT turma (aluno*)>
<nome>Rui Silva</nome>
<!ELEMENT aluno (nome, media?,
<media>13.6</media>
frequencia?)>
</aluno>
<!ELEMENT nome (#PCDATA)>
<aluno>
<!ELEMENT media (#PCDATA)>
<nome>João Sousa</nome>
<!ELEMENT frequencia (diurno | nocturno)> <media>11.0</media>
]>
<frequencia>nocturno</frequencia>
</aluno>
</turma>
Escolha ("|")
<turma>
<aluno>
• Um de entre uma lista de valores
<nome>João Sousa</nome>
</aluno>
Cardinalidadade
<aluno><nome>Ana Costa</nome>
• ("+") escola tem uma ou mais turmas
<media>17.0</media></aluno>
• ("*") turma tem zero ou mais alunos
• ("?") aluno tem um nome e zero ou uma </turma>
</escola>
media (optativa) e frequencia
XML
19
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
FEUP
XML
20
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
FEUP
XML
21
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
FEUP
XML
22
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">
subconjunto interno
FEUP
<?xml version="1.0" standalone="no">
subconjunto externo
XML
23
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
FEUP
XML
24
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>
FEUP
XML
25
Declaração de Atributos
• Usada para associar atributos a um dado elemento
<!ATTLIST target_element attr_name attr_type default>
• Por exemplo:
<!ATTLIST
<!ATTLIST
<!ATTLIST
<!ATTLIST
box length CDATA "0">
box width CDATA "0">
frame visible (true | false) "true">
person marital (single | married | divorced | widowed) #IMPLIED>
• Os valores por omissão, incluem
–
–
–
–
qualquer valor permitido pelo tipo:
deve ser especificado no elemento:
valor não fornecido e opcional:
valor fixo:
"0"
"true"
#REQUIRED
#IMPLIED
#FIXED
• Atributos reservados (começados por xml)
<!ATTLIST english xml:lang NMTOKEN "en">
FEUP
XML
26
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
FEUP
XML
27
Tipo dos Atributos
• O tipo do atributo restringe os valores possíveis
CDATA
enumerated
ENTITY
ENTITIES
FEUP
Caracteres que não são markup
lista de valores de onde pode ser escolhido um
entidade declarada no DTD
lista de entidades declaradas no DTD
ID
identificador (único) de elemento
IDREF
valor de identificador do tipo ID
IDREFS
lista de valores de identificadores
NMTOKEN
XML token
NMTOKENS
lista de tokens XML
NOTATION
notação declarada no DTD
XML
28
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
FEUP
XML
29
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>
FEUP
XML
30
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>
FEUP
XML
31
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>
FEUP
XML
32
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
FEUP
XML
Download

XML - DTDs