DTD, XML Schema, XSDL
Helena Galhardas
DEI IST
Agenda

Tipos de dados em XML:


DTD
XML Schema ou XSDL
XML DTD
(Document Type Definition)



Define uma classe de documentos
Um documento XML pode ter uma DTD
Terminologia para XML:



Bem formado: se as tags estão correctamente
fechadas
Válido: se tem uma DTD e é conforme essa DTD
Validação é útil em transferência de dados

Define:





Nomes de elementos
Estrutura do conteúdo dos elementos
Nomes dos atributos
Valores dos atributos por omissão
Entidades
DTDs vistas como gramáticas
<!DOCTYPE paper [
<!ELEMENT paper (section*)>
<!ELEMENT section ((title,section*) | text)>
<!ELEMENT title
(#PCDATA)>
<!ELEMENT text
(#PCDATA)>
]>
<paper> <section> <text> </text> </section>
<section> <title> </title> <section> … </section>
<section> … </section>
</section>
</paper>
DTDs vistas como esquemas
Não são tão adequadas pois:
 Impõem restrições sobre a ordem que
não se pretende
<!ELEMENT person (name,phone)>

Não se consegue impôr restrições sobre as
referências


Não conseguimos dizer que o atributo idref em
state-of tem que ser um identificador do elemento
state
Podem ser demasiado vagas
<!ELEMENT person ((name|phone|email)*)>
Exemplo: Uma DTD muito simples
<!DOCTYPE company [
<!ELEMENT company ((person|product)*)>
<!ELEMENT person (ssn, name, office, phone?)>
<!ELEMENT ssn
(#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT office (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT product (pid, name, description?)>
<!ELEMENT pid (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>
Exemplo: um documento XML válido
<company>
<person> <ssn> 123456789 </ssn>
<name> John </name>
<office> B432 </office>
<phone> 1234 </phone>
</person>
<person> <ssn> 987654321 </ssn>
<name> Jim </name>
<office> B123 </office>
</person>
<product> ... </product>
...
</company>
Exemplo: Atributos em DTDs
<!ELEMENT person (ssn, name, office, phone?)>
<!ATTLIST
person age CDATA #REQUIRED>
<person age=“25”>
<name> ....</name>
...
</person>
Exemplo: Atributos em DTDs
<!ELEMENT person (ssn, name, office, phone?)>
<!ATTLIST
person age
CDATA #REQUIRED
id
ID
#REQUIRED
manager IDREF #REQUIRED
manages IDREFS #REQUIRED
>
<person age=“25”
id=“p29432”
manager=“p48293” manages=“p34982 p423234”>
<name> ....</name>
...
</person>
Atributos em DTDs
Tipos:
CDATA
= string
ID
= chave
IDREF
= chave estrangeira
IDREFS
= chaves estrangeiras separadas por
espaços
(Monday | Wednesday | Friday) = enumeração
Qualificadores:
#REQUIRED
#IMPLIED
= opcional
value
= valor por omissão
value #FIXED
= único valor permitido
Utilização de DTDs


Incluir no documento XML:
A DTD completa
<!DOCTYPE rootElement [ ....... ]>

Ou uma referência para ela
<!DOCTYPE rootElement SYSTEM
“http://www.mydtd.org”>

Ou misturar as duas (por exemplo, para fazer
“override” da definição externa)
Exercício
Considere uma BD relacional contendo uma
relação “ensina” com atributos “disciplina” e
“docente” tal como já vimos no exercício de
XML.
Escreva uma DTD XML para representar esta
informação.
Desvantagens das DTDs





Sintaxe não XML
Não tem tipos de dados, em particular para o
conteúdo dos elementos
Só é marginalmente compatível com
namespaces
Não consegue usar conteúdo misto e obrigar
ordem e número de elementos filhos
Nomes dos elementos são globais
XML Schema




Generaliza DTDs
Utiliza a sintaxe XML
Descreve o conteúdo possível para
documentos XML
É uma W3C Recommendation
XML Schema Part 0: Primer
 XML Schema Part 1: Structures
 XML Schema Part 2: Datatypes


Também referida como XSDL: XML Schema
Definition Language
DTD vs XML Schema
DTD
<!ELEMENT> declaration
<!ATTLIST> declaration
<!ENTITY> declaration
#PCDATA content
n/a
XML Schema
xsd:element element
xsd:attribute element
n/a
xsd:string type
other data types
Tipos de dados simples e complexos


XML Schema suporta a definição de tipos de dados
e a declaração de elementos e de atributos
Tipos:



simples (inteiros, strings, ...)
complexos (expressões regulares, como nas DTDs)
Alternância element-type-element:





elemento raiz tem um tipo complexo
que é uma expressão regular de elementos
esses elementos têm os seus tipos complexos
...
nas folhas, temos tipos simples
Estrutura da declaração de elementos

xsd:sequence



xsd:choice



Obriga a que os elementos ocorrem na ordem dada
análogo a , em DTDs
Permite que um dos elementos dados ocorra
Análogo a | em DTDs
xsd:all


Permite que os elementos ocorram numa ordem
qualquer
Análogo a & nas DTDs SGML
Definição do número de ocorrências
dos elementos




Os atributos minOccurs e maxOccurs
controlam o número de ocorrências de um
elemento, sequence ou choice
minOccurs tem que ser um inteiro não
negativo
maxOccurs tem que ser um inteiro não
negativo ou sem limite
O valor por omissão para ambos é 1
Expressões regulares - resumo
Alternância element-type-element:
<xsd:complexType name=“....”>
[regular expression on elements]
</xsd:complexType>
Expressões regulares:





<xsd:sequence> A B C </...>
=ABC
<xsd:choice> A B C </...>
=A|B|C
<xsd:group> A B C </...>
= (A B C)
<xsd:... minOccurs=“0” maxOccurs=“unbounded”> ..</...> = (...)*
<xsd:... minOccurs=“0” maxOccurs=“1”> ..</...>
= (...)?
Exemplo
<xsd:element name=“paper” type=“papertype”/>
<xsd:complexType name=“papertype”>
<xsd:sequence>
<xsd:element name=“title” type=“xsd:string”/>
<xsd:element name=“author” minOccurs=“0”/>
<xsd:element name=“year”/>
<xsd: choice> < xsd:element name=“journal”/>
<xsd:element name=“conference”/>
</xsd:choice>
</xsd:sequence>
</xsd:element>
DTD: <!ELEMENT paper (title,author?,year, (journal|conference))>
Elementos versus Tipos
<xsd:element name=“person”>
<xsd:complexType>
<xsd:sequence>
<xsd:element name=“name”
type=“xsd:string”/>
<xsd:element name=“address”
type=“xsd:string”/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
DTD:
<xsd:element name=“person”
type=“ttt”>
<xsd:complexType name=“ttt”>
<xsd:sequence>
<xsd:element name=“name”
type=“xsd:string”/>
<xsd:element name=“address”
type=“xsd:string”/>
</xsd:sequence>
</xsd:complexType>
<!ELEMENT person (name,address)>
Tipos locais e globais


Tipo local:
<xsd:element name=“person”>
[define localmente o tipo da pessoa]
</xsd:element>
Tipo global:
<xsd:element name=“person” name=“ttt”/>
<xsd:complexType name=“ttt”>
[define aqui o tipo ttt]
</xsd:complexType>
Tipos globais podem ser reutilizados noutros elementos
Elementos locais versus elementos
globais

Elemento local:
<xsd:complexType name=“ttt”>
<xsd:sequence>
<xsd:element name=“address” type=“...”/>...
</xsd:sequence>
</xsd:complexType>

Elemento global:
<xsd:element name=“address” type=“...”/>
<xsd:complexType name=“ttt”>
<xsd:sequence>
<xsd:element ref=“address”/> ...
</xsd:sequence>
</xsd:complexType>
Elementos globais como nas DTDs
Atributos



Utilizar o elemento xsd:attribute dentro de um
xsd:complexType
Tem atributos name, type
Atributo use é opcional






Se omitido, então atributo é opcional
Use = “required” para atributos obrigatórios
Use = “fixed” para constantes
Use = “default” value =“ ...” para valor por
omissão
Para enumeração, usar xsd:SimpleType
Atributos têm que ser declarados no fim de
um xsd:complexType
Exemplo
<xsd:element name=“paper” type=“papertype”/>
<xsd:complexType name=“papertype”>
<xsd:sequence>
<xsd:element name=“title” type=“xsd:string”/>
......
</xsd:sequence>
<xsd:attribute name=“language" type="xsd:NMTOKEN" fixed=“English"/>
</xsd:complexType>
</xsd:element>
.
Conteúdo “Mixed”, Tipo “Any”
<xsd:complexType mixed="true">
. . . .

Melhor do que nas DTDs: pode assegurar o tipo, mas
pode existir texto entre quaisquer elementos
<xsd:element name="anything" type="xsd:anyType"/>
....

Significa que qualquer coisa é permitida
Tipos de dados simples











String
Token
Byte
unsignedByte
Integer
positiveInteger
Int (larger than integer)
unsignedInt
Long
Short
...







Time
dateTime
Duration
Date
ID
IDREF
IDREFS
Tipos de dados simples derivados
(pelo utilizador)



Tipos de dados complexos podem ser criados de
raiz
Novos tipos de dados simples podem ser derivados
a partir de outros tipos de dados simples já
existentes
Derivação pode ser:

Extensão:



Lista: uma lista de valores de um determinado tipo
União: permite valores de dois ou mais tipos de dados
Restrição: limita os valores permitidos usando:

Valor máximo, valor mínimo, tamanho, número de dígitos,
enumeração, padrões (facetas)
Facetas de tipos simples


Propriedades adicionais que restringem um tipo simples
15 facetas definidas no XML Schema
Exemplos:
 length
 minLength
 maxLength
 pattern
 enumeration
 whiteSpace






maxInclusive
maxExclusive
minInclusive
minExclusive
totalDigits
fractionDigits
Tipos derivados por extensões
<complexType name="Address">
<sequence> <element name="street" type="string"/>
<element name="city" type="string"/>
</sequence>
</complexType>
Corresponde
a herança
<complexType name="USAddress">
<complexContent>
<extension base="ipo:Address">
<sequence> <element name="state" type="ipo:USState"/>
<element name="zip" type="positiveInteger"/>
</sequence>
</extension>
</complexContent>
</complexType>
Tipos derivados por restrições
<complexContent>
<restriction base="ipo:Items“>
… [rewrite the entire content, with restrictions]...
</restriction>
</complexContent>
Corresponde à inclusão de conjuntos
Exemplo de restrição por enumeração
<xsd:element name="MScResult">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="distinction"/>
<xsd:enumeration value="merit"/>
<xsd:enumeration value="pass"/>
<xsd:enumeration value="fail"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
 Conteúdo do elemento MScResult é uma restrição do
xsd:string type
 Tem que ser um dos quatro valores dados

e.g., <MScResult>pass</MScResult>
Tópicos próximas aulas



XSLT
XPath
XQuery
Referências






Peter Wood, Slides on “Representing and Querying Data on the
Web”, http://www.dcs.bbk.ac.uk/~ptw/teaching/data-on-theweb.html.
Dan Suciu, Slides on “The semistructured data model”, CSE
590ds: Management of XML and Semistructured Data,
http://www.cs.washington.edu/education/courses/cse590ds/01sp/
S. Abiteboul, P. Buneman, D. Suciu, “Data on the Web, From
Relations to Semistructured Data and XML”, Morgan Kaufmann,
2000, (cap 3)
www.w3.org/TR/xmlschema-0
W3C's XML Schema Recommendation, Part 0: Primer
www.w3.org/TR/xmlschema-1
W3C's XML Schema Recommendation, Part 1: Structures
www.w3.org/TR/xmlschema-2
W3C's XML Schema Recommendation, Part 2: Datatypes
Subtle Use of Local Names
<xsd:element name=“A” type=“oneB”/>
<xsd:complexType name=“onlyAs”>
<xsd:choice>
<xsd:sequence>
<xsd:element name=“A” type=“onlyAs”/>
<xsd:element name=“A” type=“onlyAs”/>
</xsd:sequence>
<xsd:element name=“A” type=“xsd:string”/>
</xsd:choice>
</xsd:complexType>
<xsd:complexType name=“oneB”>
<xsd:choice>
<xsd:element name=“B” type=“xsd:string”/>
<xsd:sequence>
<xsd:element name=“A” type=“onlyAs”/>
<xsd:element name=“A” type=“oneB”/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name=“A” type=“oneB”/>
<xsd:element name=“A” type=“onlyAs”/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
Arbitrary deep binary tree with A elements, and a single B element
Nomes locais
nome tem
significados diferentes
em person e
em product
<xsd:element name=“person”>
<xsd:complexType>
. . . . .
<xsd:element name=“name”>
<xsd:complexType>
<xsd:sequence>
<xsd:element name=“firstname” type=“xsd:string”/>
<xsd:element name=“lastname” type=“xsd:string”/>
</xsd:sequence>
</xsd:element>
. . . .
</xsd:complexType>
</xsd:element>
<xsd:element name=“product”>
<xsd:complexType>
. . . . .
<xsd:element name=“name” type=“xsd:string”/>
</xsd:complexType>
</xsd:element>
Download

Slide 1