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