linguagens e programação xml / xshemaproenca/dump/lprog/pptxml-xsd.pdf · estrutura xml lprog...

53
Linguagens e Programação XML / XShema Paulo Proença – [email protected]

Upload: vuongdan

Post on 19-Nov-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Linguagens e Programação

XML / XShemaPaulo Proença – [email protected]

LPROG

Estrutura XML

Elementos<ano>1965</ano>

<anotação de inicio>conteúdo</anotação de fim>

Um elemento pode:• conter apenas texto

• ser vazio (tem apenas atributos)

• conter apenas subelementos

• conter texto e/ou subelementos

11 de maio de 2016Paulo Proença – [email protected]

<pessoa id="234">O Senhor<nome>Carlos Tavares</nome> <data-nascimento>

nasceu no ano de <ano>1975</ano>

(...)

LPROG

Estrutura XML

Regras para o nome de um elemento:

• O primeiro carácter deverá ser uma letra, um sinal de

underscore ou um sinal de dois pontos;

• Os caracteres seguintes podem ser letras, dígitos,

underscores, hífens, pontos e dois pontos;

• O espaço não pode ser utilizado no nome de um

elemento

• Os caracteres < e > são reservados para as anotações

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Estrutura XML

Atributos<pessoa id="234">...

Definem-se na anotação de início de um elemento

Definido por um par nome="valor"

Valor do atributo colocado sempre entre ""

11 de maio de 2016Paulo Proença – [email protected]

<data-nascimento ano="1975" mes="10" dia="3" />

LPROG

Estrutura XML

Caracteres especiais Referência a entidades pré-definidas

Referência a caracteres unicode

&#decimal ou &#xhexadecimal

&#xDF;&lt;&#189; ß<½

válido para mês &gt;0 e mês &lt;13

&lt; <

&gt; >

&amp; &

&quot; "

&apos; ‘

LPROG

Documento XML bem formado

Existe um e um só elemento que engloba todos os outros – elemento raiz

A anotações de abertura (<xpto>) correspondem anotações de fecho (</xpto>) Um elemento pode ser vazio obrigando a usar o caracter '/' na

marca de abertura <xpto/>

Existe distinção entre maiúsculas e minúsculas nos nomes dos elementos

Os elementos têm de ser encaixados corretamente.

Os valores dos atributos têm de estar entre aspas.

Para além disso:

O documento deve começar com a declaração XML

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0" encoding="ISO-8859-1"?>

LPROG

Propostas de Exercícios

1. Represente em XML a sua turma prática de LPROG

11 de maio de 2016Paulo Proença – [email protected]

turma2DX.xml

<?xml version="1.0“encoding="ISO-8859-1" ?><Turma Id="2DX">

<Professor Sigla="PRP"><Nome>Paulo Rogério Soares Proença</Nome><Email>[email protected]</Email><Gab>B416</Gab>

</Professor><Alunos>

<Aluno Num="1020883”><Nome>GLADYS JESSE BÉLIER CARNEIRO</Nome><Email>[email protected]</Email>

</Aluno><Aluno Num="1050533”>

<Nome>PAULO JORGE ALMEIDA DA SILVA MENDES</Nome><Email>[email protected]</Email>

</Aluno></Alunos><Horario>

<Aula Tipo="T" dia="Terça-feira" hora="13:10" duracao="50" sala="B303"/><Aula Tipo="TP" dia="Terça-feira" hora="16:40" duracao="80" sala="B303"/><Aula Tipo="PL" dia="Quinta-feira" hora="14:10" duracao="110" sala="B306"/><Aula Tipo="PL" dia="Sexta-feira" hora="10:10" duracao="110" sala="B309"/>

</Horario></Turma>

LPROG

2. Construa um ficheiro XML bem formado, que represente a monarquia em Portugal e que obedeça à seguinte estrutura

Referência útil: http://www.casarealportuguesa.org/dynamicdata/Cronologia.asp

Propostas de Exercícios

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Propostas de Exercícios

2.

11 de maio de 2016Paulo Proença – [email protected]

ReisPortugal.xml

<?xml version="1.0" encoding="ISO-8859-1"?><ReisPortugal>

<Dinastia nome="Primeira Dinastia - de Borgonha ou Afonsina"><Rei Cognome="O Lavrador">

