37
DTD, XML Schema, XSDL Helena Galhardas DEI IST

DTD, XML Schema, XSDL

  • Upload
    donagh

  • View
    66

  • Download
    2

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: DTD, XML Schema, XSDL

DTD, XML Schema, XSDL

Helena Galhardas

DEI IST

Page 2: DTD, XML Schema, XSDL

Agenda

Tipos de dados em XML: DTD XML Schema ou XSDL

Page 3: DTD, XML Schema, 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

Page 4: DTD, XML Schema, XSDL

Define: Nomes de elementos Estrutura do conteúdo dos elementos Nomes dos atributos Valores dos atributos por omissão Entidades

Page 5: DTD, XML Schema, XSDL

DTDs vistas como gramáticas

<!DOCTYPE paper [ <!ELEMENT paper (section*)> <!ELEMENT section ((title,section*) | text)> <!ELEMENT title (#PCDATA)> <!ELEMENT text (#PCDATA)>]>

<!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>

Page 6: DTD, XML Schema, XSDL

DTDs vistas como esquemasNã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)*)>

Page 7: DTD, XML Schema, XSDL

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)>]>

<!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)>]>

Page 8: DTD, XML Schema, XSDL

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>

<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>

Page 9: DTD, XML Schema, XSDL

Exemplo: Atributos em DTDs

<!ELEMENT person (ssn, name, office, phone?)><!ATTLIST person age CDATA #REQUIRED>

<!ELEMENT person (ssn, name, office, phone?)><!ATTLIST person age CDATA #REQUIRED>

<person age=“25”> <name> ....</name> ...</person>

<person age=“25”> <name> ....</name> ...</person>

Page 10: DTD, XML Schema, XSDL

Exemplo: Atributos em DTDs<!ELEMENT person (ssn, name, office, phone?)><!ATTLIST person age CDATA #REQUIRED

id ID #REQUIRED

manager IDREF #REQUIRED

manages IDREFS #REQUIRED>

<!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>

<person age=“25” id=“p29432” manager=“p48293” manages=“p34982 p423234”> <name> ....</name> ...</person>

Page 11: DTD, XML Schema, XSDL

Atributos em DTDsTipos:

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

Page 12: DTD, XML Schema, XSDL

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)

Page 13: DTD, XML Schema, XSDL

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.

Page 14: DTD, XML Schema, XSDL

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

Page 15: DTD, XML Schema, XSDL

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

Page 16: DTD, XML Schema, XSDL

DTD vs XML Schema

DTD XML Schema

<!ELEMENT> declaration xsd:element element

<!ATTLIST> declaration xsd:attribute element

<!ENTITY> declaration n/a

#PCDATA content xsd:string type

n/a other data types

Page 17: DTD, XML Schema, XSDL

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

Page 18: DTD, XML Schema, XSDL

Estrutura da declaração de elementos xsd:sequence

Obriga a que os elementos ocorrem na ordem dada análogo a , em DTDs

xsd:choice 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

Page 19: DTD, XML Schema, XSDL

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

Page 20: DTD, XML Schema, XSDL

Expressões regulares - resumoAlternância element-type-element:

<xsd:complexType name=“....”> [regular expression on elements] </xsd:complexType>

Expressões regulares: <xsd:sequence> A B C </...> = A B C <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”> ..</...> = (...)?

Page 21: DTD, XML Schema, XSDL

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>

<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))>

Page 22: DTD, XML Schema, XSDL

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>

<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>

<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>

<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>

DTD: <!ELEMENT person (name,address)>

Page 23: DTD, XML Schema, XSDL

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

Page 24: DTD, XML Schema, XSDL

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

Page 25: DTD, XML Schema, XSDL

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

Page 26: DTD, XML Schema, XSDL

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>

<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>

.

Page 27: DTD, XML Schema, XSDL

Conteúdo “Mixed”, Tipo “Any”

Melhor do que nas DTDs: pode assegurar o tipo, mas pode existir texto entre quaisquer elementos

Significa que qualquer coisa é permitida

<xsd:complexType mixed="true"> . . . .

<xsd:complexType mixed="true"> . . . .

<xsd:element name="anything" type="xsd:anyType"/> . . . .

<xsd:element name="anything" type="xsd:anyType"/> . . . .

Page 28: DTD, XML Schema, XSDL

Tipos de dados simples

String Token Byte unsignedByte Integer positiveInteger Int (larger than integer) unsignedInt Long Short ...

Time dateTime Duration Date ID IDREF IDREFS

Page 29: DTD, XML Schema, XSDL

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)

Page 30: DTD, XML Schema, XSDL

Facetas de tipos simples

Exemplos: length minLength maxLength pattern enumeration whiteSpace

maxInclusive maxExclusive minInclusive minExclusive totalDigits fractionDigits

Propriedades adicionais que restringem um tipo simples 15 facetas definidas no XML Schema

Page 31: DTD, XML Schema, XSDL

Tipos derivados por extensões <complexType name="Address">

<sequence> <element name="street" type="string"/>

<element name="city" type="string"/>

</sequence>

</complexType>

<complexType name="USAddress">

<complexContent>

<extension base="ipo:Address">

<sequence> <element name="state" type="ipo:USState"/>

<element name="zip" type="positiveInteger"/>

</sequence>

</extension>

</complexContent>

</complexType>

<complexType name="Address">

<sequence> <element name="street" type="string"/>

<element name="city" type="string"/>

</sequence>

</complexType>

<complexType name="USAddress">

<complexContent>

<extension base="ipo:Address">

<sequence> <element name="state" type="ipo:USState"/>

<element name="zip" type="positiveInteger"/>

</sequence>

</extension>

</complexContent>

</complexType>

Corresponde a herança

Page 32: DTD, XML Schema, XSDL

Tipos derivados por restrições

<complexContent> <restriction base="ipo:Items“> … [rewrite the entire content, with restrictions]... </restriction> </complexContent>

<complexContent> <restriction base="ipo:Items“> … [rewrite the entire content, with restrictions]... </restriction> </complexContent>

Corresponde à inclusão de conjuntos

Page 33: DTD, XML Schema, XSDL

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>

Page 34: DTD, XML Schema, XSDL

Tópicos próximas aulas

XSLT XPath XQuery

Page 35: DTD, XML Schema, XSDL

Referências Peter Wood, Slides on “Representing and Querying Data on the

Web”, http://www.dcs.bbk.ac.uk/~ptw/teaching/data-on-the-web.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

Page 36: DTD, XML Schema, XSDL

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: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>

<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

Page 37: DTD, XML Schema, XSDL

Nomes locais<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>

<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>

nome tem significados diferentesem person eem product