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
<?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:element name="nome" type="xsd:string" /> <xsd:element name="data-nascimento" > <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:attribute name="id" type="xsd:string" use="required" /> </xsd:schema>
XML Schema Estrutura de um Schema Declaração XML <xsd:schema <?xml version="1.0" ?> <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> Declaração XML Root schema namespace prefixo xsd
URI -> http://www.w3.org/2001/XMLSchema 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 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/XMLSchema-instance" xsi:noNamespaceSchemaLocation=“pessoas.xsd" > ... Documento pessoas.xsd
XML Schema Referenciar um Schema no XML – (2) Atributo xsi:schemaLocation pessoas.xml pessoas.xsd <?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" > ... <?xml version="1.0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://your_namespace" elementFormDefault="qualified"> …
XML Schema Elemento xsd:element 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>
Tipos simples primitivos 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 float date (ccyy-mm-dd) anyURI decimal time (hh:mm:ss.sss) .... Hierarquia de tipos de dados primitivos anySimpleType –> decimal –> integer -> long ...
Tipos simples derivados 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 Atributo name de xsd:simpleType Usados para definir tipos de dados de elementos <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 > <xsd:element name="indicativo" type="Toperador">
XML Schema Exemplos de restrições xsd:length xsd:pattern <xsd:simpleType name="Tcodigo"> <xsd:restriction base="xsd:string"> <xsd:length value="7" /> </xsd:restriction> </xsd:simpleType> <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 Elemento xsd:union A instância pode conter um dos valores especificados pelo atributo memberTypes <xsd:simpleType name="Tmes" > <xsd:union memberTypes="Tmesstr Tmesnum" /> </xsd:simpleType>
XML Schema Derivação por lista Elemento xsd:list Exemplo XML <web>http://www.dei.isep.ipp.pt http://w2ks.dei.isep.ipp.pt</web> <xsd:simpleType name="Tenderecosweb" > <xsd:list itemType="xsd:anyURI" /> </xsd:simpleType>
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
<xs:choice> XML Schema <xs:group name="nameTypes"> <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> </xsd:element> Atributo depois dos 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;}