<Nome>Dom Dinis I</Nome><Reinado AnoInicio="1279" AnoFim="1325"/>

</Rei><Rei Cognome="O Povoador">

<Nome>Dom Sancho I</Nome><Reinado AnoInicio="1185" AnoFim="1211"/>

</Rei>…

</Dinastia>…

</ReisPortugal>

LPROG

XML namespace

Problema: nomes iguais para elementos com semânticas muito diferente

<titulo>XML in a Nutshell</titulo>

<titulo>Professor</titulo>

Necessidade de qualificar claramente os nomes dos elementos e atributos

<livro:titulo>XML in a Nutshell</livro:titulo>

<pessoa:titulo>Professor</pessoa:titulo>

XML namespace é uma coleção de nomes identificados por um URI (Uniform Resource

Identifier) que permitem associar um prefixo

ao nome do elemento11 de maio de 2016Paulo Proença – [email protected]

LPROG

XML namespace

Criação de um namespace

Atributo xmlns

O valor do atributo é um URI com o objetivo de ser

um identificador único

O valor do atributo não é um endereço físico de um

recurso

O prefixo identificativo do namespace qualifica o

elemento

11 de maio de 2016Paulo Proença – [email protected]

xmlns:pes="http://xml.dei.isep.ipp.pt/pessoas"

<pes:nome>António José</pes:nome>

LPROG

XML namespace

Os namespace podem ser declarados localmente a um elemento

A declaração pode ser feita sem explicitar um prefixo - namespace por omissão

11 de maio de 2016Paulo Proença – [email protected]

<dt:data xmlns:dt="http://xml.isep.pt/datas"><dt:ano>1965</dt:ano> <dt:mes>10</dt:mes> <dt:dia>3</dt:dia>

</dt:data>

<pessoas xmlns="http://xml.isep.pt/pessoas">

LPROG

XML Schema

É um documento XML válido que especificaas regras para a validação de outros documentos XML. Define:

Os elementos e atributos que podem existir no

documento

A ordem e número dos elementos filhos

Tipos de dados para os elementos e atributos

Um XML Schema define uma classe de documentos.

Os documentos XML que referenciam esse XML Schema são instâncias dessa classe

11 de maio de 2016Paulo Proença – [email protected]

LPROG

XML Schema

11 de maio de 2016Paulo Proença – [email protected]

XML SchemaValidator

<pessoa id="123"><nome>Antonio José Silva</nome><data-nascimento>

<ano>1965</ano><mes>10</mes><dia>3</dia>

</data-nascimento><cc>4025527-zz2</cc>

</pessoa>

Documento XML

• nome só pode ter letras• data-nascimento contem 3 elementos:

ano, mes e dia• mes é um numero inteiro entre 1 e 12

inclusive• cc é formado por 7 dígitos, um

simbolo –, duas letras e um dígito

XML Schema

Erros de Conformidade

Informação Validada

LPROG

Exemplo de um XML Schema

11 de maio de 2016Paulo Proença – [email protected]

exemplo.xsd

<?xml version="1.0" ?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://your_namespace" elementFormDefault="qualified"><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></xsd:schema>

LPROG

XML Schema

Estrutura de um XML 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>

11 de maio de 2016Paulo Proença – [email protected]

Declaração XML

Elemento raiz

namespacePrefixo xsd

LPROG

Namespace XML Schema

Especifica as entidades utilizadas na definição de um XML Schema:

element

schema

simpleType

Trata-se do XML Schema Schema

O URI é http://www.w3.org/2001/XMLSchema

O prefixo por convenção é xsd:

11 de maio de 2016Paulo Proença – [email protected]

<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema">

LPROG

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>

11 de maio de 2016Paulo Proença – [email protected]

LPROG

XML Schema – tipos simples

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 primitivosanySimpleType decimal integer long ...

11 de maio de 2016Paulo Proença – [email protected]

LPROG

LPROG

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>

11 de maio de 2016Paulo Proença – [email protected]

LPROG

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

11 de maio de 2016Paulo Proença – [email protected]

LPROG

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">

11 de maio de 2016Paulo Proença – [email protected]

LPROG

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>

11 de maio de 2016Paulo Proença – [email protected]

LPROG

XML Schema – tipo compostoOs 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>11 de maio de 2016Paulo Proença – [email protected]

