Está en la página 1de 14

Ejercicios LM:

1. Escribe varios documentos XML (bien formados) que estén descritos por la
siguiente DTD: person2.dtd y que lo vincule de manera correcta (sean válidos).
(person.dtd)

DTD
<!ELEMENT persona2 (nombre, apellido+, edad, enActivo?)>
<!ATTLIST persona2 dni ID #REQUIRED estadoCivil (Soltero | Casado |
Divorciado) #IMPLIED >
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
<!ELEMENT enActivo (#PCDATA)>

Resuelto XML:

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


<!DOCTYPE persona2 SYSTEM "persona2.dtd">
<persona2 dni="Q12345678" estadoCivil="Casado">
<nombre>David</nombre>
<apellido> Perez</apellido>
<edad>42</edad>
<enActivo>Profesor</enActivo>
</persona2>
2. Construir una DTD y posteriormente un documento XML con varios elementos libro
(bien formado y válido con respecto a dicha DTD.) Dicha DTD debe representar una
librería de la siguiente forma:

Resuelto:

DTD

<!ELEMENT libreria (libro+)>


<!ELEMENT libro (titulo, precio, autor, isbn, editor, cantidad) >
<!ELEMENT titulo (#PCDATA)>
<!ATTLIST titulo categoria (novela | poesia | teatro | ensayo) #REQUIRED >
<!ELEMENT precio (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>
<!ELEMENT editor (#PCDATA)>
<!ELEMENT cantidad (#PCDATA)>

XML

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


<!DOCTYPE libreria SYSTEM "libreria.dtd">
<libreria>
<libro>
<titulo categoria="novela">Vida y Destino</titulo>
<precio>27</precio>
<autor>VAssily Grossman</autor>
<isbn>1111-1111-1111</isbn>
<editor>Destino</editor>
<cantidad>4</cantidad>
</libro>
<libro>
<titulo categoria="ensayo">La España Vacía</titulo>
<precio>15</precio>
<autor>Sergio del Molino</autor>
<isbn>1212-3333-1111</isbn>
<editor>Siruela</editor>
<cantidad>2</cantidad>
</libro>
</libreria>
3. Crear un documento XML que almacene la siguiente información de alumnos, indicar
en él las reglas DTD para que se cumplan las siguientes restricciones:

- Para cada alumno se almacenará nombre, apellidos, domicilio y teléfono (teniendo en cuenta
que puede tener uno o más).
- Incluir el atributo “cod_alumnos” que identifique a los alumnos de forma única
- se debe indicar si el alumno está o no becado.
- Se desea conocer si el alumno tiene familiares estudiando en el centrum esto se referenciará
con el código de alumno del familiar.
- Cada alumno puede tener uno o varios números de teléfono y en cada número almacenado se
guardará, mediante el atributo, si el alumno tiene permitidas las comunicaciones de notas a
través de teléfono. Por defecto este valor será “NO”
- Se permite añadir opcionalmente observaciones sobre los alumnos. Creando como ANY para
permitir incluir cualquier información de tipo texto junto con otros elementos del esquema.
- se almacenará las notas del último curso mediante los elementos de evaluación y calificación,
que aparecerán en ese orden y varias veces.

Resultado:

DTD:

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


<!DOCTYPE alumnos [

<!ELEMENT alumnos (alumno+)>


<!ELEMENT alumno (nombre | apellidos | domicilio | telefono+ | familiares? |
observaciones? | notas?)>
<!ATTLIST alumno cod_alumno ID #REQUIRED>
<!ATTLIST alumno becado (SI | NO) #REQUIRED>

<!ELEMENT nombre (#PCDATA)>


<!ELEMENT apellidos (#PCDATA)>
<!ELEMENT domicilio (#PCDATA)>

<!ELEMENT telefono (#PCDATA)>


<!ATTLIST telefono comunicaciones (SI | NO) "NO">

<!ELEMENT observaciones (#PCDATA)>

<!ELEMENT familaires (familiar+)>


<!ELEMENT familiar EMPTY>

<!ATTLIST familiar cod_familiar IDREF #REQUIRED>

<!ELEMENT observaciones ANY>

<!ELEMENT notas (evaluaciones | calidicacion)+>


<!ELEMENT evaluaciones (#PCDATA)>
<!ELEMENT calificacion (#PCDATA)>
]>
XML

<alumnos>
<alumno cod_alumno = "A" becado = "SI">
<nombre></nombre>
<apellidos></apellidos>
<domicilio></domicilio>
<telefono comunicaciones = "NO">
<telefono1></telefono1>
<telefono2></telefono2>
</telefono>
<!--
<familiares>
<familiar cod_familiar = 145></familiar>
</familiares>

<observaciones></observaciones>

<notas>

<evaluacion></evaluacion>
<calificacion></calificacion>
</notas>
-->
</alumno>
</alumnos>

4. Crear un documento XML y DTD donde:

- Cada documento XML corresponderá a un cuento. su elemento raíz será cuento.


- Un cuento va a tener los siguientes atributos.
Cod que incluirá un código formado por una letra y dos números, será
obligatoria.
Título que incluirá el título del cuento, obligatoria.
Género que podrá tomar valores “infantil”, “fantasía”, que será opcional.
- En un cuento tendremos los siguientes elementos y en este orden:
Personajes: que contendrá todos los personajes de un cuento, (al menos habrá
un personaje como mínimo).
Trama: que contendrá la trama del cuento.
Una serie de elementos llamados “etiquetas” que serán los elementos vacíos con
un atributo “nombre” que contendrá el nombre de la etiqueta del cuento. Un
cuento puede no tener etiquetas, pero puede contener varias.
- Cada personaje tendrá los elementos nombre, género (que sólo podrá tomar los valores M, F o
N, y una descripción (opcional). Además cada personaje tendrá un atributo requerido “id” que
tendrá un valor único en todo el documento) y un atributo “tipo” que puede tomar los valores
“principal”, “secundario” o “antagonista”, con un valor por defecto principal.
XML

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


<!DOCTYPE cuento >

<cuento cod_cuento = "K12" titulo = "Mulán" genero = "fantasía">

<personajes id = "A12" tipo = "principal ">


<personaje 1>
<nombre>Mulán</nombre>
<genero>F</genero>
<descripción>Una joven guerrera</descripción>
</personaje 1>
</personajes>

<Trama>"Historia del cuento"</Trama>


<etiqueta nombre = "amor"> </etiqueta>
<etiqueta nombre = "guerra"></etiqueta>

</cuento>

DTD

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


<!DOCTYPE cuentos [

<!ELEMENT cuento (personajes, trama, etiqueta*)>


<!ATTLIST cuento cod_cuento CDATA #REQUIRED>
<!ATTLIST cuento título CDATA #REQUIRED>

<! ATTLIST cuento genero (infantil | fantasia | terror) #IMPLIED>

<!ELEMENT personajes (personajes)>


<!ELEMENT personaje (nombre | genero | descripción?)>

<!ATTLIST personaje id ID #REQUIRED>


<!ATTLIST personaje tipo (principal | secundario | antagonista) "principal">

<!-- "principal es para decir que por defecto es principal."


-->
<!ELEMENT trama (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT genero (#PCDATA)>
<!ELEMENT descripción (#PCDATA)> <!-- no podemos implementar que tome los valores M O
F -->

<!ELEMENT etiqueta EMPTY) > <!-- Ponemos EMPTY porque son etiquetas vacías-->
<!ATTLIST etiqueta nombre CDATA #REQUIRED>
]>
ESQUEMA XDS: XMLSCHEMA

- Es un documento XML (elemento raíz <schema>)


- Espacios de nombres de XML Schema para sus metaelementos
- Extensión .xsd

PRIMERAS LÍNEAS;

- Declaración del documento XML

<?xml version =”1.0” enconding =”UTF-8” ?>

- Elemento raíz

<xs:schema>

xmlns:xs =”http://www.w3.org/2001/XMLSchema”>

COMENTARIOS:

xs:documentation: Introducir documentación para el lector.

xs:appinfo: Pasar información extra a las aplicaciones que hagan uso del esquema

<!-- →

- ELEMENTO:

<xs:element name = “ ”> </xs:element>

- SIMPLE: solo puede tener datos de tipo carácter

<xs:element name = ” ” type = “ “> </xs:element>

- COMPLEJO: Puede contener atributos, elementos hijos y contenido mixto.

<xs:element name = “ ”>

<xs:complexType>

</xs:complexType>

</xs:element>

<xs:sequence> : Define una secuencia ordenada de subelementos (equivale a , en


DTD)

- Mínimo y máximo número de ocurrencias : minOccurs, maxOccurs.


- <xs:choise>: Define un grupo de elementos mutuamente excluyentes, permite
elegir un mínimo y un máximo.
- <xs:all>: Define un grupo no ordenado de elementos, cada elemento puede
aparecer como mucho una vez (mínimo 0 y máximo 1)
XML

<?xml version =”1.0” enconding = ”ISO-8859-1” standalone = “no”?>

<!DOCTYPE biblioteca SYSTEM “biblioteca.dtd”>

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

<biblioteca>

<libro cod = "1">

<titulo>XML para todos</titulo>

<autor> Sergio Lujan Mora</autor>

<anio>2001</anio>

<editorial>UA Prensa</editorial>

</libro>

</biblioteca>

DTD

<! ELEMENT biblioteca (libro+)>

<!ELEMENT libro (titulo | autor* | anio? | editorial?) >

<!ATTLIST libro cod CDATA #REQUIRED>

<!ELEMENT titulo (#PCDATA)>

<!ELEMENT anio (#PCDATA)>

<!ELEMENT anio (#PCDATA)>

<!ELEMENT editorial (#PCDATA)>


XS:schema

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

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

<xs:element name="biblioteca" minOccurs = "1 " maxOccurs = "unbounded">

<xs:complexType>

<!-- Pnemos los diferentes elementos compuestos por libro -->

<xs:sequence>

<xs:element name="titulo" type="xs:string" minOccurs="0" maxOccurs="1"/>

<xs:element name="autor" type="xs:string" minOccurs="0"


maxOccurs="unbounded"/>

<xs:element name="anio" type="xs:integer" minOccurs="0" maxOccurs="1"/>

<xs:element name="editorial" type="xs:string" minOccurs="0" maxOccurs="1"/>

</xs:sequence>

<!-- Ponemos el atributo del elemento libro -->

<xs:attribute name = "cod" type ="xs:string"/>

</xs:complexType>

</xs:element>

</xs:schema>
EJERCICIO 3 países:

Crear un fichero XML, llamado “nombredelpais”.xml, (por ejemplo francia.xml) . Se


debe crear un fichero XML que almacene del país seleccionado: a) Nombre b)
Población c) Continente d) Nombre capital e) Coordenadas GPS de la capital a.
Latitud (Ejemplo: 41.40338) b. Longitud (Ejemplo: 2.17403) f) Fotografías del país
(pueden existir muchas, pero al menos debe contener una, 1..N) De cada fotografía
almacenar: a. Nombre b. Descripción c. Url (Ejemplo:
https://cdn.passporthealthglobal.com/wpcontent/uploads/2018/08/francia.jpg?x10
491)

Documento XML

<españa>

<población></población>

<continente></continente>

<capital></capital>

<coordenadas>

<latitud></latitud>

<longitud></longitud>

</coordenadas>

<fotografías>

<nombre></nombre>

<descripcion></descripcion>

<url></url>

</fotografías>

</españa>

Crear un fichero XSD (XML Schema) que permita validar el XML del ejercicio 1. El
nombre del fichero tiene que ser el nombre del país con extensión XSD
(francia.xsd)
- DOCUMENTO XS:SCHEMA (XSD)

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

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

<xs:element name="españa">

<xs:complexType>

<xs:sequence>

<xs:element name="población" type="xs:string"/>

<xs:element name="continente" type="xs:string"/>

<xs:element name="capital" type="xs:string"/>

<xs:element name="coordenadas">

<xs:complexType>

<xs:sequence>

<xs:element name="latitud" type="xs:string"/>

<xs:element name="longitud" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name="fotografías">

<xs:complexType>

<xs:sequence>

<xs:element name="nombre" type="xs:string"/>

<xs:element name="descripcion" type="xs:string"/>

<xs:element name="url" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>
Ejercicio2. - Se diseñará un modelo de documento (esquema XSD) para crear facturas en
XML con, al menos, los siguientes campos:
● Cliente (nombre, dirección, CIF, …)
● Número de factura
● Fecha
● Líneas de factura (diferentes conceptos que incluye la factura), consistentes en
concepto e importe.
● Subtotal: suma de los importes de las líneas de factura
● IVA
● Total

xs:schema

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

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

<xs:element name="factura">

<xs:complexType>

<xs:sequence>

<xs:element name="cliente">

<xs:complexType>

<xs:sequence>

<xs:element name="nombre" type="xs:string"/>

<xs:element name="direccion" type="xs:string"/>

<xs:element name="cif" type="xs:string"/>

<!-- Otros campos relacionados con el cliente -->

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name="numeroFactura" type="xs:string"/>

<xs:element name="fecha" type="xs:date"/>

<xs:element name="lineasFactura" maxOccurs="unbounded">

<xs:complexType>

<xs:sequence>
<xs:element name="concepto" type="xs:string"/>

<xs:element name="importe" type="xs:decimal"/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name="subtotal" type="xs:decimal"/>

<xs:element name="iva" type="xs:decimal"/>

<xs:element name="total" type="xs:decimal"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>
- XML A XSCHEMA con ALL

XML:

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

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

xsi:noNamespaceSchemaLocation="lugar.xsd">

<ciudad>

<pais>Italia</pais>

<nombre>Florencia</nombre>

</ciudad>

</lugar>

XS:SCHEMA:

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

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

<xs:element name="lugar">

<xs:complexType>

<xs:sequence>

<xs:element name="ciudad">

<xs:complexType>

<xs:all>

<xs:element name="nombre" type="xs:string"/>

<xs:element name="pais" type="xs:string"/>

</xs:all>

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

También podría gustarte