Tecnologias XML
XML Schema
XML Schema



Documento XML válido
Um documento Schema especifica as regras para a
validação de um documento XML
Um Schema especifica:




Os elementos e atributos que podem constar do
documento
A ordem e número dos elementos filhos
Tipos de dados para os elementos e atributos
Um Schema define uma classe de documentos.
Documentos XML que referenciam esse Schema são
instâncias dessa classe
XML Schema
XML
<pessoa id="123">
<nome>
António José Silva
</nome>
<data-nascimento>
<ano>1965</ano>
<mes>10</mes>
<dia>3</dia>
</data-nascimento>
<bi>4025527</bi>
</pessoa>
XML Schema
validator
-nome só pode ter letras
-data contém 3 elementos: ano, mês e dia
-mês é um numero inteiro >0 e <13
-bi é formado por 7 digitos
...
XML Schema
Informação
Validada
<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace=http://your_namespace >
<xsd:element name="pessoas" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="pessoa" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nome" type="xsd:string" />
<xsd:element name="data-nascimento" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ano" type="xsd:int" />
<xsd:element name="mes" type="xsd:int" />
<xsd:element name="dia" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="bi" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
XML Schema

Estrutura de um Schema
Declaração XML
<?xml version="1.0" ?>
Root
schema
<xsd:schema
xmlns:xsd=http://www.w3.org/2001/XMLSchema
targetNamespace=http://your_namespace
elementFormDefault="qualified">
<xsd:element ...
<!– definição de elementos e atributos -->
...
</xsd:schema>
namespace
prefixo xsd
XML Schema

Namespaces XML Schema
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Especifica as entidades para definir um
Schema: element, schema,simpleType
(XML


Schema Schema)
URI -> http://www.w3.org/2001/XMLSchema
Prefixo por convenção é xsd:
XML Schema
XML Schema Instance Namespaces
xmlns:xsi=http://www.w3.org/2001/
XMLSchema-instance


Deve ser referenciado por documentos
instância (XML) que usam entidades
definidas neste schema como:
xsi:schemaLocation
xsi:noNamespaceSchemaLocation
XML Schema

Referenciar um Schema no XML – (1)

Atributo xsi:noNamespaceSchemaLocation
pessoas.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<pessoas xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xsi:noNamespaceSchemaLocation=“pessoas.xsd" >
...
Documento
pessoas.xsd
XML Schema

Referenciar um Schema no XML – (2)

Atributo xsi:schemaLocation
pessoas.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<pessoas xmlns=http://your_namespace
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://your_namespace pessoas.xsd" >
...
pessoas.xsd
<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://your_namespace"
elementFormDefault="qualified">
…
XML Schema

Definição de elementos



Elemento xsd:element
O atributo name especifica o nome do
elemento no XML
O atributo type define o tipo de dados do
elemento
<xsd:element name="montante" type="xsd:float">
<montante>123.56</montante>
XML Schema

Tipos simples primitivos
<xsd:element name="ano" type="xsd:int"

/>
Tipos de dados para o conteúdo textual de
um elemento ou atributo
String
anyURI
....
float
decimal
date (ccyy-mm-dd)
time (hh:mm:ss.sss)
 Hierarquia de tipos de dados primitivos
anySimpleType –> decimal –> integer -> long ...
XML Schema

Tipos simples derivados



Derivação por restrição, lista ou união
Elemento xsd:simpleType
xsd:restriction define restrições
adicionais aos valores do elemento
<xsd:element name="percentagem">
<xsd:simpleType >
<xsd:restriction base="xsd:int">
<xsd:minInclusive value="0" />
<xsd:maxInclusive value="100" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
XML Schema

Operadores de restrição – facets







xsd:minInclusive - >=
xsd:maxInclusive - <=
xsd:length – tamanho fixo (string, listas)
xsd:totaldigits – o numero máximo de dígitos
xsd:pattern – expressão regular
xsd:fractionDigits - número de casas decimais.
enumeration – valores numa enumeração
XML Schema

Novos tipos de dados simples
<xsd:simpleType name="Toperador">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="91" />
<xsd:enumeration value="93" />
<xsd:enumeration value="96" />
</xsd:restriction>
</xsd:simpleType >

