Post on 19-Nov-2018
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 – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
<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
ß<½ ß<½
válido para mês >0 e mês <13
< <
> >
& &
" "
' ‘
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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
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>prp@isep.ipp.pt</Email><Gab>B416</Gab>
</Professor><Alunos>
<Aluno Num="1020883”><Nome>GLADYS JESSE BÉLIER CARNEIRO</Nome><Email>i020883@dei.isep.ipp.pt</Email>
</Aluno><Aluno Num="1050533”>
<Nome>PAULO JORGE ALMEIDA DA SILVA MENDES</Nome><Email>1050533@isep.ipp.pt</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 – prp@isep.ipp.pt
LPROG
Propostas de Exercícios
2.
11 de maio de 2016Paulo Proença – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
LPROG
XML Schema
11 de maio de 2016Paulo Proença – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
<?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 – prp@isep.ipp.pt
LPROG
Propostas de Exercícios
6. a)
11 de maio de 2016Paulo Proença – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
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 – prp@isep.ipp.pt
LPROG
Propostas de Exercícios
6. f)
11 de maio de 2016Paulo Proença – prp@isep.ipp.pt
<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 – prp@isep.ipp.pt
<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>