<? X M L ?> XML Profa. Éverlin Fighera Costa Marques Programa “Conhecendo padrões abertos de interoperabilidade” <? X M L ?> < ? X M L ? > Conteúdo z Histórico de XML z XML e opções z Objetivos z Estratégias z Construção de arquivos XML z GML < ? X M L ? > < ? X M L ? > O que é XML? z eXtensive Markup Language z linguagem de marcação z padrão de representação de dados z z gerenciada pelo W3C (World Wide Web Consortium) prover necessidades de comunicação entre sistemas fornecendo uma identificação flexível para todo tipo de informação < ? X M L ? > < ? X M L ? > Características z Foco no documento z Distinção formato X informação z Descrição detalhada de um documento (estrutura) z Independência de processador z Transmitir, exportar e manipular dados < ? X M L ? > < ? X M L ? > Necessidades de intercâmbio entre sistemas Desafio nº 1 “Troca de documentos independentemente dos formatos existentes.” Necessidade de linguagem de marcação genérica com conjunto universal de instruções estrutura extensível para funcionar em várias plataformas diferentes Interoperabilidade !!! < ? X M L ? > < ? X M L ? > Histórico z z z z Precursores •GML (Generalized Markup Language) •SGML (Standard Generalized Markup Language) Criação de documentos independentes de sistemas e dos programas usados. Trocar informações entre usuários em diferentes sistemas e plataformas sem nenhuma alteração necessária SGML: muitas especificações. < ? X M L ? > < ? X M L ? > Histórico Desafio nº 2 “Elaborar uma forma de validação de documentos mais simples que o SGML !!!” < ? X M L ? > < ? X M L ? > Metas de XML z Mais simples que SGML z Criado para Internet z Rapidez de criação de documentos XML z z Fácil construção de interpretadores para documentos XML Documento XML é compreensível ao humano z Projeto de XML deve ser formal e conciso z Projetado para Internet z [1] Suporte à variedade de aplicações < ? X M L ? > < ? X M L Objetivos do XML Atender mudanças de publicações eletrônicas em grande escala. Regra de exportação de dados Web/ outros : Trocas de dados em meio eletrônico ? > Armazenamento/organização de documentos Descrição de informações de aplicação (metadados) < ? X M L ? > XML < ? X M L ? > HTML XML / HTML <h1>Fulano de Tal</h1> <h2>[email protected]</h2> <p> <b>47</b> <i>431234567</i> </p> <nome>Fulano de Tal</nome> <email>[email protected]</email > <telefone> <ddd>47</ddd> <numero>431234567</numero> </telefone> < ? X M L ? > XML < ? X M L ? > z z / HTML Melhor controle em relação ao layout Menor esforço do servidor Web para acessar informações do lado do cliente z Uso de vários tipos de links z Publicação de qualquer tipo de informação z Facilidade para exibir páginas longas < ? X M L ? > Objetivos do XML < ? Dados armazenados em XML podem ser facilmente transformados em outros formatos! < ? X M L X M L ? > ? > < ? X M L ? > < ? XML XML e e-ping X M L ? > < ? X M L ? > XML e e-ping • e-PING • Padrões de Interoperabilidade de Governo Eletrônico Iniciativa do governo federal Gestão Pública define como diretriz ... “considerar o cidadão como foco da ação pública”. < ? X M L ? > XML e e-ping < ? • X M L ? > • Onde ? no governo federal Com quem ? interação com os demais Poderes e esferas de governo e com a sociedade < ? X M L ? > < ? X M L ? > XML e e-ping O que é? Arquitetura com conjunto mínimo de: premissas, políticas e especificações técnicas Qual o objetivo ? Regulamentar utilização de TI e Comunicação < ? X M L ? > < ? X M L Interoperabilidade para que serve? ? > Transferir e utilizar informações de maneira uniforme e eficiente entre organizações e sistemas de informações. Intercâmbio coerente de informações entre serviços e sistemas. Dois ou mais sistemas podem interagir e intercambiar dados de acordo com um método definido. Interoperabilidade é a soma desses fatores. < ? X M L ? > Interoperabilidade < ? X M L ? > • Levar em conta a existência de: sistemas legados, plataformas de Hardware e plataformas de software instaladas. < ? X M L ? > < ? X M L XML e e-ping As áreas cobertas pela e-PING: z Interconexão; z Segurança; z Meios de Acesso; z ? > z Organização e Intercâmbio de Informações; Áreas de Integração para Governo Eletrônico < ? X M L ? > < ? X M L Organização e Intercâmbio de informações Políticas técnicas • Intercâmbio de dados z Uso de XML e z esquemas XML z Transformação de dados z ? > z Uso de XSL Modelagem de dados para intercâmbio z UML < ? X M L ? > < ? Organização e Intercâmbio de informações E-PING : sobre XML e middleware • Nem todos sistemas necessitam ter capacidade de se comunicar diretamente em XML. X M L • Intercâmbio indireto • Intercâmbio direto ? > X M L Logo é possível ? > < ? < ? Intercâmbio direto • Caso 1: apenas middlewares se comunicam X M L X M L ? > < ? XML pode ser usado em sistemas incompatíveis Aplicativos podem conversar “XML” ? > < ? Organização e Intercâmbio de informações • Caso 2: middleware se comunica com outro sistema X M L ? > < ? X M L Compartilhar arquivo sistemas/plataformas diferentes ? > < ? X M L ? > Organização e Intercâmbio de informações Intercâmbio direto Estrutura com suporte a XML não é obrigatório (é desejável) < ? X M L ? > < ? X M L ? > < ? XML Construção de documentos XML X M L ? > Formação de arquivos XML < ? X M L ? > – Criar um documento com linguagem de marcação: – conteúdo (dado) + marcas (estrutura) <cadastro> <nome> José da Silva </nome> <fone> 3027-1400</fone> <empresa>X-GAMES S.A.</empresa> <cargo> DESENVOLVEDOR</cargo> <endereco> <rua> XV de novembro</rua> <num> 2400 </num> <compl> Perto do Centro </compl> <bairro> Centro</bairro> <cidade> Joinville</cidade> <estado> SC</estado> <cep> 89000-120</cep> </endereco> </cadastro> documento com marcas < ? X M L ? > < ? Formação de arquivos XML XML VÁLIDOS X M L ? > z se obedecer todas as regras do esquema < ? X M L ? > < ? X M L ? > Formação de arquivos XML Instância de XML •não tem definições de suas próprias marcas •obedece definição <nome>Jose da Silva<\nome> tag-inicial conteúdo do elemento tag-final < ? X M L ? > < ? Formação de arquivos XML z z X M L ? > z z z z Semelhança com XML porém há regras a seguir Há um elemento nó raiz Cada elemento “abre-tag” e “fecha-tag” Os elementos aninhados Atributo começa com letra ou “_” Nome de atributo aparece 1X na tag Regras sintáticas Documento bem formado < ? X M L ? > < ? X M L ? > Formação de arquivos XML • <cadastro> <nome> José da Silva </nome> <fone> 3027-1400</fone> <empresa> X GAMES S.A.</empresa> <cargo> DESENVOLVEDOR</cargo> <endereco> <rua> XV de novembro</rua> <num> 2400 </num> <compl> Perto do Centro </compl> <bairro> Centro</bairro> <cidade> Joinville </cidade> <estado> SC</estado> <cep> 89000-120</cep> </endereco> Um documento XML possui • Árvore XML (nó, raiz); • Prólogo; • Instrução de processamento; • Comentários; • Referência a entidades; • Seções CDATA; • Elementos e atributos; </cadastro> • Definição de tipos de documentos. < ? X M L ? > < ? X M L ? > Analisador sintático z z Classificados • Validadores • Não validadores Ler Esquema de cruzar com documento dados • Bem–formado • obedece regras de XML • Válido • obedece definição < ? X M L ? > Formação de arquivos XML < ? X M L <?xml version="1.0" encoding="iso8859-1" ?> <!DOCTYPE cadastro "cadastro.dtd" > z Definições (Prólogo) z declara as propriedades do documento informando ao SYSTEM [ //ENTIDADES //ELEMENTOS //ATRIBUTOS ] > processador XML o necessário <cadastro>.......<\cadastro> para um parser XML poder interpretar z o DTD descreve o tipo de elemento raiz z o identificador SYSTEM especifica o local < ? X M L da DTD ( ex. um site) ? > z Marca o início do subconjunto interno que provê um local para declarações especiais z Neste conjunto pode haver declaraçoes de entidades z O fim de ambos os conjuntos ( ] ) e o do DTD completam o prólogo ? > < ? X M L ? > Formação de arquivos XML Regras • • • Documento completo está contido por um único “elemento documento” ou “elemento raiz” Elemento pode • conter outros documentos Cada elemento deve • estar completamente contido em outro elemento <endereco> <rua> Blumenau</rua> <num> 890 </num> <bairro> Centro</bairro> <cep> 89000120</cep> <caixa postal> 001 </caixa postal> </endereco> certo <endereco> <rua> Blumenau</rua> <num> 890 </e </num> <bairro> Centro</bairro> <cep> 89000-120 <caixapostal> 001 </cep> </caixapostal> </endereco> ! errado ! < ? X M L ? > < ? X M L ? > < ? XML XML Namespaces X M L ? > XML Namespace < ? X M L ? > XML Namespace provê um método para evitar conflito de nomes de elementos. Desde que os nomes de elementos em XML não são fixados, freqüentemente, há conflito de nomes quando dois diferentes documentos usam os mesmos nomes descrevendo dois diferentes tipos de elementos (ilustrar esse caso) < ? X M L ? > XML Namespace < ? X M L ? > z Exemplo de conflitos de nome <tabela> <frutas> <fruta>maça</fruta> <fruta>banana </fruta> </frutas> </tabela> mesmo nome <tabela> ..... </tabela> <tabela> <nome>fulano</nome> <idade>65</idade> </tabela> < ? X M L ? > XML Namespace < ? X M L ? > z Resolvendo o problema <h:tabela> <h:frutas> <h:fruta>maça </h:fruta> <h:fruta>banana </h:fruta> </h:frutas> </h:tabela> <f:tabela> <f:nome>fulano </f:nome> <f:idade>65</f:idade> </f:tabela> Não há conflitos de nomes: os dois elementos usam diferentes nomes para os elementos<tabela> (<h:tabela> e <f:tabela>) Usando o prefixo criado dois diferentes tipos de elementos <tabela> < ? X M L ? > Usando Namespace < ? X M L ? > z Ao invés de usar somente prefixo, foi adicionado um atributo xmlns ao tag <tabela> para dar ao elemento prefixo um nome qualificado associado com um namespace. <h:tabela xmlns:h= “http:www.w3schools.co m/furniture” > <h:frutas> <h:fruta>maça </h:fruta> <h:fruta>banana </h:fruta> </h:frutas> </h:tabela> <f:tabela xmlns:f= “http:www.w3.org/TR/htm l4/” > <f:nome>fulano</f:nome> <f:idade>65</f:idade> </f:tabela> < ? X M L ? > Default Namespace < ? X M L ? > • Definindo um default namespace para nos poupar de usar prefixos em todos os elementos filhos. Como mostra a seguinte sintaxe: <element xmlns="namespace"> < ? X M L ? > Default Namespace < ? X M L ? > <tabela xmlns= “http:www.w3schools.com/furniture”> <frutas> <fruta>maça</fruta> <fruta>banana</fruta> </frutas> </tabela> <tabela xmlns= “http:www.w3.org/TR/html4/”> <nome>fulano</nome> <idade>65</idade> </tabela> < ? X M L ? > < ? X M L ? > < ? XML Construindo documentos XML X M L ? > XML Schema < ? X M L ? > • Alternativa ao DTD baseada em XML • Descreve estrutura de documento • XML • XML Schema definition – XS • Trata das deficiências da DTD < ? X M L ? > XML Schema • Objetivo: Objetivo Definir os blocos de construção permitidos em documento XML, como um DTD. • Um XML Schema define : < ? X M L ? > • Elementos que podem aparecer em um documento; • Atributos que podem aparecer em um documento; • Hierarquia de elementos (elementos filhos); • Ordem dos elementos filhos; • Número de elementos filhos; • Elemento é vazio ou pode incluir texto; • Tipo de dados para elementos e atributos; • Valor padrão e fixo para elementos e atributo. < ? X M L ? > XML Schema XML < ? X M L ? > <?XML version = “1.0” encoding= “UTF8” standalone = “no” ?> SCHEMA <! DOCTYPE cadastro SYSTEM “cadastro.dtd” <cadastro> <nome> Luiz F. da Silva </nome> <fone> 431-7200</fone> <empresa> Software S.A.</empresa> <cargo> Gestor de TI</cargo> <endereco> <rua> Blumenau</rua> <num> 890 </num> <bairro> Centro</bairro> <cep> 89000-120</cep> </endereco> </cadastro> > <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="cadastro"> <xs:complexType> <xs:sequence> <xs:element name="nome" type="xs:string"/> <xs:element name="fone" type="xs:string"/> <xs:element name="empresa" type="xs:string"/> <xs:element name="cargo" type="xs:string"/> <xs:element name="endereco" > <xs:complexType> <xs:sequence> <xs:element name="rua" type="xs:string"/> <xs:element name="numero" type="xs:string"/> <xs:element name="bairro" type="xs:string"/> <xs:element name="cep" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> < ? X M L ? > < ? X M L ? > XML Schema Declaração Pre-fixo <?xml version =“1,0” ?> <pedido xmlns:ped = “http:/ /exemplo.com/pedido” xmlns:prod = “http: / / exemplo.com/produto” xmlns= “http:/ /exemplo.com/raiz”> <ped:numero></ped:numero> <ped:item> Default <prod:produto></produto> <prod:produto></produto> </ped:item> </pedido> < ? X M L ? > XML Schema Declaração < ? <?xml version = “1.0” ?> X <xsd: schema xmlns= M http:/www.w3.org/200/10/XMLSchema> L < /xsd: schema > ? > < ? X M L ? > < ? X M L ? > XML Schema Declaração No documento Schema: <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="faculdade"> <xs:attribute name="nome" type="xs:string" /> </xs:element> </xs:schema> Seguindo a estrutura de árvore, um documento XML Schema, deverá possuir um primeiro elemento, sendo a partir dele que ocorrerá a inclusão dos demais. Esse é o elemento raiz do documento, e num XML Schema ele é o elemento SCHEMA < ? X M L ? > XML Schema Declaração < No documento XML- Schema ? X M L ? > <?xml version="1.0" encoding="UTF-8" ?> <faculdade xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" Origem das regras de validação xsi:noNamespaceSchemaLocation= "http://espacoxml.webcindario.com/facu.xsd“ nome= “UDESC” </faculdade> Origem da estrutura do documento < ? X M L ? > XML Schema Elemento < ? • Simples ou composto X • Elemento simples não contém elemento(s) M L • Elemento simples não contém atributo(s) ? > < ? X M L ? > XML Schemas Elemento Simples < ? X M L ? > • É um elemento XML que contém “apenas texto” • Tipos de dados : string, decimal, integer, boolean, date, time, criado pelo usuário • Sintaxe para definir um elemento simples : – <xs: element name = “xxx” type = “yyy” / > Elementos XML Schema <xs:element name = "nome" type ="xs:string"/> <xs:element name = "fone" type ="xs:string"/> <xs:element name = "empresa" type ="xs:string"/> <xs:element name = "cargo" type ="xs:string"/> < ? X M L ? > XML Schema-elemento simples Default e Constantes < ? X M L ? > • Sintaxe de valor padrão – <xs: element name = “xxx” type = “yyy” default=“zzz” / > • Sintaxe de valor padrão – <xs: element name = “xxx” type = “yyy” fixed=“kk” / > Elementos XML Schema <xs:element name = "nome" type ="xs:string"/> <xs:element name = "fone" type ="xs:string" default=”3431-7070”/> <xs:element name = "empresa" type ="xs:string" fixed=”PESSOA SA”/> <xs:element name = "cargo" type ="xs:string"/> <xs:element name = "idade" type ="xs:integer" default=”18” /> < ? X M L ? > XML Schema-elemento simples Ocorrências em Elementos possível controlar o número de ocorrência de < • Écada elemento ? X M – minOccurs e maxOccurs L – Valor default: 1 – maxOccurs = “unbounded” : elemento pode ? aparecer quantas vezes quiser. > <nome>Jose Silva </nome> <fone>3027-1400 </fone> <fone>431-7200</fone> <empresa> X-Games S/A</empresa> <cargo>Desenvolvedor</cargo> <xs:element name=“nome” type=“xs:string” minOccurs=”1”/> <xs:element name=“fone” type=“xs:string” minOccurs=”0” maxOccurs =”2”/> <xs:element name=“empresa” type =“xs:string”/> <xs:element name=“cargo” type=“xs:string” maxOccurs =”unbounded” /> < ? X M L ? > < ? X M L ? > XML Schema-Elemento Simples Restrições em Elemento Simples z z z É possível criar restrições nos elementos e atributos XML. Facets. Usadas para controlar valores aceitos para elementos e atributos < ? X M L ? > XML Schema Restrições em Elemento Simples < ? <xs:element name="seuElemento"> X <xs:simpleType> M <xs:restriction base="xs:string"> ... L </xs:restriction> </xs:simpleType> ? </xs:element> > • Sintaxe geral Tipo de dado pré-existente < ? X M L ? > XML Schema-Elemento simples Tipos de Restrições < ? Restrições possíveis para : X Valores; M Conjuntos de valores; L Série de valores; ? > Comprimento de elemento. • • • • < ? X M L ? > XML Schema Tipos de Restrições-Valores < ? X M L ? > z Palavras-chave para restringir valores: − minInclusive − maxInclusive − minExclusive − maxExclusive Sintaxe <xs:minInclusive value=”0”/> * As restrições variam de acordo com o tipo declarado ! As citadas são para tipos date e numéricos. < ? X M L ? > < ? X M L ? > XML Schema Tipos de Restrições -Valores z Elemento “hora” com uma restrição de não pode ser menor que 0 ou maior que 23. <xs:element name=“hora"> <xs:simpleType> <xs:restriction base=“xs:time”> <xs:minInclusive value=“0”/> <xs:maxInclusive value=“23”/> </xs:restriction> </xs:simpleType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Tipos de Restrições – Conjunto de Valores z z Elemento apenas aceitará valores pré-definidos de um conjunto Sintaxe <xs:enumeration value=“valor1"/> <xs:enumeration value=“valor2"/> <xs:enumeration value=“valor3"/> < ? X M L ? > < ? X M L ? > XML Schema Tipos de Restrições z Elemento “cargo” só deverá aceitar os valores estagiário, administrador, secretária. <xs:element name="cargo"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value=“estagiário"/> <xs:enumeration value=“administrador"/> <xs:enumeration value=“secretária"/> </xs:restriction> </xs:simpleType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Tipos de Restrições z Escrevendo de forma genérica <xs:element name="cargo" type="Tcargo"/> <xs:simpleType name="Tcargo"> <xs:restriction base="xs:string"> <xs:enumeration value=“estagiário"/> <xs:enumeration value=“administrador"/> <xs:enumeration value=“secretária"/> </xs:restriction> </xs:simpleType> < ? X M L ? > XML Schema Tipos de Restrições - Serie e comprimento de Valores < ? X M L ? > z z z z Limitar o conteúdo em uma série de números ou letras Sintaxe geral: <xs: pattern value=”??” /> restrição de dígitos/caracteres: − <xs:pattern value =”[..] [..]” /> ou − <xs:pattern value =”[..] {n}” /> restrição de cardinalidade − <xs:pattern value =”([..] )* ” /> − <xs:pattern value =”([..] )+ ” /> < ? X M L ? > < ? X M L ? > XML Schema Tipos de Restrições z O conteúdo o elemento “Cep” deve sempre possuir cinco caracteres, um hífen e mais três caracteres. <xs:element name="Cep"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value=“d{5}-\{3}"/> </xs:restriction> </xs:simpleType> </xs:element> < ? X M L ? > XML Schema Tipos de Restrições < Só aceita duas letras maiúsculas ? <xs:element name=“estado"> X <xs:simpleType> base="xs:string"> M <xs:restriction <xs:pattern value=“[A-Z][A-Z]"/> L </xs:restriction> </xs:simpleType> ? </xs:element> > z < ? X M L ? > < ? X M L ? > XML Schema Tipos de Restrições z Só aceita zero ou mais ocorrências de letras maiúsculas ou minúsculas <xs:element name=“nome”> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([a-zA-Z])*"/> </xs:restriction> </xs:simpleType> </xs:element> < ? X M L ? > XML Schema Tipos de Restrições < Só aceita ‘m’ ou ‘f’ ? <xs:element name="sexo"> X <xs:simpleType> base="xs:string"> M <xs:restriction <xs:pattern value="m|f"/> L </xs:restriction> </xs:simpleType> ? </xs:element> > z < ? X M L ? > XML Schema Tipos de Restrições < O valor tem que ter no mínimo 5 e no ? máximo 8 name="password"> X <xs:element <xs:simpleType> base="xs:string"> M <xs:restriction <xs:minLength value="5"/> L <xs:maxLength value="8"/> </xs:restriction> ? </xs:simpleType> > </xs:element> z < ? X M L ? > XML Schema Elementos Complexos < ? X M L ? > z z São elementos que contém outros elementos e/ou atributos. Há quatro tipos de elementos complexos: − Elementos vazios − Elementos que contém apenas outros elementos − Elementos que contém apenas texto − Elementos que contém tanto outros elementos quanto texto < ? X M L ? > < ? X M L ? > XML Schema Elementos Complexos z • Exemplos de elementos complexos contendo atributos <cadastro id = '001'> ou contendo elementos <endereco> <rua> Blumenau</rua> <num> 890 </num> <bairro> Centro</bairro> <cep> 89000-120</cep> </endereco> < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z Elementos vazios <cadastro id = '001'> <xs:element name="cadastro" > <xs:complexType <xs:complexContent> <xs:restricion base = “xs:integer”> <xs:atribute name= “id” type =“xs:positiveInteger”/> </xs:restricion> </xs:complexContent> </xs:complexType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z Declaração de um elemento composto <xs:element name="endereco"> <xs:complexType> <xs:sequence> <xs:element name= “rua” type =“xs:string”/> <xs:element name= “num” type =“xs:string”/> <xs:element name= “bairro” type =“xs:string”/> <xs:element name= “cep” type =“xs:string”/> </xs:sequence> </xs:complexType> </xs:element> <endereco> <rua> Blumenau</rua> <num> 890 </num> <bairro> Centro</bairro> <cep> 89000-120</cep> </endereco> < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z Através de um atributos type <xs:element name="endereco" type = “Tendereco”> <xs:complexType = Tendereco> <xs:sequence> <xs:element name= “rua” type =“xs:string”/> <xs:element name= “num” type =“xs:string”/> <xs:element name= “bairro” type =“xs:string”/> <xs:element name= “cep” type =“xs:string”/> </xs:sequence> <endereco> </xs:complexType> </xs:element> <rua> Blumenau</rua> <num> 890 </num> <bairro> Centro</bairro> <cep> 89000-120</cep> </endereco> < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z Vários elementos podem ter o mesmo tipo <xs:element name="endcasa" type = “Tendereco”> <xs:element name="endescola" type = “Tendereco”> <xs:element name="endtrabalho" type = “Tendereco”> <xs:complexType = Tendereco> <xs:sequence> <xs:element name= “rua” type =“xs:string”/> <xs:element name= “num” type =“xs:string”/> <xs:element name= “bairro” type =“xs:string”/> <xs:element name= “cep” type =“xs:string”/> </xs:sequence> </xs:complexType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z Podemos utilizar um mecanismo de herança (como POO) <xs:element name="endedereco" type = “Tendereco2”> <xs:complexType = Tendereco> <xs:extension base = “Tendereco”> <xs:sequence> <xs:element name= “rua” type =“xs:string”/> <xs:element name= “num” type =“xs:string”/> <xs:element name= “bairro” type =“xs:string”/> <xs:element name= “cep” type =“xs:string”/> </xs:sequence> </xs:extension> </xs:complexType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z Pode conter atributos e textos <cadastro id = '001'> pessoa Fisica </cadastro> <xs:element name="cadastro" type = “num_cad” > <xs:complexType name = “num_cad”> <xs:complexContent> <xs:extension base = “xs:string”> <xs:atribute name= “id” type =“xs:Integer”/> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z Pode conter atributos elementos e texto <cadastro id = 001> Pessoa Fisica <nome>...</nome> <xs:element name="cadastro"> <xs:complexType mixed= “true”> <xs:sequence> <xs:element name= “nome” type = “xs:string”/> </xs:sequence> <xs: extension base = “xs:string”> <xs:attributte name= “id” type = “xs:integer”/> </xs: extension> </xs:complexType> </xs:element> < ? X M L ? > XML Schema Exemplo Complexos < ? X M L ? > z Um funcionário(nome, cargo) tem um chefe(nome, cargo) <xs:element name="funcionario"> <xs:complexType> <xs:all> <xs:element name="nome" type="xs:string"/> <xs:element name="Tcargo" /> <xs:element name="chefe"> <xs:complexType> <xs:all> <xs:element name="nomeChefe" type="xs:string"/> <xs:element name="Tcargo" /> </xs:all> </xs:complexType> </xs:element> </xs:all> </xs:complexType> </xs:element> < ? X M L ? > XML Schema Exemplo Complexos < ? X M L ? > z Usados nos elementos complexos z Controle de elementos usados z Tipos de Indicadores − Ordem z All z Choice z Sequence − Ocorrência z maxOccurs z minOccurs < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos all z z z este indicador especifica que os elementos: podem aparecer em qualquer ordem e cada um deve ocorrer apenas uma vez <xs:element name="endereco"> <xs:complexType> <xs:all> <xs:element name= <xs:element name= <xs:element name= <xs:element name= </xs:all> </xs:complexType> </xs:element> “rua” type =“xs:string”/> “num” type =“xs:string”/> “bairro” type =“xs:string”/> “cep” type =“xs:string”/> < ? X M L ? > XML Schema Exemplo Complexos < ? X M L ? > z choice especifica que um elemento filho ou outro pode ocorrer <xs:element name="endcasa" type = “Tendereco”> <xs:element name="endtrabalho" type = “Tendereco”> <xs:complexType = Tendereco> <xs:sequence> <xs:element name= <xs:element name= <xs:element name= <xs:element name= </xs:sequence> </xs:complexType> </xs:element> “rua” type =“xs:string”/> “num” type =“xs:string”/> “bairro” type =“xs:string”/> “cep” type =“xs:string”/> <xs:element name="endereco" > <xs:complexType> <xs:choice> <xs:element name= “endcasa” type =“Tendereco”/> <xs:element name= “endtrabalho” type =“Tendereco”/> </xs:choice> </xs:complexType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z sequence Elementos devem aparecer na ordem <xs:element name="cadastro"> <xs:complexType> <xs:sequence> <xs:element name= “nome” =“xs:string”/> <xs:element name= “fone” =“xs:string”/> </xs:sequence> </xs:complexType> </xs:element> type type < ? X M L ? > < ? X M L ? > XML Schema Exemplo Complexos z < ? Indicadores de Ocorrência X minOccurs: especifica o número mínimo de M vezes que o elemento ocorre L maxOccurs: especifica o número máximo de ? vezes que o elemento ocorre > − − < ? X M L ? > XML Schema Elementos Compostos • É possível controlar o número de ocorrência de cada elemento <endereco> <rua> Blumenau</rua> <num> 890 </num> <bairro> Centro</bairro> <cep> 89000-120</cep> </endereco> – minOccurs e maxOccurs – Valor default: 1 – maxOccurs = “unbounded” : elemento pode aparecer quantas vezes quiser. <xs:element name="endereco“ maxOccurs=“2” > <xs:complexType> <xs:choice> <xs:element name= “endcasa” type =“Tendereco”/> <xs:element name= “endtrabalho” type =“Tendereco”/> </xs:choice> </xs:complexType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Atributos • Todos os atributos são declarados como tipo simples • Contidos em elemento do tipo complexo. • Elemento com atributos: elemento do tipo complexo. XML <endereco rua= "XV de novembro" numero= "2400" bairro="centro" cep="89100200" cidade="Joinville" complemento="c1 c2" estado="SC" > XML-Schema <xs:element name ="endereco" > <xs:complexType> <xs:attribute name="rua" type="xs:string" use="optional" default="rua"/> <xs:attribute name="numero" type="xs:integer" /> <xs:attribute name="bairro" type="xs:string"/> <xs:attribute name="cep" type="xs:string"/> <xs:attribute name= "cidade" type="xs:string"/> <xs:attribute name= "estado" type="xs:string"/> <xs:attribute name= "complemento" type="xs:string"/> </xs:complexType> </xs:element> < ? X M L ? > XML Schema Atributos < • Um exemplo < ? ? X X M Osinteger, M tipos de dados podem ser decimal, boolean, date, time, etc. L L atributo contém um valor padrão quando ? ? • Onenhum outro valor é especificado > > <xs:attribute name = “lang” type = “xs:string”> <xs:attribute name = “lang” type = “xs:string” default = “nenhum”> < ? X M L ? > XML Schema Atributos • Atributos podem ser opcionais ou obrigatórios • Opcionais <xs:attribute name = “lang” type = “xs:string” use = “optional”> • Obrigatório <xs:attribute name = “lang” type = “xs:string” use = “required”> < ? X M L ? > < ? X M L ? > XML Schema Atributos <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name ="endereco" > <xs:complexType> <xs:attribute name="rua" type="xs:string" use="optional" default="rua"/> <xs:attribute name="numero" type="xs:integer" /> <xs:attribute name="bairro" type="xs:string"/> <xs:attribute name="cep" type="xs:string"/> </xs:complexType> </xs:element> < ? X M L ? > < ? X M L ? > XML Schema Atributos <xs:element name="cadastro"> <xs:complexType> <xs:attribute name="num_cadastro" type="xs:integer"/> <xs:attribute name="nome" type="xs:string" /> <xs:attribute name="fone" type="xs:string" /> <xs:attribute name="empresa" type="xs:string"/> <xs:attribute name ="endereco" /> </xs:complexType> </xs:element> < ? X M L ? > Referências z [1] CARTER, E.F. Hack Proofing XML. Syngress Publishing. 2002 z [2] DEITEL. et. al. XML Como Programar Bookman.São Paulo, 2003 z [3] W3C – World Wide Web Consortium. Em <www.w3.org> z z [4] MEGGINSON,D. Imperfect XML: Rants, Raves, Tips and Tricks from an Insider Addison Wesley.Indiana (USA), 2004 [5] TITTEL, E. Schaum's Outlines of Theory and Problem of XML. McGraw-Hill. USA, 2002 z [6] W3C Schools. Em: <www.w3cschools.com> z Oxigen XML Editor. Em: <http://www.oxygenxml.com> z Xpontus. Em: <http://xpontus.sourceforge.net/>