dtd, xml schema, xsdl helena galhardas dei ist. agenda tipos de dados em xml: dtd xml schema ou xsdl

37
DTD, XML Schema, XSDL Helena Galhardas DEI IST

Upload: internet

Post on 17-Apr-2015

135 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DTD, XML Schema, XSDL Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou XSDL

DTD, XML Schema, XSDL

Helena Galhardas

DEI IST

Page 2: DTD, XML Schema, XSDL Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou XSDL

Agenda

Tipos de dados em XML: DTD XML Schema ou XSDL

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

Page 4: DTD, XML Schema, XSDL Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou XSDL

Tópicos próximas aulas

XSLT XPath XQuery

Page 35: DTD, XML Schema, XSDL Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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 Helena Galhardas DEI IST. Agenda Tipos de dados em XML: DTD XML Schema ou 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