Linguagens e Programação XML / XShema
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 <pessoa id="234"> O Senhor <nome>carlos Tavares</nome> <data-nascimento> nasceu no ano de <ano>1975</ano> (...)
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
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 "" <data-nascimento ano="1975" mes="10" dia="3" />
Estrutura XML Caracteres especiais Referência a entidades pré-definidas < < > > & & " " ' válido para mês >0 e mês <13 Referência a caracteres unicode &#decimal ou &#xhexadecimal ß<½ ß<½
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 <?xml version="1.0" encoding="iso-8859-1"?>
Propostas de Exercícios 1. Represente em XML a sua turma prática de 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>
Propostas de Exercícios 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 2. 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>
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 elemento
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 xmlns:pes="http://xml.dei.isep.ipp.pt/pessoas" O prefixo identificativo do namespace qualifica o elemento <pes:nome>antónio José</pes:nome>
XML namespace Os namespace podem ser declarados localmente a um elemento <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> A declaração pode ser feita sem explicitar um prefixo - namespace por omissão <pessoas xmlns="http://xml.isep.pt/pessoas">
XML Schema É um documento XML válido que especifica as 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
XML Schema Documento XML <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> XML Schema 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 Erros de Conformidade XML Schema Validator Informação Validada
Exemplo de um XML Schema 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>
XML Schema Estrutura de um XML Schema Declaração XML Elemento raiz <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://your_namespace" elementformdefault="qualified"> namespace Prefixo xsd <xsd:element... <! definição de elementos e atributos -->... </xsd:schema>
Namespace XML Schema <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> 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:
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 Tipos simples primitivos <xsd:element name="ano" type="xsd:int"/> Tipos de dados para o conteúdo textual de um elemento ou atributo string float date (ccyy-mm-dd) anyuri decimal time (hh:mm:ss.sss)... Hierarquia de tipos de dados primitivos anysimpletype decimal integer long...
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 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 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
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" />
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
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. <xsd:atribute name="lang" type="xsd:string" default="pt-pt"> É possível atribuir um valor fixo ao atributo que não pode ser, posteriormente, alterado. <xsd:atribute name="lang" type="xsd:string" fixed="pt-pt">
Def p/ elem. simples com atributo 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>
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>
Exemplo Bem Estruturado <?xml version="1.0"?> <TotoBola concurso="21/2009"> <LinhaJogo> <Jogo>Porto - Braga</Jogo> Elemento raiz do XML Schema <Aposta Escolha="1"/> <?xml<aposta version="1.0"?> Escolha="X"/> <xsd:schema </LinhaJogo> xmlns:xsd="http://www.w3.org/2001/xmlschema"> <LinhaJogo> </xsd:schema> <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>
Exemplo Bem Estruturado <?xml version="1.0"?> <TotoBola concurso="21/2009"> <LinhaJogo> <Jogo>Porto - Braga</Jogo> Definição do elemento raiz do documento XML <Aposta Escolha="1"/> <Aposta Escolha="X"/> <xsd:element </LinhaJogo> name="totobola" type="ttotobola"/> <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> <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> </xsd:schema >
Exemplo Bem Estruturado <?xml version="1.0"?> <TotoBola concurso="21/2009"> <LinhaJogo> <Jogo>Porto - Braga</Jogo> Definição do tipo complexo Ttotobola <Aposta Escolha="1"/> <xsd:complextype name="ttotobola"> <Aposta Escolha="X"/> </LinhaJogo> <xsd:sequence> <LinhaJogo> <Jogo>Benfica - Belenenses</Jogo> <Aposta Escolha="X"/> <Aposta Escolha="2"/> </LinhaJogo>... </TotoBola> <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="linhajogo" type="tlj" <Aposta Escolha="1"/> minoccurs="13" maxoccurs="13"/> </xsd:sequence> </LinhaJogo> <xsd:attribute <LinhaJogo> name="concurso" type="tconcurso" use="required"/> <Jogo>P.Ferreira - Trofense</Jogo> </xsd:complextype> <Aposta Escolha="1"/> <xsd:element name="totobola" type="ttotobola"/> </xsd:schema >
Exemplo Bem Estruturado <?xml version="1.0"?> <TotoBola concurso="21/2009"> <LinhaJogo> <Jogo>Porto - Braga</Jogo> Definição do tipo complexo TLJ <Aposta Escolha="1"/> <xsd:complextype name="tlj"> <Aposta Escolha="X"/> </LinhaJogo> <xsd:sequence> <LinhaJogo> <xsd:element <Jogo>Benfica - name="jogo" Belenenses</Jogo> type="xsd:string"/> <xsd:element <Aposta Escolha="1"/> name="aposta" type="taposta" maxoccurs="3"/> </xsd:sequence> </LinhaJogo> <LinhaJogo> </xsd:complextype> <Jogo>P.Ferreira - Trofense</Jogo> <Aposta Escolha="1"/> <Aposta Escolha="X"/> <Aposta Escolha="2"/> </LinhaJogo>... </TotoBola> <?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 >
Exemplo Bem Estruturado <?xml version="1.0"?> <TotoBola concurso="21/2009"> <LinhaJogo> <Jogo>Porto - Braga</Jogo> Definição do tipo complexo Taposta <Aposta Escolha="1"/> <xsd:complextype name="taposta"> <Aposta Escolha="X"/> </LinhaJogo> <xsd:attribute <LinhaJogo> name="escolha" type="tescolha" use="required"/> <Jogo>Benfica - Belenenses</Jogo> </xsd:complextype> <Aposta Escolha="1"/> </LinhaJogo> <LinhaJogo> <Jogo>P.Ferreira - Trofense</Jogo> <Aposta Escolha="1"/> <Aposta Escolha="X"/> <Aposta Escolha="2"/> </LinhaJogo>... </TotoBola> <?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 >
Exemplo Bem Estruturado <?xml version="1.0"?> <TotoBola concurso="21/2009"> <LinhaJogo> <Jogo>Porto - Braga</Jogo> Definição do tipo simples Tconcurso <Aposta Escolha="1"/> <xsd:simpletype name="tconcurso"> <Aposta Escolha="X"/> </LinhaJogo> <xsd:restriction <LinhaJogo> base="xsd:string"> <Jogo>Benfica - Belenenses</Jogo> <xsd:pattern value="[0-9]{2}/[0-9]{4}"/> </xsd:restriction> <Aposta Escolha="1"/> </xsd:simpletype> </LinhaJogo> <LinhaJogo> <Jogo>P.Ferreira - Trofense</Jogo> <Aposta Escolha="1"/> <Aposta Escolha="X"/> <Aposta Escolha="2"/> </LinhaJogo>... </TotoBola> <?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 >
Exemplo Bem Estruturado <?xml version="1.0"?> <TotoBola concurso="21/2009"> <LinhaJogo> <Jogo>Porto - Braga</Jogo> Definição do tipo simples Tescolha <Aposta Escolha="1"/> <xsd:simpletype name="tescolha"> <Aposta Escolha="X"/> </LinhaJogo> <xsd:restriction <LinhaJogo> base="xsd:string"> <xsd:enumeration <Jogo>Benfica - Belenenses</Jogo> value="1"/> <xsd:enumeration <Aposta Escolha="1"/> value="x"/> </LinhaJogo> <xsd:enumeration value="2"/> <LinhaJogo> </xsd:restriction> </xsd:simpletype> <Jogo>P.Ferreira - Trofense</Jogo> <Aposta Escolha="1"/> <Aposta Escolha="X"/> <Aposta Escolha="2"/> </LinhaJogo>... </TotoBola> <?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 >
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> <?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 >
Referenciar um Schema no XML 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
Referenciar um Schema no XML Atributo xsi:nonamespaceschemalocation Pessoas.xml <?xml version="1.0" encoding="iso-8859-1"?> <pessoas xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="pessoas.xsd" >... 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">
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
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 <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>
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. <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>
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. <?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>
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)
6. a) Propostas de Exercícios <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>
6. a) Propostas de Exercícios <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>
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)
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.
6. f) Propostas de Exercícios <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>
6. g) Propostas de Exercícios <xs:simpletype name="tgenero"> <xs:restriction base="xs:string"> <xs:pattern value="(m F)"/> </xs:restriction> </xs:simpletype> 7. h) <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 / XSchema