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=“[0-9][0-9][0-9]”/> value=“[A-Z][A-Z][A-Z]”/> value=“[xyz]”/> value=“[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element> 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 Declaraçãocountry="france">35</shoesize> 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 Indicadores de Tipos Complexos Ordem: All Choice Sequence Ocorrência: maxOccurs minOccurs Grupo: Group name AttributeGroup name 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> Element Group Attribute Group