1 / 37

DTD, XML Schema, XSDL

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

donagh
Download Presentation

DTD, XML Schema, XSDL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DTD, XML Schema, XSDL Helena Galhardas DEI IST

  2. Agenda • Tipos de dados em XML: • DTD • XML Schema ou XSDL

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

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

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

  6. 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)*)>

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

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

  9. Exemplo: Atributos em DTDs <!ELEMENT person (ssn, name, office, phone?)> <!ATTLIST personageCDATA #REQUIRED> <personage=“25”> <name> ....</name> ... </person>

  10. Exemplo: Atributos em DTDs <!ELEMENT person (ssn, name, office, phone?)> <!ATTLIST personageCDATA #REQUIRED idID #REQUIRED managerIDREF #REQUIRED managesIDREFS #REQUIRED > <personage=“25” id=“p29432” manager=“p48293” manages=“p34982 p423234”> <name> ....</name> ... </person>

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

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

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

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

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

  16. DTD vs XML Schema DTD XML Schema <!ELEMENT> declaration xsd:element element <!ATTLIST> declaration xsd:attribute element <!ENTITY> declarationn/a #PCDATA content xsd:string type n/a other data types

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

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

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

  20. 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 </...> = 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”> ..</...> = (...)?

  21. Exemplo <xsd:elementname=“paper” type=“papertype”/> <xsd:complexTypename=“papertype”> <xsd:sequence> <xsd:elementname=“title” type=“xsd:string”/> <xsd:elementname=“author” minOccurs=“0”/> <xsd:elementname=“year”/> <xsd:choice> < xsd:elementname=“journal”/> <xsd:elementname=“conference”/> </xsd:choice> </xsd:sequence> </xsd:element> DTD: <!ELEMENT paper (title,author?,year, (journal|conference))>

  22. Elementos versus Tipos <xsd:elementname=“person”> <xsd:complexType> <xsd:sequence> <xsd:elementname=“name” type=“xsd:string”/> <xsd:elementname=“address”type=“xsd:string”/> </xsd:sequence> </xsd:complexType></xsd:element> <xsd:elementname=“person”type=“ttt”><xsd:complexType name=“ttt”> <xsd:sequence> <xsd:elementname=“name” type=“xsd:string”/> <xsd:elementname=“address”type=“xsd:string”/> </xsd:sequence></xsd:complexType> DTD: <!ELEMENT person (name,address)>

  23. Tipos locais e globais • Tipo local: <xsd:elementname=“person”> [define localmente o tipo da pessoa] </xsd:element> • Tipo global: <xsd:elementname=“person” name=“ttt”/> <xsd:complexType name=“ttt”> [define aqui o tipo ttt] </xsd:complexType> Tipos globais podem ser reutilizados noutros elementos

  24. Elementos locais versus elementos globais • Elemento local: <xsd:complexType name=“ttt”> <xsd:sequence> <xsd:elementname=“address” type=“...”/>... </xsd:sequence> </xsd:complexType> • Elemento global: <xsd:elementname=“address” type=“...”/> <xsd:complexType name=“ttt”> <xsd:sequence><xsd:elementref=“address”/> ... </xsd:sequence> </xsd:complexType> Elementos globais como nas DTDs

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

  26. Exemplo <xsd:elementname=“paper” type=“papertype”/> <xsd:complexTypename=“papertype”> <xsd:sequence> <xsd:elementname=“title” type=“xsd:string”/> . . . . . . </xsd:sequence> <xsd:attribute name=“language" type="xsd:NMTOKEN" fixed=“English"/> </xsd:complexType> </xsd:element> .

  27. 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:complexTypemixed="true"> . . . . <xsd:elementname="anything" type="xsd:anyType"/> . . . .

  28. String Token Byte unsignedByte Integer positiveInteger Int (larger than integer) unsignedInt Long Short ... Time dateTime Duration Date ID IDREF IDREFS Tipos de dados simples

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

  30. Exemplos: length minLength maxLength pattern enumeration whiteSpace maxInclusive maxExclusive minInclusive minExclusive totalDigits fractionDigits Facetas de tipos simples • Propriedades adicionais que restringem um tipo simples • 15 facetas definidas no XML Schema

  31. Tipos derivados por extensões <complexTypename="Address"> <sequence> <elementname="street" type="string"/> <elementname="city" type="string"/> </sequence> </complexType> <complexTypename="USAddress"> <complexContent> <extensionbase="ipo:Address"> <sequence> <elementname="state" type="ipo:USState"/> <elementname="zip" type="positiveInteger"/> </sequence> </extension> </complexContent> </complexType> Corresponde a herança

  32. Tipos derivados por restrições <complexContent> <restrictionbase="ipo:Items“> … [rewrite the entire content, with restrictions]... </restriction> </complexContent> Corresponde à inclusão de conjuntos

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

  34. Tópicos próximas aulas • XSLT • XPath • XQuery

  35. 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-0W3C's XML Schema Recommendation, Part 0: Primer • www.w3.org/TR/xmlschema-1W3C's XML Schema Recommendation, Part 1: Structures • www.w3.org/TR/xmlschema-2W3C's XML Schema Recommendation, Part 2: Datatypes

  36. Subtle Use of Local Names <xsd:complexType name=“oneB”> <xsd:choice> <xsd:elementname=“B” type=“xsd:string”/> <xsd:sequence> <xsd:elementname=“A” type=“onlyAs”/> <xsd:elementname=“A” type=“oneB”/> </xsd:sequence> <xsd:sequence> <xsd:elementname=“A” type=“oneB”/> <xsd:elementname=“A” type=“onlyAs”/> </xsd:sequence> </xsd:choice></xsd:complexType> <xsd:elementname=“A” type=“oneB”/> <xsd:complexType name=“onlyAs”> <xsd:choice> <xsd:sequence> <xsd:elementname=“A” type=“onlyAs”/> <xsd:elementname=“A” type=“onlyAs”/> </xsd:sequence> <xsd:elementname=“A” type=“xsd:string”/> </xsd:choice></xsd:complexType> Arbitrary deep binary tree with A elements, and a single B element

  37. Nomes locais <xsd:elementname=“person”> <xsd:complexType> . . . . . <xsd:elementname=“name”> <xsd:complexType> <xsd:sequence> <xsd:elementname=“firstname” type=“xsd:string”/> <xsd:elementname=“lastname” type=“xsd:string”/> </xsd:sequence> </xsd:element> . . . . </xsd:complexType></xsd:element> <xsd:elementname=“product”> <xsd:complexType> . . . . . <xsd:elementname=“name” type=“xsd:string”/> </xsd:complexType></xsd:element> nome tem significados diferentes em person e em product

More Related