LPROG

XML Schema

Composição dos subelementos 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

11 de maio de 2016Paulo Proença – [email protected]

LPROG

XML Schema

Restrições de ocorrência

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" />

11 de maio de 2016Paulo Proença – [email protected]

LPROG

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 (valor por omissão)

prohibited - o atributo deve ser omitido

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Declaração de atributos

Os atributos podem ter um valor atribuído por omissão que é assumido quando não for especificado um outro qualquer valor.

É possível atribuir um valor fixo ao atributo que não pode ser, posteriormente, alterado.

11 de maio de 2016Paulo Proença – [email protected]

<xsd:atribute name="lang" type="xsd:string" default="pt-PT">

<xsd:atribute name="lang" type="xsd:string" fixed="pt-PT">

LPROG

Def p/ elem. simples com atributo

11 de maio de 2016Paulo Proença – [email protected]

Elemento XML de conteúdo simples e com atributo

<telefone operador="TMN"> 3457654 </telefone>

Definição XSchema

<xsd:element name="telefone"><xsd:complexType>

<xsd:simpleContent><xsd:extension base="xs:string">

<xsd:attribute name="operador" use="required" type="xs:string"/>

</xsd:extension></xsd:simpleContent>

</xsd:complexType></xsd:element>

LPROG

Exemplo Schema com atributos

Exemplo.xsd

…<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> …

Exemplo.xml

<pessoa id="P123"><nome>António José Silva</nome><dnascimento>2004-07-12</dnascimento>

</pessoa>

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Exemplo “Bem Estruturado”

<?xml version="1.0"?>

<TotoBola concurso="21/2009">

<LinhaJogo>

<Jogo>Porto - Braga</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>Benfica - Belenenses</Jogo>

<Aposta Escolha="1"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>P.Ferreira - Trofense</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

<Aposta Escolha="2"/>

</LinhaJogo>

...

</TotoBola>

11 de maio de 2016Paulo Proença – [email protected]

Elemento raiz do XML Schema

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">…</xsd:schema>

LPROG

Exemplo “Bem Estruturado”

<?xml version="1.0"?>

<TotoBola concurso="21/2009">

<LinhaJogo>

<Jogo>Porto - Braga</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>Benfica - Belenenses</Jogo>

<Aposta Escolha="1"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>P.Ferreira - Trofense</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

<Aposta Escolha="2"/>

</LinhaJogo>

...

</TotoBola>

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

</xsd:schema >

Definição do elemento raiz do documento XML

…<xsd:element name="TotoBola" type="Ttotobola"/>…

LPROG

Exemplo “Bem Estruturado”

<?xml version="1.0"?>

<TotoBola concurso="21/2009">

<LinhaJogo>

<Jogo>Porto - Braga</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>Benfica - Belenenses</Jogo>

<Aposta Escolha="1"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>P.Ferreira - Trofense</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

<Aposta Escolha="2"/>

</LinhaJogo>

...

</TotoBola>

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="TotoBola" type="Ttotobola"/>

</xsd:schema >

Definição do tipo complexo “Ttotobola”

…<xsd:complexType name="Ttotobola"><xsd:sequence><xsd:element name="LinhaJogo" type="TLJ"

minOccurs="13" maxOccurs="13"/></xsd:sequence><xsd:attribute name="concurso" type="Tconcurso" use="required"/>

</xsd:complexType>…

LPROG

Exemplo “Bem Estruturado”

<?xml version="1.0"?>

<TotoBola concurso="21/2009">

<LinhaJogo>

<Jogo>Porto - Braga</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>Benfica - Belenenses</Jogo>

<Aposta Escolha="1"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>P.Ferreira - Trofense</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

<Aposta Escolha="2"/>

</LinhaJogo>

...

</TotoBola>

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:complexType name="Ttotobola">

<xsd:sequence>

<xsd:element name="LinhaJogo" type="TLJ" minOccurs="13" maxOccurs="13"/>

</xsd:sequence>

<xsd:attribute name="concurso" type="Tconcurso" use="required"/>

</xsd:complexType>

<xsd:element name="TotoBola" type="Ttotobola"/>

</xsd:schema >

Definição do tipo complexo “TLJ”

