XML Schema XML schema é um vocabulário XML para expressar regras de negócios (sobre os dados).
Exemplo ° A localização precisa ser seguida de uma latitude e de uma longitude e do grau de incerteza que envolve as medidas; ° A latitude precisa ser um decimal com um valor entre -90 e 90 ° A longitude precisa ser um decimal com um valor entre -180 e 180
Validando os dados: XML Schema validator checar a latitude checar a longitude etc
Proposta do schema XML Especificar a estrutura das instâncias dos documentos! Definir o tipo de dados (datatype) de cada elemento/atributo! Exemplo de um esquema Schema XML
BookStore.xsd <xsd:schema xmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> xsd = XML Schema Definition
DTD de uma Livraria (BookStore) DTD equivalente ao Schema XML exemplificado
<xsd:schema xmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> <!ELEMENT Book (Title, Author, Date, ISBN, Publisher)>
<xsd:element name=" name " type=" type " minOccurs=" int " maxOccurs="int"/> Declaração de elementos: Tipo simples (xsd:string) ou complexo. Inteiro não negativo. Inteiro não negativo ou unbounded. <xsd:element name=" name" type="xsd:string" /> Alternativa Default: minOccurs=1 e maxOccurs=1
<xsd:schemaxmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> </xsd:schema>
<xsd:element name=" name " type=" type " minOccurs=" int " maxOccurs="int"/> Declaração de elementos: Tipo simples (xsd:string) ou complexo. Inteiro não negativo. Inteiro não negativo ou unbounded. <xsd:element name=" name" minOccurs="int" maxOccurs="int ">... Alternativa
<xsd:schemaxmlns:xsd=" targetNamespace=" xmlns=" </xsd:schema> <xsd:element ref="Book" minOccurs="1" maxOccurs= "unbounded"/>
Book +
<xsd:schemaxmlns:xsd=" targetNamespace=" xmlns=" " elementFormDefault="qualified"> </xsd:schema>
<xsd:schema xmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> Nomes para tipos complexos Sem nome Declaração Inline
<xsd:schema xmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> Nomes para tipos complexos Vantagem: reutilização!
Tipo de dados do usuário <xsd:schema xmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> Declaração de ISBN como do tipo ISBNType Definição de um novo tipo de dados
Outros Exemplos Restringe um tipo string a no máximo 8 caracteres, seguindo um padrão: 3 dígitos seguido por um traço (-) e mais 4 dígitos.
Outros Exemplos Restringe um tipo string aos valores circle, triangle e square.
Outros Exemplos Restringe um tipo integer a um valor mínimo igual a e máximo igual a
<xsd:element name="name " type=" type" minOccurs="int" maxOccurs="int"/> <xsd:element name="name" minOccurs="int" maxOccurs="int "> <xsd:element name="name" minOccurs="int" maxOccurs="int ">... 3 Resumo de declaração de Elementos
Tipos Derivados Formam uma subclasse de tipos complexos 1. Derivados por extensão: estendem o tipo complexo pai com mais elementos 2. Derivados por restrição: criam um tipo que é um subconjunto do tipo base Redefinir um elemento tipo base para ter uma restrição sobre os valores possíveis; 2.2. OU redefinir um elemento tipo base para ter uma restrição sobre o número de ocorrências;
<xsd:schema xmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> <xsd:complexType name="Publication"> <xsd:complexType name="BookPublication"> <xsd:extensionbase="Publication" > <xsd:element name="Book"type="BookPublication"maxOccurs="unbounded"/> Derivando por extensão: BookPublication estende a Publication
O tipo Publication passa a ter 05 elementos!
Title Author Date Publication ISBN Publisher BookPublication
<xsd:element name="Author" type="xsd:string" maxOccurs="unbounded" /> <xsd:restrictionbase="Publication"> Derivando por restrição: Note que SingleAuthorPublication tem apenas três elementos e o elemento Author aparecerá apenas 1 vez!
<!ATTLIST Book Category (autobiography | non fiction | fiction) #REQUIRED - InStock (true | false) "false" Reviewer CDATA " "> BookStore.dtd Declaração de Atributos
xsd:string xsd:integer xsd:boolean... required optional prohibited Obs.:se for usar valor default, não usar a opção "use " <xsd:facetvalue="valor/> Declaração de Atributos
Category (autobiography | non fiction | fiction) #REQUIRED - InStock (true | false) "false" Reviewer CDATA " "
<xsd:enumeration value="non - fiction"/> - Instâncias dos documentos têm que obrigatoriamente ter o atributo Categoria. - Os atributos são sempre simples, ou seja, não podem ter elementos filhos.
<xsd:element name="Author" type="xsd:string" m axOccurs="unbounded"/> <xsd:element name="Publisher" type="xsd:string "/> <xsd:enumeration value="autobiogra phy"/> <xsd:enumeration value="non - fiction"/> <xsd:attribute name="InStock" type="xsd:boolean" default="false"/> <xsd:attribute name="Reviewer" type="xsd:string" default=" "/> Declarando o atributo no próprio elemento
element complexType schema sequence XMLSchema Namespace string integer boolean
<xsd:schema xmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> Indica que os elementos definidos por esse esquema: - BookStore - Book - Title - Author - Date - ISBN - Publisher estarão no namespace
BookStore Book Title Author Date ISBN Publisher (targetNamespace) Book Namespace (targetNamespace)
<xsd:schema xmlns:xsd=" targetNamespace=" xmlns=" elementFormDefault="qualified"> Referência ao elemento Book, declarado no namespace padrão O namespace padrão é que também é o targetNamespace
Tipos de dados primitivos Primitive Datatypes –string –boolean –decimal –float –double –duration –dateTime –time –date –gYearMonth –gYear –gMonthDay –gDay –gMonth –hexBinary –base64Binary –anyURI –QName –NOTATION Atomic, built-in –"Hello World" –{true, false, 1, 0} –7.08 – 12.56E3, 12, 12560, 0, -0, INF, -INF, NAN – P1Y2M3DT10H30M12.3S – format: CCYY-MM-DDThh:mm:ss – format: hh:mm:ss.sss – format: CCYY-MM-DD – format: CCYY-MM – format: CCYY – format: --MM-DD –format: ---DD (note the 3 dashes) – format: --MM-- –a hex string –a base64 string – –a namespace qualified name –a NOTATION from the XML spec Note: 'T' is the date/time separator INF = infinity NAN = not-a-number
Derived types –normalizedString –token –language –IDREFS –ENTITIES –NMTOKEN –NMTOKENS –Name –NCName –ID –IDREF –ENTITY –integer –nonPositiveInteger –negativeInteger –long –int –short –byte –nonNegativeInteger –unsignedLong –unsignedInt –unsignedShort –unsignedByte –positiveInteger Subtype of primitive datatype –A string without tabs, line feeds, or carriage returns –String w/o tabs, l/f, leading/trailing spaces, consecutive spaces –any valid xml:lang value, e.g., EN, FR,... –usado somente com atributos –part (no namespace qualifier) –usado somente com atributos –456 –infinito negativo a 0 –infinito negativo a -1 – to – to – to – -127 to 128 – 0 to infinity – 0 to – 0 to – 0 to –0 to 255 –1 to infinity Tipos de dados primitivos (cont.)
… Facets: - length - minlength - maxlength - pattern - enumeration - totalDigits - minInclusive - maxInclusive - minExclusive - maxExclusive... Sources: - string - boolean - number - float - double - duration - dateTime - time... Forma geral para a especificação de valores de novos tipos