390 likes | 534 Views
XML Schema. Renata Pontin de Mattos Fortes SCE-225 Hipermídia 2°Semestre 2003. Material elaborado por Lisandra Cazassa Fumagalli. XML Schema: O que é? (1/2). É uma Recomendação W3C (Maio/2001); É uma alternativa para o DTD baseada em XML; Descreve a estrutura de um documento XML;
E N D
XML Schema Renata Pontin de Mattos Fortes SCE-225 Hipermídia 2°Semestre 2003 Material elaborado por Lisandra Cazassa Fumagalli
XML Schema: O que é? (1/2) • É uma Recomendação W3C (Maio/2001); • É uma alternativa para o DTD baseada em XML; • Descreve a estrutura de um documento XML; • A linguagem XML Schema é também referenciada como XML Schema Definition (XSD).
XML Schema: O que é? (2/2) • É extensível para futuras adições; • É mais rico e mais útil que os DTD’s; • É escrito em XML; • Suporta tipos de dados; • Suporta namespaces.
Introdução (1/2) Um XML Schema define: • elementos que podem aparecer em um documento; • atributos que podem aparecer em um documento; • quais elementos são elementos filhos; • o ordem dos elementos filhos;
Introdução (2/2) • o número de elementos filhos; • se um elemento é vazio ou poder incluir algum texto; • os tipos de dados para elementos e atributos; • valores default e fixos para elementos e atributos.
Exemplo <?xml version=“1.0”?> <xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema”> <xs:element name=“note”> <xs:complexType> <xs:sequence> <xs:element name=“to” type=“xs:string”/> <xs:element name=“from” type=“xs:string”/> <xs:element name=“heading” type=“xs:string”/> <xs:element name=“body” type=“xs:string”/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Elemento <schema> O elemento <schema> é o elemento raiz de todo XML Schema! <?xml version=“1.0”?> <xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema”> ... </xs:schema>
Elemento Simples • É um elemento XML que pode conter somente texto; não pode conter outros elementos ou atributos. • O texto pode ser de vários tipos diferentes, incluindo tipos customizados. • Sintaxe: <xs:element name=“title” type=“xs:string”/>
Elemento Simples - exemplo Elementos XML: <lastname>Smith</lastname> <age>34</age> <dateborn>1970-05-26</dateborn> Definição em XML Schema: <xs:element name=“lastname” type=“xs:string”/> <xs:element name=“age” type=“xs:integer”/> <xs:element name=“dateborn” type=“xs:date”/>
Elemento Simples – valores default e fixed <xs:element name=“color” type=“xs:string” default=“red”/> <xs:element name=“color” type=“xs:string” fixed=“red”/>
Tipos de dados comuns em XML Schema • xs:string • xs:decimal • xs:integer • xs:boolean • xs:date • xs:time
Atributos XSD • O atributo é declarado como sendo um tipo simples. • Sintaxe: <xs:attribute name=“id” type=“xs:integer”/> • Elemento XML com atributo: <lastnane lang=“EN”>Smith</lastname> • Definição em XML Schema: <xs:attribute name=“lang” type=“xs:string”/>
Atributos – valores default e fixed <xs:attribute name=“lang” type=“xs:string” default=“EN”/> <xs:attribute name=“lang” type=“xs:string” fixed=“EN”/>
Atributos – obrigatórios e opcionais <xs:attribute name=“lang” type=“xs:string” use=“optional”/> <xs:attribute name=“lang” type=“xs:string” use=“required”/>
Restrições (1/5) • Restrições são usadas para controlar valores aceitáveis para elementos XML ou atributos. <xs:element name=“age”> <xs:simpleType> <xs:restriction base=“xs:integer”> <xs:minInclusive value=“0”/> <xs:maxInclusive value=“100”/> </xs:restriction> </xs:simpleType> </xs:element>
Restrições (2/5) • Sobre um conjunto de valores – enumeration: <xs:element name=“car”> <xs:simpleType> <xs:restriction base=“xs:string”> <xs:enumeration value=“Audi”/> <xs:enumeration value=“Ferrari”/> <xs:enumeration value=“BMW”/> </xs:restriction> </xs:simpleType> </xs:element>
Restrições (3/5) • O mesmo exemplo poderia ser: <xs:element name="car“ type=“carType”/> <xs:simpleType name=“carType”> <xs:restriction base=“xs:string”> <xs:enumeration value=“Audi”/> <xs:enumeration value=“Ferrari”/> <xs:enumeration value=“BMW”/> </xs:restriction> </xs:simpleType>
Restrições (4/5) • Sobre uma série de valores – pattern: <xs:element name=“letter”> <xs:simpleType> <xs:restriction base=“xs:string”> <xs:pattern value=“[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:pattern value=“[A-Z][A-Z][A-Z]”/> <xs:pattern value=“[xyz]”/> <xs:pattern value=“[0-9][0-9][0-9]”/>
Restrições (5/5) • Sobre tamanho – lenght: <xs:element name=“password”> <xs:simpleType> <xs:restriction base=“xs:string”> <xs:minLength value=“5”/> <xs:maxLength value=“8”/> </xs:restriction> </xs:simpleType> </xs:element>
Elemento Complexo • Um elemento complexo é um elemento XML que contém outros elementos e/ou atributos. • Há quatro tipos: • Elementos vazios (empty) • Elementos que contêm somente outros elementos • Elementos que contêm somente texto • Elementos que contêm tanto outros elementos quanto texto
Elemento Complexo - Exemplo • Elementos complexos XML: <employee> <firstname>Smith</firstname> <lastname> John </lastname> <employee>
Elemento Complexo - Exemplo • Definição em XML Schema: <xs:element name=“employee”> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
Elemento Complexo – Outro exemplo <xs:element name="employee" type="personinfo"/> <xs:element name="student" type="personinfo"/> <xs:element name="member“ type="personinfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>
Elemento Complexo Vazio • Pode conter atributos mas não pode ter qualquer conteúdo entre as tags de abertura e fechamento. • Elemento XML vazio: <product prodid = “1345” />
Elemento Complexo Vazio • Definição em XML Schema: <xs:element name="product"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:integer"> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element>
Elemento Complexo Vazio • De forma mais compacta: <xs:element name="product"> <xs:complexType> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:complexType> </xs:element>
Elemento Complexo com apenas elementos • Definição em XML Schema: <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
Elemento Complexo com apenas texto <shoesize country="france">35</shoesize> • Declaração em XML Schema: <xs:element name="shoesize"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:integer"> <xs:attribute name="country" type="xs:string"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
Elemento Complexo com conteúdo misto • Um elemento complexo misto pode conter atributos, elementos e texto. • Elemento XML: <letter> Dear Mr.<name>John Smith</name>. Your order <orderid>1032</orderid> will be shipped on <shipdate>2001-07-13</shipdate>. </letter>
Elemento Complexo com conteúdo misto • Definição em XML Schema: <xs:element name="letter"> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="orderid" type="xs:positiveInteger"/> <xs:element name="shipdate" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element>
Indicadores de Tipos Complexos • Pode-se controlar como os elementos serão usados nos documentos com indicadores. • Há sete tipos de indicadores: • 3 de Ordem • 2 de Ocorrência • 2 de Grupos
Ordem: All Choice Sequence Ocorrência: maxOccurs minOccurs Grupo: Group name AttributeGroup name Indicadores de Tipos Complexos
All • Especifica que os elementos filhos podem aparecer em qualquer ordem e devem ocorrer uma e apenas uma vez. <xs:element name="person"> <xs:complexType> <xs:all> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:all> </xs:complexType> </xs:element>
Choice • Especifica que tanto um elemento filho quanto o outro podem ocorrer. <xs:element name="person"> <xs:complexType> <xs:choice> <xs:element name="employee" type="employee"/> <xs:element name="member" type="member"/> </xs:choice> </xs:complexType> </xs:element>
Sequence • Especifica que os elementos filhos devem aparecer em um ordem espeçífica. <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
maxOccurs minOccurs • Especificam o número máximo e mínimo, respectivamente, que um elemento pode ocorrer. <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="full_name" type="xs:string"/> <xs:element name="child_name" type="xs:string" maxOccurs="10" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element>
Group • Indicadores de grupo são usados para definir conjuntos de elementos relacionados. • Elementos: <xs:group name=“groupname”> ... </xs:group> • Atributos: <xs:attributeGroup name=“groupname”> ... </xs:attributeGroup>