…<xsd:complexType name="TLJ"><xsd:sequence><xsd:element name="Jogo" type="xsd:string"/><xsd:element name="Aposta" type="Taposta" maxOccurs="3"/>

</xsd:sequence></xsd:complexType>…

LPROG

Exemplo “Bem Estruturado”

<?xml version="1.0"?>

<TotoBola concurso="21/2009">

<LinhaJogo>

<Jogo>Porto - Braga</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>Benfica - Belenenses</Jogo>

<Aposta Escolha="1"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>P.Ferreira - Trofense</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

<Aposta Escolha="2"/>

</LinhaJogo>

...

</TotoBola>

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:complexType name="TLJ">

<xsd:sequence>

<xsd:element name="Jogo" type="xsd:string"/>

<xsd:element name="Aposta" type="Taposta" maxOccurs="3"/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="Ttotobola">

<xsd:sequence>

<xsd:element name="LinhaJogo" type="TLJ" minOccurs="13" maxOccurs="13"/>

</xsd:sequence>

<xsd:attribute name="concurso" type="Tconcurso" use="required"/>

</xsd:complexType>

<xsd:element name="TotoBola" type="Ttotobola"/>

</xsd:schema >

Definição do tipo complexo “Taposta”

…<xsd:complexType name="Taposta"><xsd:attribute name="Escolha" type="Tescolha" use="required"/>

</xsd:complexType>…

LPROG

Exemplo “Bem Estruturado”

<?xml version="1.0"?>

<TotoBola concurso="21/2009">

<LinhaJogo>

<Jogo>Porto - Braga</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>Benfica - Belenenses</Jogo>

<Aposta Escolha="1"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>P.Ferreira - Trofense</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

<Aposta Escolha="2"/>

</LinhaJogo>

...

</TotoBola>

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:complexType name="Taposta">

<xsd:attribute name="Escolha" type="Tescolha" use="required"/>

</xsd:complexType>

<xsd:complexType name="TLJ">

<xsd:sequence>

<xsd:element name="Jogo" type="xsd:string"/>

<xsd:element name="Aposta" type="Taposta" maxOccurs="3"/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="Ttotobola">

<xsd:sequence>

<xsd:element name="LinhaJogo" type="TLJ" minOccurs="13" maxOccurs="13"/>

</xsd:sequence>

<xsd:attribute name="concurso" type="Tconcurso" use="required"/>

</xsd:complexType>

<xsd:element name="TotoBola" type="Ttotobola"/>

</xsd:schema >

Definição do tipo simples “Tconcurso”

…<xsd:simpleType name="Tconcurso"><xsd:restriction base="xsd:string"><xsd:pattern value="[0-9]{2}/[0-9]{4}"/>

</xsd:restriction></xsd:simpleType>…

LPROG

Exemplo “Bem Estruturado”

<?xml version="1.0"?>

<TotoBola concurso="21/2009">

<LinhaJogo>

<Jogo>Porto - Braga</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>Benfica - Belenenses</Jogo>

<Aposta Escolha="1"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>P.Ferreira - Trofense</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

<Aposta Escolha="2"/>

</LinhaJogo>

...

</TotoBola>

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:simpleType name="Tconcurso">

<xsd:restriction base="xsd:string">

<xsd:pattern value="[0-9]{2}/[0-9]{4}"/>

</xsd:restriction>

</xsd:simpleType>

<xsd:complexType name="Taposta">

<xsd:attribute name="Escolha" type="Tescolha" use="required"/>

</xsd:complexType>

<xsd:complexType name="TLJ">

<xsd:sequence>

<xsd:element name="Jogo" type="xsd:string"/>

<xsd:element name="Aposta" type="Taposta" maxOccurs="3"/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="Ttotobola">

<xsd:sequence>

<xsd:element name="LinhaJogo" type="TLJ" minOccurs="13" maxOccurs="13"/>

</xsd:sequence>

<xsd:attribute name="concurso" type="Tconcurso" use="required"/>

</xsd:complexType>

<xsd:element name="TotoBola" type="Ttotobola"/>

</xsd:schema >

Definição do tipo simples “Tescolha”

…<xsd:simpleType name="Tescolha"><xsd:restriction base="xsd:string"><xsd:enumeration value="1"/><xsd:enumeration value="X"/><xsd:enumeration value="2"/>

