Você está na página 1de 11

Pilar Alonso

Linguado
1º DAMEL
Tarefa 4
Linguagem de
marcação

DTD
E
XML
ESQ
UEMA
1

Pilar Alonso Linguado


Tarefa 4 da Linguagem de Marcação
1º Damel

1 .- Uma empresa utiliza arquivos XML para fazer o inventário, entre outras coisas, de
impressoras. Para cada impressora você deseja salvar seu número de série, marca,
modelo, peso, tamanhos de papel com os quais pode trabalhar, o cartucho que usa, o
tipo, o ano de compra e se está conectado em rede ou não.

Um exemplo desses arquivos seria:

<impressoras>
<printer numSerie="i245" type="laser" buy="2010">
<marca>Epson</marca>
<modelo>EPL300</modelo>
<peso>4,52</peso>
<tamanho>A4</tamanho>
<tamanho>A5</tamanho>
<cartucho>C-123BV</cartucho>
<Enred/>
</impressora>
<printer numSerial="i246" type="dot matrix">
<marca>HP</marca>
< modelo >LaserJet 2410</modelo>
<peso>3,2</peso>
<tamanho>A4</tamanho>
<cartucho>C-456P</cartucho>
</impressora>
</impressoras>
Escreva um esquema XML para esses arquivos, escolhendo os tipos de dados mais
apropriados e levando em conta que:

• O peso é um número positivo e não pode ter mais de duas casas decimais.
• Pode haver mais de um tamanho.
• O atributo type só pode assumir os valores 'matrix', 'laser' e 'ink'. É obrigatório.
• O atributo numSeries é necessário e atua como um identificador.
• O cartucho consiste em um C maiúsculo, um hífen, três números e uma ou duas
letras maiúsculas.
• Todos os elementos são obrigatórios, exceto o trabalho em rede.
• O elemento de rede é opcional. Se presente, é um elemento vazio.
• O atributo de compra, opcional, salva o ano da compra. É um inteiro positivo.
• Em cada arquivo há dados para uma ou mais impressoras.

ESQUEMA XML
2

O elemento pai é <xs:schema> e deve conter declarações para todos os elementos


encontrados no xml.

O elemento filho é <xs:element>.

No esquema xml não temos como definir o elemento raiz de uma forma especial,
vamos indicá-lo com <xs:element name="root"> , que definiremos como
complexo se ele abrigar mais elementos dentro e a tag xs:sequence para adicionar
os diferentes elementos que o formam e suas restrições. Dessa forma, teremos um
esquema xml aninhado.

Os atributos devem ser declarados após a marca de sequência que define os


elementos raiz.

O esquema XML nos permitirá realizar validações avançadas.

Este é o XMl validado em relação ao document1.xsd:

<?xml version="1.0" encoding="UTF-8"?>

<xmlns printers:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Document1.xsd"> <!--vinculação de
caminho relativo para validar em relação a xsd-->

<printer numSerie="i245" type="laser" buy="2010">


3

<marca>Epson</marca>

<modelo>EPL300</modelo>

<peso>4,52</peso>

<tamanho>A4</tamanho>

<tamanho>A5</tamanho>

<cartucho>C-123BV</cartucho>

<Enred/>

</impressora>

<printer numSerial="i246" type="dot matrix">

<marca>HP</marca>

< modelo >LaserJet 2410</modelo>

<peso>3,2</peso>

<tamanho>A4</tamanho>

<cartucho>C-456P</cartucho>

</impressora>

</impressoras>

Agora o esquema XML chamado document1:


4

Eu adicionei comentários deste tipo:<!---------> embora os comentários feitos


desta forma sejam preferíveis, pois são acionáveis e podem ser estruturados:

<xs:anotação>
<xs:documentação>
Define uma lista de impressoras. Pilar Alonso Sole.Tarefa 04.1 DAMEL
</xs:documentação>
</xs:anotação>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">

<xs:nome do elemento="impressoras">