Atributo name de xsd:simpleType

Usados para definir tipos de dados de elementos
<xsd:element name="indicativo" type="Toperador">
XML Schema

Exemplos de restrições

xsd:length
<xsd:simpleType name="Tcodigo">
<xsd:restriction base="xsd:string">
<xsd:length value="7" />
</xsd:restriction>
</xsd:simpleType>

xsd:pattern
<xsd:simpleType name="Tbi">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{7}"/>
</xsd:restriction>
</xsd:simpleType>
XML Schema

Derivação por união
<xsd:simpleType name="Tmes" >
<xsd:union memberTypes="Tmesstr Tmesnum" />
</xsd:simpleType>

Elemento xsd:union

A instância pode conter um dos valores especificados
pelo atributo memberTypes
XML Schema

Derivação por lista
<xsd:simpleType name="Tenderecosweb" >
<xsd:list itemType="xsd:anyURI" />
</xsd:simpleType>

Elemento xsd:list

Exemplo XML
<web>http://www.dei.isep.ipp.pt
http://w2ks.dei.isep.ipp.pt</web>
XML Schema

Tipo Composto
 Os elementos de tipo composto podem conter
elementos filhos e atributos
 Um elemento com atributos é sempre do tipo
composto
 declarado usando o elemento complexType
<xsd:element name="data-nascimento" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ano" type="xsd:int"
<xsd:element name="mes" type="xsd:int"
<xsd:element name="dia" type="xsd:int"
</xsd:sequence>
</xsd:complexType>
</xsd:element>
/>
/>
/>
XML Schema

Composição dos sub-elementos num tipo
composto



sequence – especifica uma sequência com uma
ordem fixa
choice - especifica uma escolha de um
elemento, entre os elementos declarados
all – elementos não têm ordem fixa
XML Schema

<xs:choice>
<xs:group name="nameTypes">
<xs:choice>
<xs:element name="name" type="xs:string"/>
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="middleName" type="xs:string"
minOccurs="0"/>
<xs:element name="lastName" type="xs:string"/>
</xs:sequence>
</xs:choice>
</xs:group>
XML Schema

Definição de um elemento com conteúdo simples:
texto e atributo

<telefone operador="TMN" > 3457654 </telefone>
<xs:element name="telefone">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="operador" use="required"
type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
XML Schema

Restrições de ocorrência
 definir o modo como os elementos ocorrem
 Atributos minOccurs e maxOccurs
 Usados nos operadores de composição ou na
declaração de elementos
<xsd:element name=“grupo” >
<xsd:complexType>
<xsd:sequence maxOccurs=“2” >
<element name=“aluno” type=“Taluno”>
<xsd:element name="autor" type="xsd:string"
minOccurs="1" maxOccurs="unbounded" />
Declaração de atributos
Elemento xsd:attribute
 O atributo name especifica o nome e o atributo type
o tipo de dados
 o tipo de dados é do tipo simples primitivo ou
derivado
 declaração é feita dentro do elemento complexType
depois dos elementos
 Atributo use especifica a ocorrência




required - o atributo é obrigatório
optional - o atributo é opcional (por omissão)
prohibited - o atributo deve ser omitido
Exemplo Schema com atributos
<xsd:element name="pessoa" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nome" type="xsd:string" />
<xsd:element name=“dnascimento" type="xsd:date" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string"
use="required" />
</xsd:complexType>
Atributo depois dos
</xsd:element>
elementos
<pessoa id=“P123">
<nome>António José Silva</nome>
<dnascimento>2004-07-12</dnascimento>
</pessoa>

Validar XML em .Net
private void ValidationCallBack(Object sender, ValidationEventArgs args) {
//Display the validation error. This is only called on error
m_Success = false; //Validation failed
}
private bool validateXml(String pathstr)
{ m_Success = true;
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |=
XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new
ValidationEventHandler(ValidationCallBack);
// Create the XmlReader object.
XmlReader reader = XmlReader.Create(pathstr, settings);
// Parse the file.
while (reader.Read()) ;
reader.Close();
return m_Success;}
25
Download

xsd:element