</xsd:restriction></xsd:simpleType>…

LPROG

Exemplo “Bem Estruturado”

<?xml version="1.0"?>

<TotoBola concurso="21/2009">

<LinhaJogo>

<Jogo>Porto - Braga</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>Benfica - Belenenses</Jogo>

<Aposta Escolha="1"/>

</LinhaJogo>

<LinhaJogo>

<Jogo>P.Ferreira - Trofense</Jogo>

<Aposta Escolha="1"/>

<Aposta Escolha="X"/>

<Aposta Escolha="2"/>

</LinhaJogo>

...

</TotoBola>

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:simpleType name="Tescolha">

<xsd:restriction base="xsd:string">

<xsd:enumeration value="1"/>

<xsd:enumeration value="X"/>

<xsd:enumeration value="2"/>

</xsd:restriction>

</xsd:simpleType>

<xsd:simpleType name="Tconcurso">

<xsd:restriction base="xsd:string">

<xsd:pattern value="[0-9]{2}/[0-9]{4}"/>

</xsd:restriction>

</xsd:simpleType>

<xsd:complexType name="Taposta">

<xsd:attribute name="Escolha" type="Tescolha" use="required"/>

</xsd:complexType>

<xsd:complexType name="TLJ">

<xsd:sequence>

<xsd:element name="Jogo" type="xsd:string"/>

<xsd:element name="Aposta" type="Taposta" maxOccurs="3"/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="Ttotobola">

<xsd:sequence>

<xsd:element name="LinhaJogo" type="TLJ" minOccurs="13" maxOccurs="13"/>

</xsd:sequence>

<xsd:attribute name="concurso" type="Tconcurso" use="required"/>

</xsd:complexType>

<xsd:element name="TotoBola" type="Ttotobola"/>

</xsd:schema >

LPROG

Referenciar um Schema no XML

XML Schema Instance Namespaces

Deve ser referenciado por documentos instância (XML) que usam entidades definidas neste schema como:

xsi:schemaLocation

xsi:noNamespaceSchemaLocation

11 de maio de 2016Paulo Proença – [email protected]

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

LPROG

Referenciar um Schema no XML

Atributo xsi:noNamespaceSchemaLocation

Atributo xsi:schemaLocation

Pessoas.xml

<?xml version="1.0" encoding="ISO-8859-1"?><pessoas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="Pessoas.xsd" >...

Pessoas.xml

<?xml version="1.0" encoding="ISO-8859-1"?><pessoas xmlns=http://your_namespacexmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexsi: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">…

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Propostas de Exercícios

3. Considere o esquema (XML Schema) apresentado na questão 3 da FichaPL6.

Elabore um ficheiro XML bem formado que esteja conforme o XML Schema descrito

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Propostas de Exercícios

4. Considere extrato XML apresentado na questão 4 da FichaPL6.

a) Implemente o tipo de dados TTrack que permita validar a

informação relativa ao elemento XML track

11 de maio de 2016Paulo Proença – [email protected]

<xs:complexType name="TTrack"> <xs:sequence>

<xs:element name="artist" type="TipoArtist"/><xs:element name="url" type="xs:anyURI"/><xs:element name="thumbnail" type="xs:anyURI"/><xs:element name="image" type="xs:anyURI"/>

</xs:sequence><xs:attribute name="name" type="xs:string" use="required"/><xs:attribute name="count" type="xs:integer" use="required"/>

</xs:complexType>

LPROG

Propostas de Exercícios

4. Considere extrato XML apresentado na questão 4 da FichaPL6.

b) Crie o tipo de dados TMbid para validar o código mbid(MusicBrainz Identifier) do artista. Este código obedece á seguinte

regra:

cXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

onde o X representa um qualquer digito ou letra minúscula.

11 de maio de 2016Paulo Proença – [email protected]

<xs:simpleType name="TMbid"> <xs:restriction base="xs:string">

<xs:pattern value="c[0-9a-z]{7}-([0-9a-z]{4}-){3}[0-9a-z]{12}"/>

</xs:restriction></xs:simpleType>

LPROG

Propostas de Exercícios

5. Complete o esquema XSD apresentado definindo os tipos TComputador, TComponentes, e outros que

considere necessários, tendo em atenção as restrições definidas no ficheiro XML na questão 5 da FichaPL6.

