Namespaces e Esquemas XML Namespaces - Motivação M.L.M.Campos & Paulo Pires Problema 1: NCE 2003 Cada usuário ou grupo pode criar suas próprias etiquetas (tags): mesmas tags podem ter sîgnificados diferentes Problema 2: Aplicações Baseadas em XML quando se juntam dois documentos que usam a mesma etiqueta (tag) com significados diferentes Precisa-se, de alguma maneira, remover a ambigüidade Usam-se então Namespaces URLs são usados não por apontarem para uma dada localização mas por serem exclusivos 1 Namespaces M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Permitem que seja usado um esquema de atribuição de nomes ao longo de um conjunto de documentos Usa IP para associar nomes exclusivos a URI Usa o atributo “xmlns” Declaração e uso de Namespace M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <x xmlns:edi='http://ecommerce.org/schema'> <!-- the 'price' element's namespace is http://ecommerce.org/schema --> <edi:price units='Euro'>32.18</edi:price> </x> NCE 2003 2 Múltiplos Namespaces M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0"?> <!-- both namespace prefixes are available throughout --> <bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'> <bk:title>Cheaper by the Dozen</bk:title> <isbn:number>1568491379</isbn:number> </bk:book> Outro Exemplo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <aaa > <bbb > <ccc /> </bbb> <BBB > <CCC /> </BBB> <x111 > <x222 /> </x111> </aaa> NCE 2003 3 Exemplo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <lower:aaa xmlns:lower = "http://zvon.org/lowercase" > <lower:bbb > <lower:ccc /> </lower:bbb> <upper:BBB xmlns:upper = "http://zvon.org/uppercase" > <upper:CCC /> </upper:BBB> <xnumber:x111 xmlns:xnumber = "http://zvon.org/xnumber" > <xnumber:x222 /> </xnumber:x111> </lower:aaa> Declararação de namespaces na raiz M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <lower:aaa xmlns:lower = "http://etc.org/lowercase” xmlns:upper = "http://etc.org/uppercase" xmlns:xnumber = "http://etc.org/xnumber" > <lower:bbb > <lower:ccc /> </lower:bbb> <upper:BBB > <upper:CCC /> </upper:BBB> <xnumber:x111 > <xnumber:x222 /> </xnumber:x111> </lower:aaa> NCE 2003 4 Namespace Default M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Namespaces não têm que ser declarados explicitamente com prefixos. O atributo xmlns define o namespace default que é usado para o elemento onde ele ocorre e para seus filhos e descendentes. <aaa > <bbb xmlns = "http://etc.org/lowercase" > <ccc /> </bbb> <BBB xmlns = "http://etc.org/uppercase" > <CCC /> </BBB> <x111 xmlns = "http://etc.org/xnumber" > <x222 /> </x111> </aaa> Exemplo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Elementos podem até pertencer a diferentes namespaces embora eles tenham os mesmos prefixos! <aaa > <lower:bbb xmlns:lower = "http://etc.org/lowercase" > <lower:ccc /> </lower:bbb> <lower:BBB xmlns:lower = "http://etc.org/uppercase" > <lower:CCC /> </lower:BBB> <lower:x111 xmlns:lower = "http://etc.org/xnumber" > <lower:x222 /> </lower:x111> </aaa> NCE 2003 5 Namespaces e seu uso M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Namespaces são amplamente usados nas diversas iniciativas associadas ao XML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="pattern"> <template><value-of select="."/></template> </xsl:template> </xsl:stylesheet> Esquemas XML DTD XML Schemas NCE 2003 6 Uso de Esquema XML M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Possibilita o processamento de documentos identificando as limitações de estrutura e conteúdo Possibilita verificar se o documento é válido Facilita a troca de informações. Esquema XML M.L.M.Campos & Paulo Pires Esquema em XML significa uma definição da estrutura de uma classe de documentos XML Formas de representar Esquema XML: DTD XML Schema Outras propostas: NCE 2003 Aplicações Baseadas em XML XDR - XML Data Reduced - Microsoft SOX - Schema for OO XML - Commerce One Schematron, DSD: foco na validação de esquemas e ainda DCD, DDML, Assertion Grammars, RELAX 7 DTD – Document Type Definition M.L.M.Campos & Paulo Pires Contém declarações que definem: a seqüência e aninhamento de elementos exigida ou permitida valores e tipos dos atributos exigidos ou permitidos nomes de entidades internas e externas necessárias e utilizadas das notações Tipos de DTDs Aplicações Baseadas em XML DTD Interno: declarações em DOCTYPE DTD externos - SYSTEM e PUBLIC DOCTYPE: associa declarações de DTD com um documento Declarações básicas ELEMENT, ATTLIST, ENTITY, NOTATION DTD (Document Type Definition) M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Exemplo de definição e uso do DTD no mesmo documento: livro.xml: <?xml version="1.0"?> <!DOCTYPE livroDTD[ <!ELEMENT livro (titulo, isbn)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT isbn (#PCDATA)> ]> <livro> <titulo> XML Metadata </titulo> <isbn> 1-861004-51-6 </isbn> </livro> NCE 2003 8 DTD - Tipos de conteúdo de um Elemento M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML conteúdo elemento: pode ter elementos filho. conteúdo misto: pode conter caractere ou outros elementos. ANY: pode ter conteúdo de qualquer estrutura. O parser não valida. EMPTY: não tem elemento filho ou conteúdo de dado do tipo caracter, somente atributos são permitidos. PCDATA: pode conter dado do tipo caracter somente, pode ter atributos. DTD - Exemplos usando categorias de conteúdo: M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML contéudo elemento: Lista Sequencial <!ELEMENT publicacoes (publicacao1, publicacao2, publicacao3)> <!-- documento XML terá as três publicações, mesmo que como elementos vazios --> conteúdo elemento: Lista de escolha <!ELEMENT publicacoes (publicacao1 | publicacao2 | publicacao3)+> <!-- documento XML poderá ter 1 ou mais publicações apresentadas em qualquer ordem --> NCE 2003 9 DTD - Exemplos usando categorias de conteúdo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML conteúdo misto <!ELEMENT autor (#PCDATA | primeiro_nome | segundo_nome)*> ANY <!ELEMENT outra_informacao ANY> <!-- o elemento outra_informacao poderá receber conteúdo de qualquer tipo --> EMPTY <!ELEMENT marca EMPTY> DTD - Exemplo de definição e uso do DTD (em arquivo separado) M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML livraria.dtd: (armazenado em c:\projeto\projetoXML) <!ELEMENT livraria (livro*)> <!ELEMENT livro (titulo, autor+, ano, editora)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT ano (#PCDATA)> <!ELEMENT editora (#PCDATA)> livraria.xml: <?xml version="1.0"?> <!DOCTYPE livraria SYSTEM "c:\projeto\projetoXML\livraria.dtd"> <livraria> <livro> <titulo> XML Metadata </titulo> <autor> Kal Ahmed </autor> <autor> Danny Ayers </autor> <ano> 2001 </ano> <editora> Wrox Press </editora> </livro> </livraria> NCE 2003 10 DTD – Ocorrência de elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Tipos de ocorrência ( , ): elementos devem ocorrer na ordem especificada; | : apenas um dos elementos deve ocorrer; Cardinalidade sem operador: uma ocorrência do elemento é requerida. ? : zero ou uma ocorrência é permitida. * : zero ou mais ocorrências de um elemento são permitidas. + : uma ou mais ocorrências de um elemento são permitidas. Atributos – Tipos de Atributos M.L.M.Campos & Paulo Pires CDATA: 2003 um de um conj de nomes declarados no DTD [Valor enumerado]: NCE um nome/lista de nomes delimitados por branco NOTATION: entidade(s) externa pré-def NMTOKEN/NMTOKENS: referencia(s) para um ID (existente) ENTITY/ENTITIES: ident único IDREF/IDREFS: string ID: Aplicações Baseadas em XML um de um conj definido 11 ATTLIST: Valores default M.L.M.Campos & Paulo Pires #REQUIRED: opcional #FIXED: obrigatório #IMPLIED: Aplicações Baseadas em XML sempre fixo, aparece opcionalmente apenas valor: valor assumido qdo não especificado Exemplo de declaração de lista de atributos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML contatos.dtd: (armazenado em c:\projeto\projetoXML) <!ELEMENT contatos (telefone*)> <!ELEMENT telefone (#PCDATA)> <!ATTLIST telefone tipo (residencia | escritorio | celular) #REQUIRED> contatos.xml: <?xml version="1.0"?> <!DOCTYPE contatos SYSTEM "c:\projeto\projetoXML\contatos.dtd"> <contatos> <telefone tipo="residencia"> 021 33907777 </telefone> <telefone tipo="escritorio"> 021 22797178 </telefone> <telefone tipo="celular"> 021 91020754 </telefone> </contatos> OBS: com o uso de #REQUIRED todo elemento telefone tem que identificar um tipo da lista. NCE 2003 12 Atributos – mais exemplos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Atributos ID e IDREF Estes tipos de atributos permitem criar uma referência a um documento <!–- declaração do element secao --> <!–- o atributo de identificação de secao --> <!–- target é optional --> <!ELEMENT secao (#PCDATA|xref)* > <!ATTLIST secao target ID #IMPLIED > <!–- declaracao do elemento xref --> <!ELEMENT xref EMPTY > <!ATTLIST xref ref IDREF #REQUIRED> <secao target='X321'> conteúdo de uma seção </secao> <secao> outra seção. Faz referência à seção X321 <xref ref='X321'/> </secao> Não referenciamos de fato uma seção, mas um elemento do documento que possui um atributo do tipo ID e cujo valor é X321. Entidades: ENTITY M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Entidades Internas Entidades pré-definidas certos caracteres, como < > & ' " não podem ser utilizados dentro do texto de um documento estes caracteres devem ser representados por seus códigos pré-definidos, chamadas entidades pré- definidas <: < >: > &: & NCE 2003 13 Entidades: ENTITY M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML ENTIDADES INTERNAS (cont.) Entidades definidas pelo usuário é possível declarar as entidades dentro do DTD esta declaração tem a forma <!ENTITY nome-entidade "valor-entidade"> Exemplo a declaração seguinte <!DOCTYPE toto [ <!ENTITY copyright "© Editions titi"> ]> <toto> ©right; </toto> produzirá © Editions titi observação: 00A9 é o código Unicode do caracter © Entidades externas endereçadas por URL M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Exemplo <?xml version='1.0' ?> <!DOCTYPE livro [ <!ENTITY capitulo1 SYSTEM "chap1.xml"> <!ENTITY capitulo2 SYSTEM "chap2.xml"> <!ENTITY autor "toto"> ]> <livro> <titulo> XML para idiotas </titulo> <autor> &autor; </autor> <intro> Era uma vez uma Web… </intro> &capitulo1; &capitulo2; </livro> NCE 2003 Restrição: as entidades externas devem ser documentos bem formados 14 Notações e entidades não XML M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Exemplo <!DOCTYPE exemplo [ <!NOTATION jpeg SYSTEM "/usr/local/bin/xview"> <!ENTITY foto-ferias SYSTEM "./fotos/foto1.jpg" NDATA jpeg> <!ELEMENT exemplo (foto)> <!ELEMENT foto EMPTY> <!ATTLIST foto img ENTITY #REQUIRED> <exemplo> <foto img='foto-ferias'/> </exemplo> ]> A declaração de notação associa ao formato jpeg a aplicação xview que poderá ser utilizada em extensão da aplicação XML. A declaração da entidade foto-ferias indica que o conteúdo dos dados está situado no arquivo foto1.jpg A palavra-chave NDATA indica que este arquivo é de um formato não XML DTD - Limitações M.L.M.Campos & Paulo Pires Um documento XML pode estar associado a somente uma DTD DTD não é extensível Não tem integração com namespaces XML Não provê herança Usa um único tipo atômico (PCDATA) 2003 os valores para o elemento <sexo> devem ser F ou M. Não garante integridade referencial Não tem integer, float, etc. Não permite declarar restrições de domínio NCE Aplicações Baseadas em XML Não pode ser garantido que um autor de um livro só pode ser uma referência a uma instância de elemento do tipo pessoa. Não é escrito em linguagem XML, escrito em EBNF (Extended BackusNaur Form); 15 XML Schemas XML Schema M.L.M.Campos & Paulo Pires As limitações do DTD levaram o W3C a desenvolver XML Schema, também chamado de XSD Schema Vantagens: Escrito em linguagem XML Provê integração com namespaces XML 2003 Provê integração de esquemas estruturais com tipos de dados Provê herança Inclui os tipos primitivos inteiro, data e dado binário NCE Aplicações Baseadas em XML XSD possui facilidade de documentação por meio dos elementos <xsd:annotation> e <xsd:documentation> que são específicos para documentação 16 XML Schema M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Mais vantagens: As mesmas ferramentas usadas para criação e edição de documentos XML podem ser usadas para a criação do esquema Suporta os tipos dados usados na maioria das linguagens de programação XML Schema - Uso de namespace M.L.M.Campos & Paulo Pires No namespace xsd (http://www.w3.org/2001/XMLSchema) estão os elementos e tipos de dados padrões usados para construir esquemas. NCE 2003 Aplicações Baseadas em XML Exemplos: schema, element, complexType, sequence, string, etc. "schema" é o elemento raiz. Os elementos e tipos próprios do esquema podem ser definidos em outro namespace. 17 Exemplo XML Schema M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version='1.0'?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!-- exemplo de XML Schema --> Declara o namespace xsd <xsd:complexType name="Endereco"> <xsd:sequence> <xsd:element name="Nome" type="xsd:string"/> <xsd:element name="Rua" type="xsd:string"/> <xsd:element name="Cidade" type="xsd:string"/> <xsd:element name="Estado" type="xsd:string"/> <xsd:element name="Cep" type="xsd:string"/> <xsd:element name="Pais" type="xsd:string"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Brasil"/> <xsd:enumeration value="França"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:sequence> arquivo exemplo1.xsd </xsd:complexType> </xsd:schema> Comparando um DTD com um XML Schema M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML BookStore.dtd <!ELEMENT BookStore (Book)+> <!ELEMENT Book (Title, Author, Date, ISBN, Publisher)> <!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT Publisher (#PCDATA)> Copyright © [2001]. Roger L. Costello. All Rights Reserved. NCE 2003 18 Copyright © [2001]. Roger L. Costello. All Rights Reserved. <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.books.org" M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML xmlns="http://www.books.org" elementFormDefault="qualified"> <xsd:element name="BookStore"> <xsd:complexType> <xsd:sequence> <!ELEMENT BookStore (Book)+> <xsd:element ref="Book" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Book"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Title" minOccurs="1" maxOccurs="1"/> <!ELEMENT Book (Title, Author, Date, <xsd:element ref="Author" minOccurs="1" maxOccurs="1"/> ISBN, Publisher)> <xsd:element ref="Date" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref="Publisher" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Title" type="xsd:string"/> <xsd:element name="Author" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Publisher" type="xsd:string"/> </xsd:schema> <!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT Publisher (#PCDATA)> <?xml version="1.0"?> Os elementos e tipos de <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> dados são usados para <xsd:element name="BookStore"> M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML construir esquemas: <xsd:complexType> Schema é - schema <xsd:sequence> sempre a <xsd:element ref="Book" minOccurs="1" - element raiz do maxOccurs="unbounded"/> - complexType documento </xsd:sequence> - sequence </xsd:complexType> - string </xsd:element> e estão descritos no <xsd:element name="Book"> namespace <xsd:complexType> http://…/XMLSchema <xsd:sequence> <xsd:element ref="Title" minOccurs="1" maxOccurs="1"/> <xsd:element ref="Author" minOccurs="1" maxOccurs="1"/> <xsd:element ref="Date" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref="Publisher" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Title" type="xsd:string"/> <xsd:element name="Author" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Publisher" type="xsd:string"/> </xsd:schema> Copyright © [2001]. Roger L. Costello. All Rights Reserved. NCE 2003 19 Exemplo: Um Poema M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML "Soneto Já Antigo" (Álvaro de Campos) Olha, Daisy: quando eu morrer tu hás-de dizer aos meus amigos aí de Londres, embora não o sintas, que tu escondes a grande dor da minha morte. Irás de Londres p'ra Iorque, onde nasceste (dizes que eu nada que tu digas acredito), contar áquele pobre rapazito que me deu horas tão felizes, embora não o saibas, que morri... Mesmo ele, a quem eu tanto julguei amar, nada se importará... Depois vai dar a notícia a essa estranha Cecily que acreditava que eu seria grande... Raios partam a vida e quem lá ande! Elementos Estruturais: Poema: título, autor, corpo, data Corpo: quadra, quadra, terno, terno. Quadra: verso, verso, verso, verso Terno: verso, verso, verso Verso: (texto | nome)+ Nome: texto (extraído de http://www.di.uminho.pt/~jcr/ apresentação de Jósé Ramalho) (1922) Poema anotado M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <poema><titulo>Soneto Já Antigo</titulo> <autor>Álvaro de Campos</autor> <quadra> <verso>Olha,<nome> Daisy</nome>: quando eu morrer tu hás-de</verso> <verso>dizer aos meus amigos aí de <nome>Londres</nome>,</verso> <verso>embora não o sintas, que tu escondes</verso> <verso>a grande dor da minha morte. Irás de</verso> </quadra><quadra> <verso><nome>Londres</nome> p'ra <nome>Iorque</nome>, onde nasceste (dizes</verso> <verso>que eu nada que tu digas acredito),</verso> <verso>contar àquele pobre rapazito</verso> <verso>que me deu horas tão felizes,</verso> </quadra><terno> <verso>em bora não o saibas, que morri...</verso> ...</terno> <data>1922</data></poema> NCE 2003 20 Especificação do tipo poema usando DTD M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Poema: título, autor, corpo, data Corpo: quadra, quadra, terno, terno. Quadra: verso, verso, verso, verso Terno: verso, verso, verso Verso: (texto | nome)+ Nome: texto <!ELEMENT <!ELEMENT poema poema (titulo,autor,corpo,data) (titulo,autor,corpo,data) >> <!ELEMENT corpo (quadra,quadra,terno,terno) <!ELEMENT corpo (quadra,quadra,terno,terno) >> <!ELEMENT <!ELEMENT quadra quadra (verso,verso,verso,verso) (verso,verso,verso,verso) >> <!ELEMENT terno (verso,verso,verso) <!ELEMENT terno (verso,verso,verso) >> <!ELEMENT <!ELEMENT verso verso (#PCDATA (#PCDATA |nome)* |nome)* >... >... DTD Especificação do tipo poema usando XML Schema M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml <?xml version="1.0" version="1.0" encoding="UTF-8"?> encoding="UTF-8"?> <xs:schema <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element <xs:element name="poema"> name="poema"> <xs:complexType> <xs:complexType> <xs:sequence> <xs:sequence> <xs:element <xs:element name="titulo" name="titulo" type="xs:string"/> type="xs:string"/> <xs:element <xs:element name="autor" name="autor" type="xs:string"/> type="xs:string"/> <xs:element name="data" type="xs:string"/> <xs:element name="data" type="xs:string"/> <xs:element <xs:element name="corpo" name="corpo" type="Tcorpo"/> type="Tcorpo"/> </xs:sequence> </xs:sequence> <xs:attribute <xs:attribute name="tipo" name="tipo" type="xs:string" type="xs:string" use="required" use="required" default="soneto"/> default="soneto"/> </xs:complexType> </xs:complexType> </xs:element> </xs:element> <xs:complexType <xs:complexType name="Tcorpo"> name="Tcorpo"> <xs:sequence> <xs:sequence> <xs:element <xs:element name="quadra" name="quadra" type="Tquadra"/> type="Tquadra"/> <xs:element <xs:element name="quadra" name="quadra" type="Tquadra"/> type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence> </xs:sequence> </xs:complexType> </xs:complexType> ... ... </xs:schema> </xs:schema> NCE 2003 21 Exemplo: O Poema M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="poema"> <xs:complexType> <xs:complexType name="Tquadra"> <xs:sequence> <xs:sequence> <xs:element name="titulo" type="xs:string"/> <xs:element name="verso" type="Tverso"/> <xs:complexType name="Tcorpo"> <xs:element name="autor" type="xs:string"/> <xs:element name="verso" type="Tverso"/> <xs:sequence> <xs:element name="data" type="xs:string"/> <xs:element name="verso" type="Tverso"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="corpo" type="Tcorpo"/> <xs:element name="verso" type="Tverso"/> <xs:element name="quadra" type="Tquadra"/> </xs:sequence> </xs:sequence> <xs:element name="terno" type="Tterno"/> <xs:attribute name="tipo" </xs:complexType> <xs:element name="terno" type="Tterno"/> type="xs:string" <xs:complexType name="Tterno"> </xs:sequence> use=“optional" <xs:sequence> </xs:complexType> default="soneto"/> <xs:element name="verso" type="Tverso"/> </xs:complexType> <xs:element name="verso" type="Tverso"/> </xs:element> <xs:element name="verso" type="Tverso"/> ... </xs:schema> </xs:sequence> </xs:complexType> Exemplo: O Poema M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="poema"> <xs:complexType> <xs:complexType name="Tquadra"> <xs:sequence> <xs:sequence> <xs:element name="titulo" type="xs:string"/> <xs:element name="verso" type="Tverso"/> <xs:complexType <xs:complexType name="Tverso" name="Tcorpo"> mixed="true"> <xs:element name="autor" type="xs:string"/> <xs:element name="verso"maxOccurs="unbounded"> type="Tverso"/> <xs:choice <xs:sequence> minOccurs="0" <xs:element name="data" type="xs:string"/> <xs:element name="verso" type="Tverso"/> <xs:element <xs:element name="nome" name="quadra" type="xs:string"/> type="Tquadra"/> <xs:element name="corpo" type="Tcorpo"/> <xs:element name="verso" type="Tverso"/> <xs:element <xs:element name="lugar" name="quadra" type="xs:string"/> type="Tquadra"/> </xs:sequence> </xs:sequence> </xs:choice> <xs:element name="terno" type="Tterno"/> <xs:attribute name="tipo" </xs:complexType> </xs:complexType> <xs:element name="terno" type="Tterno"/> type="xs:string" <xs:complexType name="Tterno"> </xs:sequence> use=“optional" <xs:sequence> </xs:complexType> default="soneto"/> <xs:element name="verso" type="Tverso"/> </xs:complexType> <xs:element name="verso" type="Tverso"/> </xs:element> <xs:element name="verso" type="Tverso"/> ... </xs:schema> </xs:sequence> </xs:complexType> NCE 2003 22 XML Schema - Tipos Primitivos Tipos de &dados M.L.M.Campos Paulo Pires primitivos xsd:string xsd:boolean xsd:decimal xsd:float xsd:double xsd:duration xsd:datetime xsd:time xsd:date xsd:gYearMonth xsd:gYear xsd:gMonthDay xsd:gDay xsd:gMonth xsd:hexBinary xsd:base64Binary xsd:anyURI xsd:Qname xsd:NOTATION Descrição Aplicações Baseadas em XML strings em XML valores lógico (true, false) números decimais tipo ponto flutuante precisão simples tipo ponto flutuante precisão dupla uma duração de tempo um instante de tempo específico um instante de tempo que ocorre todo dia uma data do calendário mês e ano gregoriano específicos ano gregoriano específico uma data gregoriana que ocorre cada ano um dia gregoriano que ocorre cada mês um mês gregoriano que ocorre todo ano dado binário em base hexa dado binário em base 64 uma URI (Uniform Resource Identifier) um nome XML qualificado tipo de atributo NOTATION do XML 1.0 XML Schema - Tipos Primitivos Tipos de &dados M.L.M.Campos Paulo Pires primitivos NCE 2003 xsd:string xsd:boolean xsd:decimal xsd:float xsd:double xsd:duration xsd:datetime xsd:time xsd:date xsd:gYearMonth xsd:gYear xsd:gMonthDay xsd:gDay xsd:gMonth xsd:hexBinary xsd:base64Binary xsd:anyURI xsd:Qname xsd:NOTATION Descrição Aplicações Baseadas em XML strings em XML valores lógico (true, false) números decimais tipo ponto flutuante precisão simples tipo ponto flutuante precisão dupla uma duração de tempo um instante de tempo específico um instante de tempo que ocorre todo dia uma data do calendário mês e ano gregoriano específicos ano gregoriano específico uma data gregoriana que ocorre cada ano um dia gregoriano que ocorre cada mês um<xs:element mês gregoriano que ocorre type="xs:string"/> todo ano name="nome" dado binário em name="lugar" base hexa <xs:element type="xs:string"/> dado binário em base 64 uma URI (Uniform Resource Identifier) um nome XML qualificado tipo de atributo NOTATION do XML 1.0 23 XML Schema - Tipos Derivados M.L.M.Campos & Paulo Pires Derivam dos tipos primitivos Aplicações Baseadas em XML integer (decimal), long (integer), ... Por restrição Por extensão XML Schema - Simple and Complex Types M.L.M.Campos & Paulo Pires Os tipos de dados em XML Schema: NCE 2003 string, date, float, double, timeDuration, ... Um tipo “simple” restringe o texto que pode aparecer no valor de um atributo ou no conteúdo de um elemento textual. Tipo “complex”: “simple” ou “complex”. Tipo “simple” é um dos tipos básicos: Aplicações Baseadas em XML Um elemento que tenha atributos ou elementos filho é do Um tipo “complex” restringe o conteúdo de um elemento relativamente aos atributos e elementos filho que pode ter. 24 Exemplo: complex Type M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xs:complexType name="Tquadra"> <xs:sequence> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> </xs:sequence> </xs:complexType> Tverso é uma referência a um “complex type” definido em outro ponto no schema Tquadra é um complex type com nome (em oposição a um anônimo) Possíveis compositores: • sequence (todos em ordem), • choice (apenas um) e • all (todos em qualquer ordem) XML Schema - Escopo dos elementos M.L.M.Campos & Paulo Pires NCE 2003 Aplicações Baseadas em XML Um elemento pode ser declarado como global ou como local. Um elemento global é declarado como sendo filho de <schema>. Um elemento local é declarado em algum ponto na estrutura do Schema. Os elementos globais podem ser reutilizados por referência. 25 Exemplo - Elementos globais M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xs:element name="poema"> <xs:complexType> <xs:sequence> <xs:element name="titulo" type="xs:string"/> <xs:element name="autor" type="xs:string"/> <xs:element name="data" type="xs:string"/> <xs:element name="corpo"> <xs:complexType> <xs:sequence> <xs:element ref = "Quadra"/> <xs:element ref = "Quadra"/> <xs:element ref = "Terno"/> <xs:element ref = "Terno"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> Exemplo - Elementos globais M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xs:element name=“quadra”> <xs:complexType> <xs:sequence> <xs:element name="poema"> <xs:element ref="verso"/> <xs:complexType> <xs:element ref="verso"/> <xs:sequence> <xs:element ref="verso"/> <xs:element name="titulo" type="xs:string"/> <xs:element ref="verso"/> <xs:element name="autor" type="xs:string"/> </xs:sequence> <xs:element name="data" type="xs:string"/> </xs:complexType> <xs:element name="corpo"> </xs:element> <xs:complexType> <xs:sequence> <xs:element ref = "Quadra"/> <xs:element ref = "Quadra"/> <xs:element ref = "Terno"/> <xs:element ref = "Terno"/> <?xml version=“1.0” encoding=“iso-8859-1”?> </xs:sequence> <quadra> </xs:complexType> <verso>Olha,<nome>Daisy</nome>: quando eu morrer tu hás-de</verso> </xs:element> <verso>dizer </xs:sequence> aos meus amigos aí de <nome>Londres</nome>,</verso> <verso>embora não o sintas, que tu escondes</verso> </xs:complexType> <verso>a grande dor da minha morte. Irás de</verso> </xs:element> </quadra> Instância Válida NCE 2003 26 XML Schema – Reutilização por Referência M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Outro exemplo referenciando elemento: <?xml version='1.0'?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="PrimeiroNome" type="xsd:string"/> <xsd:element name="NomeMeio" type="xsd:string"/> <xsd:element name="UltimoNome" type="xsd:string"/> ... <xsd:element name="Nome"> <xsd:complexType> <xsd:sequence> <xsd:element ref="PrimeiroNome"/> <xsd:element ref="NomeMeio"/> <xsd:element ref="UltimoNome"/> </xsd:sequence> </xsd:complexType> </xsd:element> ... XML Schema - Cardinalidade M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xs:complexType name="Tquadra"> <xs:sequence> <xs:element name="verso" type="Tverso“ minOccurs="4" maxOccurs="4"/> </xs:sequence> </xs:complexType> A cardinalidade pode ser restringida recorrendo aos atributos: minOccurs e maxOccurs NCE 2003 27 XML Schema - Valores para elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xs:element name=“email" type=“xs:string“ default=“[email protected]"/> Valor por omissão <xs:element name=“supervisor" type=“xs:string“ fixed=“José Carlos Ramalho"/> Valor fixo Valor Valor fixo fixo –– significa significa que que oo valor valor informado informado deve deve ser ser igual ao valor fixed ou não deve ser informado. igual ao valor fixed ou não deve ser informado. Caso Caso contrário, contrário, oo documento documento não não será será válido. válido. XML Schema - Atributos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Os atributos declaram-se recorrendo ao elemento “<attribute>” Um atributo é sempre do tipo “simple” <xs:attribute name="tipo" type="xs:string" use=“optional" default="soneto"/> use: (optional | required) Se não especificarmos, assume-se “optional” NCE 2003 28 XML Schema - Restrição de tipos primitivos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xs:simpleType <xs:simpleType name=“dia“ name=“dia“ base base == “xs:integer”> “xs:integer”> <xs:minInclusive value=“1”/> <xs:minInclusive value=“1”/> <xs:maxInclusive <xs:maxInclusive value=“31”/> value=“31”/> </xs:simpleType> </xs:simpleType> Restrição de domínio <xs:simpleType <xs:simpleType name=“telefone“ name=“telefone“ base base == “xs:integer”> “xs:integer”> <xs:pattern value=“\d{4}-\d{4}”/> <xs:pattern value=“\d{4}-\d{4}”/> </xs:simpleType> </xs:simpleType> Restrição de formato Sumário de Declaração de Atributos (2 formas) 1 M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsd:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/> xsd:string xsd:integer xsd:boolean ... 2 NCE 2003 required default fixed optional prohibited This attribute is only used with use="default" and use="fixed" <xsd:attribute name="nome" use=”como-usad" value="valor"> <xsd:simpleType> <xsd:restriction base=”tipo-simples"> <xsd:facet value="valor"/> … </xsd:restriction> </xsd:simpleType> </xsd:attribute> 29 XML Schema - Restrições ou facetas M.L.M.Campos & Paulo Pires minInclusive maxInclusive maxExclusive Length minLength maxLength Pattern Aplicações Baseadas em XML Enumeration minExclusive Precision Scale Encoding Period Duration Exemplo - Restrição por enumeração M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xs:simpleType name=“diaSemana“ base = “xs:string”> <xs:enumeration value=“Domingo”/> <xs:enumeration value=“Segunda”/> <xs:enumeration value=“Terça”/> <xs:enumeration value=“Quarta”/> <xs:enumeration value=“Quinta”/> <xs:enumeration value=“Sexta”/> <xs:enumeration value=“Sábado”/> </xs:simpleType> NCE 2003 30 Exemplo - Referenciando atributo que representa restrição M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version='1.0'?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:attribute name="Controle"> O atributo controle foi declarado globalmente. <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="DRH"/> <xsd:enumeration value="DP"/> </xsd:restriction> </xsd:simpleType> Referencia a declaração do atributo </xsd:attribute> Controle feita anteriormente. ... <xsd:element name="InfoSalario"> <xsd:complexType> <xsd:attribute ref="Controle"/> </xsd:complexType> </xsd:element> ... XML Schema - Outros exemplos de restrição Restringe o elemento CreditoMaximo a ter o valor máximo de 1000 M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML ... <xsd:element name="CreditoMaximo"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxInclusive value="1000"/> </xsd:restriction> Máximo permitido. E <minInclusive> poderia ter sido usado para mínimo. </xsd:simpleType> </xsd:element> ... Restringe o tipo Num a ter uma expressão regular ... <xsd:simpleType name="Num"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[A-Z] {2}-\d{3}"/> </xsd:restriction> 2 letras, um traço e 3 números. </xsd:simpleType> ... NCE 2003 31 Observação sobre Atributos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML A declaração de atributos sempre vem após as declarações de elementos. ”aa e ab são atributos de A" <xsd:element name=”A"> <xsd:complexType> <xsd:sequence> … </xsd:sequence> <xsd:attribute name=”aa" …/> <xsd:attribute name=”ab" …/> </xsd:complexType> </xsd:element> Elementos vazios M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xs:element name="ref"> <xs:complexType> <xs:attribute name="destino" type="xs:string" use="required"/> </xs:complexType> </xs:element> <xs:element name="imagem"> <xs:complexType> <xs:attribute name="path" type="xs:string" use="required"/> <xs:attribute name="formato" type="xs:string" use="optional"/> </xs:complexType> </xs:element> NCE 2003 32 Comentários no XML Schema M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML O elemento <annotation> é usado para comentar o esquema Use <documentation> para comentários para usuários humanos Use <appinfo> para comentários para programas O conteúdo pode ser qualquer texto XML bem formado. Os comentários não têm efeito sobre a validação do esquema <xsd:annotation> <xsd:documentation> The following constraint is not expressible with XML Schema: The value of element A should be greater than the value of element B. So, we need to use a separate tool (e.g., Schematron) to check this constraint. We will express this constraint in the appinfo section (below). </xsd:documentation> <xsd:appinfo> <assert test="A > B">A should be greater than B</assert> </xsd:appinfo> <xsd:/annotation> Comentários no DTD M.L.M.Campos & Paulo Pires DTD também permite comentários Aplicações Baseadas em XML <!-- comment goes here --> Vantagens do comentário do XML Schema Os comentários podem ser estruturados Aplicando um style sheet, o esquema se torna auto-descrito <xs:group <xs:group name="CreditOrDebitGroup"> name="CreditOrDebitGroup"> <xs:annotation> <xs:annotation> <xs:appinfo> <xs:appinfo> if if (currentNode.firstChild (currentNode.firstChild !="Credit") !="Credit") docParser.load(debitURL); docParser.load(debitURL); else else document.write("Your document.write("Your account account will will be be credited credited ..."); ..."); </xs:appinfo> </xs:appinfo> </xs:annotation> </xs:annotation> ... ... </xs:group> </xs:group> NCE 2003 33 Exemplo: M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Conversão do DTD CatalogoLivros.dtd para XML Schema <!ELEMENT CatalogoLivros(livro)*> <!ELEMENT livro(titulo, autor, data, isbn, editora) <!ELEMENT titulo (#PCDATA) <!ELEMENT autor (#PCDATA) <!ELEMENT data (#PCDATA) <!ELEMENT isbn (#PCDATA) <!ELEMENT editora (#PCDATA) <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org" Pires Aplicações Baseadas em XML xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=“editora" type="xsd:string"/> </xsd:schema> NCE 2003 34 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <!ELEMENT CatalogoLivros (Book)*> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <!ELEMENT livro (titulo, autor, data, <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> ISBN, editora)> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:schema> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT data (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT editora (#PCDATA)> <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org" Pires Aplicações Baseadas em XML xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> NCE 2003 Todos XML Schemas têm "schema" como elemento raiz.. 35 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org" Pires Aplicações Baseadas em XML xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org” Pires Aplicações Baseadas em XML xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> NCE 2003 Os elementos que são usados para criar um XML Schema vêm do XMLSchema namespace indica que os elementos declarados neste schema (CatalogoLivros, livro, titulo, autor, data, ISBN, editora) vão para este namespace 36 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org” Pires Aplicações Baseadas em XML xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org” Pires Aplicações Baseadas em XML xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> NCE 2003 O namespace default é http://www.publishing.org que é o targetNamespace! Este está referenciando uma declaração de um elemento livro. livro em qual namespace? Uma vez que não há um qualificador de namespace, é uma referência ao elemento livro no namespace default, que é o targetNamespace! Esta é uma diretiva para instâncias de documentos que usam este schema: Quaisquer elementos usados pela instância de documento que foi declarada por este schema deve ser qualificada pelo namespace especificado pelo targetNamespace. 37 Esquema alternativo ... M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> Atributos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Seja o DTD <!ELEMENT CatalogoLivros (Book)*> <!ELEMENT livro (titulo, autor+, data, ISBN, editora)> <!ATTLIST livro Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED EmEstoque (true | false) "false" Revisor CDATA " "> <!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT Publisher (#PCDATA)> <!ELEMENT Month (#PCDATA)> <!ELEMENT Year (#PCDATA)> NCE 2003 38 <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> <xsd:attributeGroup ref="AtributosLivro"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="AtributosLivro"> <xsd:attribute name="Categoria" use="required"> Categoria (autobiography | non-fiction | fiction) #REQUIRED <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> EmEstoque (true | false) "false" <xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> Revisor CDATA " " </xsd:attributeGroup> Alternativamente ... M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="Categoria" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> </xsd:complexType> </xsd:element> NCE 2003 39 Outras propostas para esquemas XML M.L.M.Campos & Paulo Pires RELAX NG Aplicações Baseadas em XML Sendo desenvolvido na OASIS (Organization for Advancement in Structured Information Standards); Resultado da junção de 2 propostas anteriores: Tutorial disponível: 2003 http://www.oasis-open.org/committees/relax-ng/tutorial.html XML-Data Reduced (XDR) NCE TREX (Tree Regular Expressions), proposta por James Clark - líder técnico das recomendações XML 1.0 e editor do XSLT e Xpath. RELAX, proposta por Murata Makoto. Iniciativa BizTalk promovida pela Microsoft; É uma modificação da proposta XML-Data submetida ao W3C em 1998 Site: http://www.microsoft.com. 40