<xs:complexType>

<xs:sequência>

<!--Aqui nos referimos ao elemento impressora, as referências são uma


maneira de tornar o esquema XML mais legível. Haverá dados para uma ou mais
impressoras - >

<xs:element ref="printer" minOccur="1"


maxOcorre="ilimitado"/>

</xs:sequência>
5

</xs:complexType>

</xs:elemento>

<xs:nome do elemento="impressora">

<xs:complexType>

<xs:sequência>

<xs:element name="brand" type="xs:string" minOccur="1"


maxOccur="unbounded"/>

<xs:nome do elemento="modelo" type="xs:string" minOcorre="1"


maxOcorre="ilimitado"/>

<xs:nome do elemento="peso" minOcorre="1" maxOcorre="ilimitado">

<!--O peso deve ser um número positivo e não ter mais de duas casas
decimais, pois deve ser declarado dentro de xs:restrição-->

<xs:simpleType> <!--define o valor do tipo simple-->

<xs:restriction base="xs:decimal"><!--base indica o tipo de dados a partir


do qual a restrição é feita, neste caso ela deve ser decimal-->

<xs:fractionDigits value="2"/> <!--Eu uso fractionDigits para especificar o


número de casas decimais, uma vez que o total de dígitos, embora possa ser
aplicado em decimais, especifica o número de dígitos totais-->

<xs:minInclusive value="1"/>

</xs:restrição>

</xs:simpleType>

</xs:elemento> <!--pode haver mais de um tamanho-->

<xs:element name="size" type="xs:string" minOccur="1"


maxOccur="unbounded"/><!--definimos um número máximo ilimitado de
tamanhos, com uma ocorrência mínima de 1-->

<xs:element name="cartridge" minOccur="1" maxOccur="unbounded" >

<xs:simpleType>

<xs:base de restrição="xs:string">
6

<xs:pattern value="[C][\-][0-9][0-9][0-9][A-Z]{1,2}"/>

</xs:restrição>

</xs:simpleType>

</xs:elemento>

<xs:element name="enred" type="xs:string" default="" minOccur="0" />

</xs:sequência>

<!--atribuições-->

<!--O atributo Serial Number deve ser necessário e também atuar como o
identificador da impressora-->

<xs:nome do atributo="numSeries" use="required">

<xs:simpleType>

<xs:restriction base="xs:ID"><!--Definimos a restrição do tipo ID-->

</xs:restrição>

</xs:simpleType>

</xs:atributo>

<!--O atributo type deve ser obrigatório e também deve contemplar apenas os
valores: matriz, laser e tinta-->

<xs:nome do atributo="type" use="required">

<xs:simpleType><!--define o tipo simples-->

<xs:restriction base="xs:string"><!--o tipo de dados ao qual a restrição é feita-->

<xs:enumeration value="array"/> <!--dentro de uma enumeração colocaremos


os diferentes valores-->

<xs:enumeration value="laser"/>

<xs:valor de enumeração="ink"/>

</xs:restrição>
7

</xs:simpleType>

</xs:atributo>

<xs:attribute name="purchase" type="xs:positiveInteger" use="optional"/><!--o


atributo purchase é opcional e é um inteiro positivo, por padrão se nada for
especificado o atributo será opcional, embora eu preferisse especificá-lo-->

</xs:complexType>

</xs:elemento>

</xs:esquema>

2.- Uma associação de jogadores de mus usa arquivos XML para armazenar as
informações dos torneios que organiza. Para cada torneio você deseja salvar o ano em
que foi realizado, o vencedor anterior (seu ID) e as informações dos participantes. Os
participantes querem armazenar seu identificador, o de seu parceiro, seu nome completo,
idade, país e também se eles são semeados ou não.

Um exemplo desses arquivos seria:

<tournament edition="1998" previousWinner="j01">


<participante idP="j01" par="j02">
<nome>Manuel Pérez</nome>
<idade>23</idade>
<país> Espanha</país>