11 de maio de 2016Paulo Proença – [email protected]

<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="sistema" type="TSistema"/><xsd:complexType name="TSistema">

<xsd:sequence><xsd:element name="computador" type="TComputador" /><xsd:element name="componentes" type="TComponentes" />

</xsd:sequence></xsd:complexType><!--COMPLETAR! -->

</xsd:schema>

LPROG

Propostas de Exercícios

6. Considere a estrutura XML apresentada na questão 6 da FichaPL6.

a) Sem utilizar atributos, criar o modelo XML Schema para a estrutura

da disciplina

b) Validar o documento criado em a)

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Propostas de Exercícios

6. a)

11 de maio de 2016Paulo Proença – [email protected]

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >(...)<xs:complexType name="TAulas">

<xs:sequence><xs:element name="Docente" type="TDocente"/><xs:element name="Data" type="xs:date"/><xs:element name="Sumário" type="TSumario"/>

</xs:sequence></xs:complexType>

<xs:complexType name="TDisciplina"><xs:sequence>

<xs:element name="Aulas" minOccurs="0" maxOccurs="unbounded"type="TAulas"/>

</xs:sequence> </xs:complexType>

<xs:element name="Disciplina" type="TDisciplina"/></xs:schema>

LPROG

Propostas de Exercícios

6. a)

11 de maio de 2016Paulo Proença – [email protected]

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ><xs:complexType name="TSumario"><xs:sequence>

<xs:element name="Codigo" type="xs:int"/><xs:element name="Tipo" type="xs:string"/><xs:element name="PrimeiroDia" type="xs:date"/><xs:element name="Semana" type="xs:int"/><xs:element name="Conteúdos" type="xs:string"/>

</xs:sequence></xs:complexType><xs:complexType name="TDocente"><xs:sequence>

<xs:element name="Nome" type="xs:string"/><xs:element name="SiglaProf" type="xs:string"/> <xs:element name="SiglaDep" type="xs:string"/>

</xs:sequence></xs:complexType> (...)

</xs:schema>

LPROG

Propostas de Exercícios

6. Considere a estrutura XML apresentada na questão 6 da FichaPL6.

c) Criar um documento XML conforme com o XML Schema definido

em a) e que descreva a informação apresentada na alínea c) da

questão 6 da FichaPL6

d) Verifique se o documento é bem-formado

e) Verifique se está conforme com o XML Schema definido em a)

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Propostas de Exercícios

6. Considere a estrutura XML apresentada na questão 6 da FichaPL6.

f) Criar um tipo enumeração para o tipo de aula, com os valores: T,

TP, PL, OT; e outra com as siglas dos departamentos.

g) Acrescentar um tipo para o género do docente, recorrendo a uma

expressão regular.

h) Criar um tipo para limitar o valor da semana entre 1 e 16.

i) Alargar o esquema a várias disciplinas e atualizar o documento

para o novo esquema. No final validar o documento.

11 de maio de 2016Paulo Proença – [email protected]

LPROG

Propostas de Exercícios

6. f)

11 de maio de 2016Paulo Proença – [email protected]

<xs:simpleType name="TSDep"><xs:restriction base="xs:string">

<xs:enumeration value="DEI"/><xs:enumeration value="DEE"/><xs:enumeration value="DEM"/><xs:enumeration value="DEC"/><xs:enumeration value="DEFI"/><xs:enumeration value="DEQ"/>

</xs:restriction></xs:simpleType>

<xs:simpleType name="TTAula"><xs:restriction base="xs:string">

<xs:enumeration value="T"/><xs:enumeration value="TP"/><xs:enumeration value="PL"/><xs:enumeration value="OT"/>

</xs:restriction></xs:simpleType>

LPROG

Propostas de Exercícios

6. g)

7. h)

11 de maio de 2016Paulo Proença – [email protected]

<xs:simpleType name="TGenero"><xs:restriction base="xs:string">

<xs:pattern value="(M|F)"/></xs:restriction>

</xs:simpleType>

<xs:simpleType name="TSemana"><xs:restriction base="xs:int">

<xs:minInclusive value="1"/><xs:maxInclusive value="16"/>

</xs:restriction></xs:simpleType>

Linguagens e Programação

XML / XSchemaPaulo Proença – [email protected]