Tópicos de Sistemas
de Informação A
Carlos Oberdan Rolim
Ciência da Computação
Validação de documentos XML
Um documento é válido com relação a um dado esquema
XML se obdece este esquema
Documento
XML
Parser
Esquema
XML
Documento
XML válido
Documento
XML inválido
Linguagens de Esquemas XML
DTD – Document Type Definition
XML Schema
XML DTD
Document Type Definition
O que é ?
A estrutura de um documento XML é definida no Document
Type Definition (Definição do Tipo de Documento), que
especifica o conjunto de elementos do documento, seus
relacionamentos, seus atributos, entidades e o conjunto
de tags associadas para marcar o documento.
Função
A principal função do DTD é definir todas as tags que um
documento XML pode conter, determinando a ordem em que
elas devem aparecer e se são obrigatórias ou opcionais
Define uma gramática para validar documentos, isto é,
conjunto de regras que definem a estrutura do documento
Descreve a estrutura da árvore que pode ser aceita para o
documento
A validação compara um documento em particular com uma
DTD correspondente
É necessário que um documento seja bem-formado para ser
validado
Exemplos de aplicação
registros médicos
enciclopédias
catálogos de produto
jornais
dicionários
contratos
políticas e procedimentos
artigos científicos
ordens de compra
normas/regulamentos
manuais de usuário
Componentes de um documento DTD
Componentes
Definição
Elementos
Refere-se a qualquer tag criada, ou seja, qualquer cadeia de
caracteres contida dentro dos delimitadores < e >.
Tags
São os elementos marcadores que possuem abertura e
encerramento.
Atributos
Fornece informações extras sobre os elementos e são
inseridos nas tags iniciais de um elemento.
Entidades
São variáveis designadas para conter textos ou documentos.
Ao realizar a construção do DTD, é necessário que exista um
entendimento muito claro do que se pretende armazenar
nos documentos XML, ou seja, qual tipo de informação eles
vão guardar e todos os outros elementos envolvidos citados
anteriormente.
Validação
Com o DTD é possível ao software processador da XML
realizar a validação de um documento, verificando se ele foi
criado corretamente, segundo os padrões estabelecidos.
HTML x XML
Quando a HTML é utilizada em uma página da Web, não
existe a necessidade de realizar uma declaração do tipo de
documento, ou seja, atrelá-la a um DTD. Uma vez que suas
tags são fixas, estas são controladas internamente pelo
próprio browser.
Já o XML, por sua vez, devido a características de permitir a
criação de tags, obriga a criação do DTD, para que o
browser, ou qualquer outro interpretador XML, possa
verificar a validade das tags utilizadas.
XML
DTD
<company>
<!DOCTYPE company [
<person>
<ssn> 123456789 </ssn> <!ELEMENT company ((person|product)*)>
<name> John </name> <!ELEMENT person (ssn, name, office, phone?)>
<office> B432 </office>
<!ELEMENT ssn
(#PCDATA)>
<phone> 1234 </phone>
<!ELEMENT name (#PCDATA)>
</person>
<!ELEMENT office (#PCDATA)>
<person>
<ssn> 987654321 </ssn> <!ELEMENT phone (#PCDATA)>
<name> Jim </name>
<!ELEMENT product (pid, name, description?)>
<office> B123 </office>
<!ELEMENT pid (#PCDATA)>
</person>
<!ELEMENT description (#PCDATA)>
<product> ... </product>
]>
...
</company>
Browser validando um documento
XML
Formas de declaração do DTD
A definição das regras de um DTD, não necessita estar
armazenada obrigatoriamente em um arquivo externo. Ela
pode ser interna, ou seja, definida dentro do próprio
documento XML, ou ainda uma parte interna e outra
externa.
Declaração
Sintaxe:
<!ELEMENT nome-do-elemento (lista de elementos e condições)>
Onde:
<!ELEMENT: palavra reservada que indica a declaração de um
elemento, tag. A utilização de letra maiúscula na palavra ELEMENT é
obrigatória.
Nome-do-elemento: nome da tag.
Lista de elementos: nome de todas as tags que podem ser utilizadas
dentro da tag que está sendo declarada.
Condições: caracteres que são utilizados para indicar opcionalidade e
obrigatoriedade para as tags.
Caracteres de condições utilizados na
declaração dos elementos
Caractere de
Condição
Função
+
Indica que o elemento filho será utilizado pelo menos uma vez
dentro do elemento pai (ou mais de uma).
(Mais)
*
(Asterisco)
?
(Interrogação)
|
(Barra Vertical)
Indica que o elemento filho será utilizado várias vezes dentro
de um elemento pai, ou nem será utilizado (nenhuma ou mais
de uma).
Indica que o elemento filho será opcional, podendo ou não ser
utilizado (uma única vez) dentro do elemento pai.
Indica que um ou outro elemento filho será utilizado dentro de
um elemento pai.
Posições dos caracteres de condição
Posições dos caracteres de condição
<!ELEMENT cartao (nome, telefone+, email*, website?)>
<!ELEMENT livro (titulo, autor, editora, ano)*>
<!ELEMENT trecho (ferroviário | aéreo | rodoviário | fluvial)>
Posições dos caracteres de condição
Caractere de
Condição
Exemplo
<!ELEMENT cliente (nome, fone+)>
+
(Mais)
<cliente>
<cliente>
<nome>... </nome>
<fone> ... </fone>
</cliente>
<nome> ... </nome>
<fone> ... </fone>
<fone> ... </fone>
</cliente>
<!ELEMENT cliente (nome, fone*)>
<cliente>
*
(Asterisco)
<cliente>
<nome>... </nome>
</cliente>
<nome> ... </nome>
<fone> ... </fone>
<fone> ... </fone>
</cliente>
Caractere de
Posições
dos caracteres
de condição
Exemplo
Condição
<!ELEMENT cliente (nome, fone?, email?)>
<cliente>
<cliente>
<nome>...</nome>
?
</cliente>
<nome> ... </nome>
<fone> ... </fone>
</cliente>
(Interrogação)
<cliente>
<cliente>
<nome>... </nome>
<email>... </email>
</cliente>
<nome> ... </nome>
<fone> ... </fone>
<email> ... </email>
</cliente>
<!ELEMENT cliente (nome, (fone|email))>
|
(Barra Vertical)
<cliente>
<cliente>
<nome>... </nome>
<nome> ... </nome>
<fone> ... </fone>
<email> ... </email>
</cliente>
</cliente>
Variações na declaração dos
elementos
Declaração de
Sintaxe
Elementos que possuem apenas
texto.
Única
ocorrência
para
um
elemento.
Elementos
que
<!ELEMENT nome-do-elemento (#PCDATA)>
<!ELEMENT nome-do-elemento (elemento_1)>
possuem <!ELEMENT nome-do-elemento (elemento_1,
elementos filhos.
elemento_2, elemento_3, elemento_4)>
Ocorrência de um, os dois, vários
de cada um, ou nenhum dos <!ELEMENT nome-do-elemento (elemento_1,
elementos
para
o
elemento elemento_2)*>
principal.
*PCDATA = Parsable Character Data
Variações na declaração dos
elementos
Declaração de
Sintaxe
Semelhante a anterior, porém
pelo menos um elemento deve <!ELEMENT nome-do-elemento (elemento_1,
existir
dentro
do
elemento elemento_2)+>
principal.
Elemento
principal
pode
ser
vazia ou conter apenas um dos
elementos.
<!ELEMENT nome-do-elemento (elemento_1,
elemento_2)?>
Atributo no documento DTD
Sintaxe
<!ATTLIST elemento
atributo1 tipo valor_default>
<!ATTLIST elemento
atributo2 tipo valor_default>
ou então
<!ATTLIST elemento
atributo1 tipo valor_default
atributo2 tipo valor_default>
Atributo no documento DTD
<!ATTLIST automovel marca NMTOKEN #IMPLIED >
<!ATTLIST automovel modelo CDATA #FIXED "1000">
<!ATTLIST automovel ano NMTOKEN #REQUIRED >
<!ATTLIST automovel marca NMTOKEN #IMPLIED
modelo CDATA #FIXED “1000"
ano NMTOKEN #REQUIRED>
Tipos de dados
CDATA (character data): representa qualquer texto. Pode
conter espaços, pontuação, etc.
NMTOKEN (name token): caracteres alfanuméricos. Não
pode conter espaços.
NMTOKENS: representa um ou mais NMTOKEN separados
por espaços.
ID: tem que conter um nome que seja unívoco no
documento.
IDREF: é referência para um ID.
IDREFS: lista de elementos IDREF.
CDATA
O valor de um atributo do tipo String é uma cadeia de
caracteres de qualquer tamanho
Ex.:
<!ATTLIST livro titulo CDATA> Definição do atributo nome
<livro titulo=“Data replication”/> Exemplo válido de
elemento produto
ID
Os IDs identificam unicamente elementos individuais em um
documento
Todos os valores usados para IDs em um documento devem
ser diferentes
Os elementos podem ter um único atributo ID
O valor de um atributo do tipo ID deve ser único em um
documento XML a fim de que o documento seja válido
Ex.:
<!ATTLIST livro ISBN ID>  Definição do atributo codigo
<livro ISBN=“123”/> Exemplo válido de elemento produto
IDREF
O valor de um atributo IDREF deve ser o valor de um único
atributo ID algum elemento no documento
Ex.:
<!ATTLIST livro bib IDREF>  Definição do atributo
<livro bib=“123”/>  Documento válido
IDREFS
É uma variação do tipo IDREF
O valor de um atributo IDREFS pode conter valores IDREF
múltiplos separados por espaços em branco.
Ex.:
<!ATTLIST livro bib IDREFS>  Definição do atributo
<livro bib=“123 456”/>  Documento válido
Valores default
#REQUIRED
preenchimento obrigatório para o atributo.
<!DOCTYPE livro [
<!ELEMENT livro EMPTY>
<!ATTLIST livro titulo CDATA #REQUIRED]>
<livro titulo = “Data Replication”/>
#IMPLIED
o atributo é opcional.
<!DOCTYPE livro [
<!ELEMENT livro EMPTY>
<!ATTLIST livro titulo CDATA #IMPLIED]>
<livro titulo = “Data Replication”/>
#FIXED
o atributo tem um valor fixo. Não pode se alterado.
<!ATTLIST valor moeda CDATA #FIXED “R$">
Entidades
Entidades podem ser usadas para representar caracteres
especiais
As entidades também são usadas para referenciar um texto
freqüentemente repetido ou alterado
Existem diferentes tipos de entidades:
Entidades gerais ou de parâmetro
Entidades internas ou externas
Entidades gerais e de parâmetro
Entidades Gerais
Referências de entidades gerais podem aparecer em qualquer lugar no
texto ou na marcação
Geralmente são usadas como abreviação para um texto
As entidades gerais externas podem referenciar outros documentos em
formato que não seja XML
<!DOCTYPE manual [
<!ENTITY Direitos “<p> Este produto é fabricado pela &companhia;.
</p>”>
<!ENTITY companhia “Intel”>
<!ELEMENT manual (p)+>
<!ELEMENT p (#PCDATA)>
]>
<manual>
<p> Este é o manual da &companhia; </p>
&Direitos;
</manual>
Entidades gerais e de parâmetro
Entidades de parâmetro
Referências de entidade de parâmetro só podem aparecer na DTD
Existe um caractere extra na declaração antes do nome da entidade
As referências de entidade de parâmetro também substituem o símbolo
& pelo sinal %
<!ENTITY % boolean “(true|false) ‘false’ “>
<!ELEMENT telefone (#PCDATA)>
<!ATTLIST telefone preferido %boolean; >
Entidades Internas e Externas
Entidades internas
São armazenadas no documento
Permitem definir atalhos para textos freqüentemente digitados ou
textos a serem alterados
Entidades externas
Apontam para um identificador
Referenciam um conteúdo que não faz parte do documento atual
<!DOCTYPE manual [
<!ENTITY maria SYSTEM “maria.ent”>
<!ENTITY pedro SYSTEM “pedro.ent”>
<!ELEMENT agenda (item)+>]>
<agenda>
&maria;
&pedro;
</manual>
<item>
<nome> Maria da Silva </nome>
<fone> 234.4567 </fone>
</item>
<item>
<nome> Pedro Soares </nome>
<fone> 256.8934 </fone>
</item>
Associação de XML com DTD
Digitar após esta linha <?xml version="1.0" encoding=“iso-8859-1"?>
a seguinte declaração:
<!DOCTYPE elemento_raiz SYSTEM “nome arquivo">
Em que:
!DOCTYPE vincula o DTD a um documento
elemento_raiz será o nome do elemento principal do documento XML
nome_arquivo é o nome do arquivo que contém o DTD
Associação de XML com DTD
<!DOCTYPE biblioteca SYSTEM “biblioteca.dtd">
Indica ao processador XML que ele deverá verificar sua
validade por meio do arquivo biblioteca.dtd, ou seja, a
declaração indica que o DTD do documento presente, cujo
elemento principal é “biblioteca”, está disponível no arquivo
biblioteca.dtd.
DTD Interno
É possível que se insiram as regras do DTD no próprio documento
XML.
As regras devem ser inseridas entre [ e ].
Externa:
<!DOCTYPE biblioteca SYSTEM “biblioteca.dtd">
Interna:
<!DOCTYPE biblioteca[
<!ENTITY % tipo “(#PCDATA)”>
<!ELEMENT biblioteca(livro+) >
<!ELEMENT livro (titulo, autor+, paginas) >
<!ELEMENT titulo %tipo; >
<!ELEMENT autor %tipo; >
<!ELEMENT paginas %tipo; >
<!ATTLIST livro genero CDATA #REQUIRED >
]>
DTD Misto
Podem ser usadas em conjunto:
<!DOCTYPE exemplo SYSTEM “biblioteca.dtd" [
<!ENTITY valor “R$">
]>
* Definições internas sobrepõem elementos já existentes na DTD
externa.
Criando um DTD
Avaliar a estrutura do documento XML
Identificar elemento principal/raiz
Identificar elementos filhos
Exercício
Criar DTD externo para o seguinte XML e validar o
documento
<?xml version=”1.0” encoding=”UTF8”?>
<!DOCTYPE BOOK SYSTEM “book.dtd”>
<BOOK>
<TITLE> O nome da Rosa </TITLE>
<AUTHOR>
<FULL_NAME> Umberto Eco </FULL_NAME>
</AUTHOR>
<ISBN> 01233440 </ISBN>
<PUBLISHER>Recordx </PUBLISHER >
<VENDOR_LIST>
<VENDOR order=”1” availableOnline=”yes”>
<NAME> Amazon.com </NAME>
<PHONE> (800)555-1212 </PHONE >
<PHONE> (800)555-1313 </PHONE >
<BOOK_PRICE> $24.95 </BOOK_PRICE >
</VENDOR>
<VENDOR order=”2” availableOnline=”no”>
<NAME> Border’s </NAME>
<PHONE> (800)615-1313 </PHONE >
<BOOK_PRICE > $22.36 </BOOK_PRICE>
</VENDOR>
</VENDOR_LIST>
</BOOK>
Download

ELEMENT