<Semente/>
</participante>
<participante idP="j02" par="j01">
<nome>Manuel Gómez</nome>
<idade>25</idade>
<país>Espanha</país>
</participante>
<participante idP="j03" par="j04">
<nome>Ana Puertas</nome>
<idade>22</idade>
<país> E5spaña</país>
<Semente/>
</participante>
<participante idP="j04" par="j03">
<nome>Paco Fraile</nome>
<idade>45</idade>
<país>Espanha</país>
</participante>
</torneio>
Escreva um DTD adequado para esses arquivos, levando em conta que:
8

• Todos os atributos são obrigatórios.


• O atributo idP atua como o identificador.
• O atributo pair é o identificador de outro participante que necessariamente deve
estar presente no arquivo.
• O elemento SeriesHead é opcional, os demais são obrigatórios.
• Em cada arquivo há dados para um único torneio.
• O torneio tem que ter participantes.

..DTD

Um DTD é um documento com extensão .dtd e é responsável por garantir que os dados
XML estejam em conformidade com as restrições impostas ao dtd.

Neste caso, declarei-o internamente no xml, mas também é possível declará-lo


externamente na forma de um documento de texto simples de extensão .dtd

Os elementos terminais (não contêm elementos) são declarados assim: <! Nome do
elemento tipo_de_dato>

Elementos não terminais desta outra forma: <! ELEMENTO A(B,C)>

Do qual será necessário definir sua cardinalidade: ? (opção),*(0,1,vários),+(um ou mais)|


(operador de eleição)

<! ATTLIST para declarar atributos e existem vários tipos:


ID,IDREF,CDATA,MNTOKEN e os modificadores:
IMPLIED,FIXED,REQUIRED,literal.

Também vamos criar entidades para trabalhar com valores constantes.

REQUISITOS DA TAREFA

Como o torneio deve ter participantes, usamos > + para definir um mínimo de 1 ou mais
na cardinalidade do elemento do torneio.

Como os atributos devem ser obrigatórios, usaremos #REQUIRED

Dentro do elemento participante, descobriremos que todos os elementos contidos devem


ter pelo menos uma ocorrência (+) e que o elemento headerDeSerie é opcional, então use
>?

Como idP, ele deve ser um identificador >vamos adicionar ID para declarar o atributo
como um identificador.
9

O atributo par deve se referir ao idP de outro participante para isso usarei IDREF.

Ficaria assim:

<?xml version="1.0" encoding="UTF-8"?>

<! Torneio DOCTYPE [

<! Torneio ELEMENT (participante+)>

<! Edição do torneio ATTLIST CDATA #REQUIRED>

<! ATTLIST torneio anteriorVencedor CDATA #REQUIRED>

<! ELEMENTO participante (nome+,idade+,país+,semente?) >

<! ID do participante do ATTLIST#REQUIRED>

<! Casal participante ATTLIST IDREF #REQUIRED>

<! Nome do elemento (#PCDATA)>

<! Idade do ELEMENTO (#PCDATA)>

<! País ELEMENT (#PCDATA)>

<! Cabeça de série ELEMENT (#PCDATA)>

]>

<tournament edition="1998" previousWinner="j01">

<participante idP="j01" par="j02">

<nome>Manuel Pérez</nome>

<idade>23</idade>

<país> Espanha</país>

<Semente/>

</participante>

<participante idP="j02" par="j01">

<nome>Manuel Gómez</nome>
1
0
<idade>25</idade>

<país>Espanha</país>

</participante>

<participante idP="j03" par="j04">

<nome>Ana Puertas</nome>

<idade>22</idade>

<país> E5spaña</país>

<Semente/>

</participante>

<participante idP="j04" par="j03">

<nome>Paco Fraile</nome>

<idade>45</idade>

<país>Espanha</país>

</participante>

</torneio>

Captura de tela anexada do Copy Editor e o arquivo será .dtd:

Você também pode gostar