X170 definição e composição de esquemas instâncias documentação 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) 1
Cabeçalho e namespace Todas as declarações do XML Schema estão contidas em um elemento <xs:schema> que deve definir: Um atributo xmlns, declarando o namespace do XML Schema, geralmente associando-o a um prefixo (xs ou xsd). Um atributo targetnamespace*, contendo uma URI que identifique o namespace da linguagem-alvo que o XML Schema está descrevendo Um segundo atributo xmlns*, declarando o namespace da linguagem-alvo, possivelmente associando-o a um prefixo. <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.empresa.com/pontodevenda" xmlns="http://www.empresa.com/pontodevenda"> Se a linguagem não usar namespaces: <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema > 2
Composição de esquemas <xs:include> insere componentes de esquema do mesmo namespace localizados em outros arquivos Atributo schemalocation informa a URI onde se encontra o arquivo que será incluído <xs:include schemalocation="esquema.xsd"/> <xs:import> importa componentes de namespaces diferentes Atributo namespace é obrigatório Atributo schemalocation é opcional <xs:import namespace="http://ns.com" schemalocation="esquema.xsd"/> <xs:redefine> permite redefinir componentes 3
<xs:include> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.empresa.com/pontodevenda" xmlns="http://www.empresa.com/pontodevenda"> <xs:include schemalocation="ofertatypescomplex.xsd"/> <xs:include schemalocation="ofertatypessimple.xsd"/> <xs:element name="oferta" type="ofertatype" /> <xs:element name="codigo" type="codigotype"/> <xs:element name="preco" type="precotype"/> <xs:element name="itens" type="itenstype"/> </xs:schema> ofertatypescomplex.xsd ofertatypessimple.xsd <xs:complextype name="ofertatype"> <xs:simpletype name="precotype"> 4
<xs:import> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.empresa.com/pontodevenda" xmlns="http://www.empresa.com/pontodevenda" xmlns:pdvt="http://www.empresa.com/pontodevenda/tipos"> <xs:import namespace="http://www.empresa.com/pontodevenda/tipos" schemalocation="ofertatypesall.xsd"/> <xs:element name="oferta" type="pdvt:ofertatype" /> <xs:element name="codigo" type="pdvt:codigotype"/> <xs:element name="preco" type="pdvt:precotype"/> <xs:element name="itens" type="pdvt:itenstype"/> </xs:schema> <xs:schema targetnamespace="http://www.empresa.com/pontodevenda/tipos"... > 5
<xs:import> : o outro lado <xs:schema targetnamespace="http://www.empresa.com/pontodevenda"... > <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.empresa.com/pontodevenda/tipos" xmlns="http://www.empresa.com/pontodevenda/tipos" xmlns:pdv="http://www.empresa.com/pontodevenda"> <xs:import namespace="http://www.empresa.com/pontodevenda" schemalocation="ofertaelementsall.xsd"></xs:import> <xs:complextype name="ofertatype"> <xs:sequence> <xs:element ref="pdv:codigo"/> <xs:element ref="pdv:preco"/> <xs:element ref="pdv:itens"/> </xs:sequence> <xs:attribute name="validade" use="required" type="xs:nmtoken"/> </xs:complextype> <xs:complextype name="codigotype">...</xs:complextype> <xs:simpletype name="precotype">...</xs:simpletype> <xs:simpletype name="itemtype">...</xs:simpletype> </xs:schema> 6
Defaults <xs:schema> contém atributos que definem defaults para tipos e elementos. attributeformdefault="qualified unqualified" elementformdefault="qualified unqualified" blockdefault="#all substitution extension restriction" finaldefault="#all extension restriction list union" Determinam comportamento default em declarações e definição de componentes (Mais sobre isto adiante) 7
Instâncias associadas a um XML Schema Uma instância pode ser formalmente vinculada a uma instância através de atributos globais Namespace XML Schema Instance: http://www.w3.org/2001/xmlschema-instance Este namespace deve ser atribuído a prefixo para que se possa usar seus 4 atributos: schemalocation para vincular um ou mais XML Schemas à instância nonamespaceschemalocation para vincular a um XML Schemas que não usa namespace nil e type usados em elementos e atributos 8
Exemplos com namespace <oferta xmlns:xsi="http://www.w3.org/2001/xmlschema- instance" xsi:schemalocation="http://www.empresa.com/pontodevenda ofertaelementsallimport.xsd" xmlns="http://www.empresa.com/pontodevenda" validade="2010-07- 22"> <codigo numero="4599" tipo="t"/> <preco>15.2</preco> <itens>14</itens> </oferta> <pdv:oferta xmlns:xsi="http://www.w3.org/2001/xmlschema- instance" xsi:schemalocation="http://www.empresa.com/pontodevenda ofertaelementsallimport.xsd" xmlns:pdv="http://www.empresa.com/pontodevenda" validade="2010-07- 22"> <pdv:codigo numero="4599" tipo="t"/> <pdv:preco>15.2</pdv:preco> <pdv:itens>14</pdv:itens> </pdv:oferta> 9
Múltiplos namespaces Schemas compostos requerem a declaração de múltiplos namespaces na instância Esquema principal <xs:schema targetnamespace="http://cosmos.org.br" xmlns:cm="http://cosmos.org.br/com" xmlns:st="http://cosmos.org.br/sat" xmlns="http://cosmos.org.br" xmlns:xs="http://www.w3.org/2001/xmlschema"> Instância <se:sistemaestelar xmlns:se="http://cosmos.org.br" xmlns:sat="http://cosmos.org.br/sat" xmlns:cmt="http://cosmos.org.br/com" xmlns:xsi="http://www.w3.org/2001/xmlschema- instance" xsi:schemalocation="http://cosmos.org.br sistema.xsd http://cosmos.org.br/sat satelites.xsd http://cosmos.org.br/com cometas.xsd"> 10
Exemplo com múltiplos namespaces <html xmlns:xsi="http://www.w3.org/2001/xmlschema- instance" xsi:schemalocation="http://www.w3.org/1999/xhtml xhtml.xsd http://www.empresa.com/pontodevenda oferta.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:pdv="http://www.empresa.com/pontodevenda"> <head>...</head> <body><div class="oferta > <pdv:oferta validade="2010-07- 22"> <pdv:codigo numero="4599" tipo="t"/> <pdv:preco>15.2</pdv:preco> <pdv:itens>14</pdv:itens> </pdv:oferta> </div></body> </html> <html xmlns:xsi="http://www.w3.org/2001/xmlschema- instance" xsi:schemalocation="http://www.w3.org/1999/xhtml xhtml.xsd http://www.empresa.com/pontodevenda oferta.xsd" xmlns="http://www.w3.org/1999/xhtml" > <head>...</head><body><div class="oferta > <oferta validade="2010-07- 22" xmlns="http://www.empresa.com/pontodevenda"> <codigo numero="4599" tipo="t"/> <preco>15.2</preco> <itens>14</itens> </oferta> </div></body> </html> 11
Exemplo sem namespace <oferta xmlns:xsi="http://www.w3.org/2001/xmlschema- instance" xsi:nonamespaceschemalocation="ofertaelementsnons.xsd" validade="2010-07- 22"> <codigo numero="4599" tipo="t"/> <preco>15.2</preco> <itens>14</itens> </oferta> 12
Anotações <xs:annotation> Mecanismo de documentação e extensão do XML Schema Pode ser usado em qualquer elemento do XML Schema Dois sub-elementos: <xs:documentation> e <xs:appinfo> <xs:documentation> Para documentação que será lida por humanos <xs:appinfo> Ponto de extensão para informações de processamento que serão lidas por máquina 13
Anotações <xs:complextype name="ofertatype"> <xs:annotation> <xs:documentation xml:lang="pt- BR"> Os codigos existentes podem ser obtidos na tabela PROD_CODIGOS. </xs:documentation> <xs:appinfo> SELECT CODIGOS FROM PROD_CODIGOS WHERE STATUS < 2; </xs:appinfo> </xs:annotation> <xs:sequence> <xs:element ref="codigo"/> <xs:element ref="preco"/> <xs:element ref="itens"/> </xs:sequence> <xs:attribute name="validade" use="required" type="xs:nmtoken"/> </xs:complextype> 14