0% encontró este documento útil (0 votos)
90 vistas90 páginas

UT3 LengAlmacTransmiJMPLv4

El documento habla sobre XML y JSON, lenguajes para almacenar y transmitir información. Explica que XML es un lenguaje de marcas extensible que permite crear vocabularios personalizados, mientras que JSON es un formato ligero de intercambio de datos. Además, proporciona instrucciones sobre cómo crear documentos XML correctamente usando etiquetas, atributos y una estructura jerárquica.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
90 vistas90 páginas

UT3 LengAlmacTransmiJMPLv4

El documento habla sobre XML y JSON, lenguajes para almacenar y transmitir información. Explica que XML es un lenguaje de marcas extensible que permite crear vocabularios personalizados, mientras que JSON es un formato ligero de intercambio de datos. Además, proporciona instrucciones sobre cómo crear documentos XML correctamente usando etiquetas, atributos y una estructura jerárquica.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 90

UT 3.

Lenguajes para
el almacenamiento y
transmisión de la
información XML y
JSON
L E N G U A J E S D E M A R C A S Y S I S T E M A S D E G E S T I Ó N D E I N F O R M AC I Ó N

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web


Lenguajes de Marcas y Sistemas de Gestión
d e I n fo r m a c i ó n

eXtensible Markup
Language
XML

https://www.w3schools.com/xml/default.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 2


Lenguajes de Marcas y Sistemas de
XML –Visual Studio Code G e s t i ó n d e I n fo r m a c i ó n
Vamos a realizar los documentos XML de esta unidad utilizando Visual Studio Code. Es
conveniente instalar los plugins
XML- Red Hat

XML Tools

Después al crear un documento .xml bastará con poner un < para que se muestre el prólogo de
xml

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 3


Lenguajes de Marcas y Sistemas de
XML G e s t i ó n d e I n fo r m a c i ó n
Los lenguajes de marcas como HTML tienen una orientación muy clara: describir páginas web.
En un contexto distinto, muy a menudo ocurre que es muy difícil intercambiar datos entre
programas.
XML (eXtensible markup language) es un conjunto de tecnologías orientadas a crear nuestros
propios lenguajes de marcas. A estos lenguajes de marcas "propios" se les denomina
"vocabularios".

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


<clientes>
<cliente>
<nombre>Acer SA</nombre>
<cif>5664332</cif>
</cliente>
<cliente>
<nombre>Mer SL</nombre>
<cif>5111444</cif>
</cliente>
</clientes>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 4


Lenguajes de Marcas y Sistemas de
XML G e s t i ó n d e I n fo r m a c i ó n
Tal y como se mencionó en el capítulo 1, XML es un lenguaje de marcas extensible cuyas siglas
vienen de la expresión inglesa eXtensible Markup Language. Se considera un metalenguaje y
surge para resolver los problemas que plantea HTML, pues las etiquetas muestran el significado de
sus datos.
La importancia radica en el intercambio de información de manera segura entre distintos
programas, permitiendo así la reutilización de contenido, crear etiquetas propias y presentar una
estructura y diseño independientes.
Los ficheros xml pueden ser representado de muchas formas. Tiene contenido, pero no tiene
formato de representación explicito.
Es un estándar para muchas representaciones de datos: XML Usage (w3schools.com)

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 5


Lenguajes de Marcas y Sistemas de
XML: Construcción. G e s t i ó n d e I n fo r m a c i ó n
Para crear XML es importante recordar una serie de reglas:
• XML es «case-sensitive», es decir que no es lo mismo mayúsculas que minúsculas y que por
tanto no es lo mismo <cliente>, que <Cliente> que <CLIENTE>. La costumbre es poner todo
en minúsculas.
Un documento XML ha de
• Obligatorio: solo un elemento raíz. crearse en texto plano.
• En general, aunque no es obligatorio, se suele poner en la primera línea un prólogo que indica
la versión de XML que estamos usando y la codificación con la que nuestro editor almacena los
archivos.
• Usa nombres descriptivos
• Evita usar guiones altos - y puntos ( . y : (se usan para namespaces)) para separar los
nombres de elementos o atributos.
XML Elements (w3schools.com)

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 6


Lenguajes de Marcas y Sistemas de
XML: Estructura G e s t i ó n d e I n fo r m a c i ó n
La estructura de un documento XML es jerárquica arborescente, que contiene a un padre (raíz)
único y una serie de (hijos) elementos secundarios. La raíz se sitúa en la parte superior, colgando el
resto de elementos de él. La extensión de este tipo de documentos es .xml
En todo documento, se distinguen dos partes claramente diferenciadas:
1. Por un lado, se encuentra el prólogo, que contiene información respecto al documento creado
(versión, codificación de caracteres, descripción de estructura, etc.).
2. Por el otro, se encuentra el elemento raíz o cuerpo del documento, que tiene que ser único y
sobre el que están contenidos los demás elementos.

Un elemento raíz no tiene ascendientes ni hermanos.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 7


Lenguajes de Marcas y Sistemas de
Prólogo G e s t i ó n d e I n fo r m a c i ó n
La primera línea por la que deben empezar los documentos XML es el prólogo, compuesto por la
versión del documento, que indica la versión XML usada, encoding que informa de la codificación
del documento, con posibles valores (UTF-8, ISO 8859-1, etc.), y puede ser modificado en
cualquier momento. Otro posible atributo que puede contener dicha línea es standalone, que
informa de si el documento lleva asociado un fichero DTD o XSD, con valores posibles "yes" o
"no". Dichas instrucciones comienzan por los caracteres <? y terminan con los caracteres ?>.
En la segunda línea, se encuentra la raíz.
En el caso de asociar una DTD a un XML, la segunda línea sería la definición del tipo de
documento.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 8


Lenguajes de Marcas y Sistemas de
Marcas o etiquetas G e s t i ó n d e I n fo r m a c i ó n
En un documento XML, el usuario puede definir sus propias marcas o etiquetas con la finalidad
de guardar la información de la manera que estime oportuna, separando el contenido de la
estructura. Las marcas son el pilar fundamental de estos lenguajes. Se usan los signos menor que
(<) y mayor que (>) para definirlas. Los nombres de las marcas deben describir los datos que
contienen. Cabe destacar que, en XML, no existe un número finito de marcas, sino que, para poder
realizar una representación de datos adecuada, cada usuario puede definir las marcas que estime
oportunas.
Las marcas no pueden contener espacio en blanco, comillas simples o dobles, punto y coma,
signo de porcentaje, etc. Por otra parte solo se pueden crear etiquetas que empiece por letra o
_. Es decir, esta etiqueta no funcionará en los programas <12Cliente>. Aparte de eso, una etiqueta
sí puede contener números, por lo que esta etiqueta sí es válida <Cliente12>, aunque sería mejor
si se escribiese <cliente12>.

Seguiremos el convenio de que las etiquetas empiecen siempre por una letra minúscula.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 9


Lenguajes de Marcas y Sistemas de
Marcas o etiquetas G e s t i ó n d e I n fo r m a c i ó n
Existen tres tipos de etiquetas:
¡Recuerda! Las etiquetas son case sensitive.
1. Las de apertura como <casa>
2. Las de cierre como </casa>, que usan el carácter barra (/) para indicar fin de marcado.
3. Etiquetas vacías, siendo estas últimas las que carecen de contenido como <casa/>

Aunque viable, no se deben tener estructuras


como : Sino estructuras jerárquicas:
<nombre> Juan <nombre>
<apellidos>Perez</apellidos> <nombrepila> Juan </nombrepila>
</nombre> <apellidos>Perez</apellidos>
<dni/> <!--dni vacio --> </nombre>
<dni/> <!--dni vacio -->

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 10


Lenguajes de Marcas y Sistemas de
Atributos G e s t i ó n d e I n fo r m a c i ó n
Los atributos se usan para asignar propiedades asociadas a los elementos, especialmente
metadatos, como identificadores. Almacenan información adicional sobre los elementos. Se sitúan
dentro de una etiqueta de inicio o de apertura. Se especifican con el par
NombreAtributo="valor", pudiendo añadirse varios separados por un espacio en blanco.
Los valores tienen que estar encerrados entre comillas dobles o simples.
No podrá haber dos atributos llamados iguales en un mismo elemento.
Aunque los atributos pueden usarse perfectamente en XML, no es recomendable abusar de ellos,
ya que un uso excesivo podría hacer que el documento fuese menos entendible para el usuario. En
el siguiente ejemplo, el elemento cliente tiene el atributo cif cuyo valor es “123456789“
<?xml version="1.0" encoding="UTF-8"?> Si el valor incluye comillas puedes utilizar:
o bien
<clientes>
<cliente cif="123456789"/> <gangster name='George "Shotgun" Ziegler’>
</clientes> <gangster name="George &quot;Shotgun&quot; Ziegler">

A la hora de elegir atributos tener en cuenta cuestiones que los atributos no tienen y los elementos
sí: tener varios valores, estructura arborescente, no son fácilmente expandibles.
I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 11
Lenguajes de Marcas y Sistemas de
Elementos G e s t i ó n d e I n fo r m a c i ó n
Los elementos están compuestos por etiquetas de inicio, de fin, escritas con el mismo nombre y
todo el contenido que haya entre ambas (ya sea texto u otros elementos).
En el ejemplo: • Etiqueta de apertura: <cliente>.
<?xml version="1.0" encoding="UTF-8"?> • Etiqueta de cierre: </cliente>.
<clientes>
<cliente>Acer SA</cliente> • Contenido del elemento: Acer SA.
</clientes>
• Elemento cliente: <cliente>Acer SA</cliente>.

Pueden existir elementos vacíos como por ejemplo:


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

Un elemento vacío puede ser uno que no tenga etiqueta de cierre con o sin atributos:
<?xml version="1.0" encoding="UTF-8"?>
<clientes>
<cliente nombre="Acer SA"/>
</clientes>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 12


Lenguajes de Marcas y Sistemas de
Elementos G e s t i ó n d e I n fo r m a c i ó n
Hay que tener en cuenta una serie de consideraciones a la hora de crear un elemento:

• Los elementos tienen que estar anidados correctamente unos dentro de otros, cerrándose en orden inverso al
que se abren.

• Los elementos no vacíos tendrán etiquetas de apertura y cierre.

• Los nombres de los elementos y atributos tienen que seguir una nomenclatura específica como no empezar por
número, no usar caracteres especiales reservados, etc. Tienen que empezar por letras o los caracteres guion bajo
(_) o dos puntos (:), seguidos de guiones, puntos, números u otras letras. Tampoco pueden empezar por la
palabra XML.

• Si colocas como valor de un elemento caracteres especiales como el < se debe sustituir por un carácter especial.
Por ejemplo para indicar un rango de sueldo menor de 1000 no puedes indicar

< rangosueldo > <1080 </ rangosueldo >


&lt; <
&gt; >
debes poner &amp; &
&apos; ‘
<rangosueldo> &lt; 1000 </rangosueldo> &quot; “

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 13


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 1. Crea un documento XML que contenga la información sobre los coches de un
concesionario. En concreto, marca, modelo, color, matricula, precio.

Actividad 2. Teniendo en cuenta la actividad anterior, cree el mejor XML usando como criterio la
mejor ordenación posible para un mejor filtrado por marca en nuestro concesionario.

Actividad 3. Es preciso mandar una tabla de manera segura y fiable a un programa cliente que
recoge información sobre unos árboles subtropicales: variedad, color de fruto, maduración, etc.
Transforma el siguiente cuadro sobre las distintas especies en un documento XML que almacene
dicha información.

XML Validator (w3schools.com)

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 14


Lenguajes de Marcas y Sistemas de
Comentarios G e s t i ó n d e I n fo r m a c i ó n
Los comentarios sirven de ayuda cuando el documento es extenso o se pretende que todo se
entienda con claridad. Pueden introducirse en cualquier parte, excepto dentro de las etiquetas,
otros comentarios o declaraciones. Tienen la misma sintaxis que los comentarios HTML,
comenzando por <!-- y terminando con --> En el ejemplo siguiente, la línea 3 sería un comentario.

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


<agenda>
<!-- Vamos a crear un comentario -->
<contacto nombre="Luis">
<ciudad>Sevilla</ciudad>
</contacto>
</agenda>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 15


Lenguajes de Marcas y Sistemas de
Sección CDATA G e s t i ó n d e I n fo r m a c i ó n
La sección CDATA permite añadir contenido sin ser procesado o analizado. Deben aparecer
dentro del elemento raíz de un documento XML. Es similar a un comentario cuya sintaxis es la
siguiente:
<![CDATA[Contenido dentro del bloque]]>

Un ejemplo podría ser:


<?xml version="1.0" encoding="UTF-8"?>
<frases>
<frase>
<autor>Antonio Gala</autor>
<texto><![CDATA[“Lo malo no es que los sevillanos piensen que tienen la ciudad <b>más bonita del
mundo</b>… Lo peor, es que puede que tengan hasta razón.”]]></texto>
</frase>
</frase>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 16


Lenguajes de Marcas y Sistemas de
XML puede extenderse G e s t i ó n d e I n fo r m a c i ó n
XML puede ser extendido, permitiendo que las antiguas versiones de los ficheros sigan siendo
válidas.
Por ejemplo si originalmente teníamos: y la ampliamos con
<note> <note>
<to>Tove</to> <date>2015-09-01</date>
<from>Jani</from> <hour>08:30</hour>
<heading>Reminder</heading> <to>Tove</to>
<body>Don't forget me this weekend!</body> <from>Jani</from>
</note> <body>Don't forget me this weekend!</body>
</note>

La versión antigua seguirá siendo válida

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 17


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 4. Es preciso mandar la información que se ha registrado en un foro, con las etiquetas
HTML sin procesar. En concreto se quiere mandar el siguiente texto:
<p>El usuario <b>usuario123</b> ha sido baneado del foro. Por incumplir la regla 23</p>.
Cree una estructura que sirva para enviar el texto tal cual, así como para encontrar fácilmente al
usuario del foro y las reglas incumplidas.

Actividad C1. Se necesita mandar información relativa plantilla de una empresa, se debe mandar
el puesto del empleado, el sueldo, el nombre y apellidos, así como la fecha de inicio en la empresa,
el departamento al que pertenece y el jefe de departamento. Utiliza XML teniendo en cuenta que
deberá ser lo más pequeño posible para que la transferencia del archivo sea lo más rápida posible.
Tenga en cuenta que el jefe del departamento también es un empleado y por tanto necesitamos
saber la misma información que el resto.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 18


Lenguajes de Marcas y Sistemas de
XML: Validez. G e s t i ó n d e I n fo r m a c i ó n
Un documento XML puede «estar bien formado» cuando respeta las reglas XML básicas o «ser
válido». Cuando respeta las reglas XML que alguien ha definido para un vocabulario, lo cual es
mejor que simplemente estar bien formado. Por ejemplo, los archivos de la izquierda ni siquiera
están bien formados.
<clientes> <clientes>
<cliente> <cliente>
<nombre>AcerSA <nombre>AcerSA</nombre>
<CIF>5666333</CIF> <cif>5666333</CIF>
</cliente> </cliente>
</clientes> </clientes>

<clientes>
<cliente> <cliente>
<nombre>AcerSA</nombre> <nombre!>AcerSA</nombre!>
<CIF>5666333</CIF>
<CIF>5666333</CIF> </cliente>
</cliente> <cliente>
<cliente> <nombre!>ACME</nombre!>
<nombre>ACME</nombre> <CIF>455321</CIF>
</cliente>
<CIF>455321</CIF> </clientes>
</cliente>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 19


Lenguajes de Marcas y Sistemas de
XML: Validez. G e s t i ó n d e I n fo r m a c i ó n
En general, podemos asumir que un documento puede estar en uno de estos estados que de peor
a mejor podríamos indicar así:
- Mal formado (lo peor)
• Bien formado.
+ Válido: está bien formado y además nos han dado las reglas para determinar si algo está bien o
mal y el documento XML cumple dichas reglas. Este es el mejor caso.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 20


Lenguajes de Marcas y Sistemas de Gestión
d e I n fo r m a c i ó n

Creación, asociación y
elementos de DTD y XSD
https://www.w3schools.com/xml/xml_dtd_intro.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 21


Lenguajes de Marcas y Sistemas de
Creación, asociación y elementos de DTD y XSD G e s t i ó n d e I n fo r m a c i ó n
A la hora de especificar una serie de restricciones a un documento XML, existen varias opciones
que un usuario puede usar. La primera de ellas es mediante DTD, que suele ser poco flexible en las
definiciones de cada uno de los elementos, ya que no es posible indicar si se trata de un elemento
de tipo fecha, moneda, número etc. Estas carencias que presenta DTD se superan usando XSD
(XML Schema Definition).
Si el documento XML va a ser compartido es útil tener definidas las reglas que los documentos
XML deben cumplir y para eso se puede utilizar un DTD
Existen generadores de esquemas de escritorio (Oxygen XML Editor, XMLSpy, Visual Studio, XML
Copy Editor, etc.) y online que facilitan obtener la DTD o XSD de manera automática, ahorrando así
al usuario la tediosa tarea de crear XSD o DTD de documentos XML extensos.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 22


Lenguajes de Marcas y Sistemas de
DTD G e s t i ó n d e I n fo r m a c i ó n
Pensemos en el siguiente problema, un programador crea aplicaciones con documentos que se
almacenan así:
<clientes>
<cliente>
<nombre>AcerSA</nombre>
<cif>455321</cif>
</cliente>
<cliente>
<nombre>ACME</nombre>
<cif>455321</cif>
</cliente>
</clientes>

Sin embargo, otro programador de la misma empresa lo hace así:


<clientes>
<cliente>
<cif>455321</cif>
<nombre>AcerSA</nombre>
</cliente>
<cliente>
<cif>455321</cif>
<nombre>ACME</nombre>
</cliente>
</clientes>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 23


Lenguajes de Marcas y Sistemas de
DTD G e s t i ó n d e I n fo r m a c i ó n
Definición de tipo de documento o DTD es un documento de texto plano donde se especifican
o definen una serie de normas que se usan para saber cómo tiene que crearse un fichero XML
para poder validarlo.
Gracias a este tipo de documentos, puede especificarse el número de ocurrencias de un elemento
XML y el tipo de datos, así como el orden de precedencia, entre otros aspectos.
Aunque no es obligatoria la creación de un DTD, es recomendable su uso si la información del
XML va a ser compartida. De esa manera, los usuarios que trabajen con el documento XML
sabrán, gracias al DTD, su definición o reglas a cumplir. Su sintaxis es distinta a la de XML, pues no
pueden definirse tipos de datos por parte de los usuarios ni insertar elementos no ordenados.

https://www.mclibre.org/consultar/xml/lecciones/xml-dtd.html

https://aprende-web.net/progra/xml/xml_6.php

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 24


Lenguajes de Marcas y Sistemas de
Creación y elementos de un DTD G e s t i ó n d e I n fo r m a c i ó n
Una vez que se han determinado las reglas que servirán como base para la generación de
documentos XML, es el momento de empezar a construir la DTD. Para ello, se estudiarán tres
componentes principales que lo forman (elementos, atributos y entidades).
Para crear este tipo de documentos, puede usarse un editor de texto plano, teniendo en cuenta
que la extensión de estos documentos será .dtd.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 25


Lenguajes de Marcas y Sistemas de
Elementos G e s t i ó n d e I n fo r m a c i ó n
Los elementos de una DTD son la base de su estructura. Lo primero que habría que mirar es si
existe dependencia jerárquica, especificando el nodo padre y, entre paréntesis, sus hijos si los
tuviera, separados por el carácter coma (,) tal y como se aprecia a continuación:

Por otra parte, cada uno de los elementos debe ser de un tipo específico, pudiendo distinguir
entre any, empty, #pcdata o #cdata. Se especifica tal y como se muestra en el ejemplo siguiente:
El tipo puede ser: https://www.liquid-technologies.com/DTD/Datatypes/PCDATA.aspx
• (#PCDATA): parsed character data, que indica que el contenido de ese elemento es de tipo texto y
es analizado por un parser.
• (#CDATA): character data, similar a PCDATA con la obviedad de que el contenido de los elementos
no es analizado por un parser y no pueden detectarse posibles entidades. Puede escribirse como
CDATA
• ANY: los elementos pueden contener cualquier valor.
• EMPTY: los elementos no tienen contenido. Elemento vacío.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 26


Lenguajes de Marcas y Sistemas de
Elementos G e s t i ó n d e I n fo r m a c i ó n
Ejemplo:
<!ELEMENT email (receptor,asunto,cuerpo)>
<!ELEMENT receptor (#PCDATA)>
<!ELEMENT asunto (#PCDATA)>
<!ELEMENT cuerpo (#PCDATA)>

Cuando escribes las reglas del DTD en el documento XML


verás que van desapareciendo las líneas rojas que marcan
los errores si estas están definidas correctamente.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 27


Lenguajes de Marcas y Sistemas de
Elementos. Ocurrencia de aparición. G e s t i ó n d e I n fo r m a c i ó n
Si quiere especificarse cuántas veces aparece un elemento en el XML: cero, una o varias veces, es
necesario contar con una nomenclatura específica.
Para ello, se usa una serie de caracteres que informa de la obligatoriedad o no, así como del
número de veces que puede aparecer dicho elemento.
→ ? El elemento puede aparecer 0 o 1 vez (el elemento opcional)
→ * El elemento puede aparecer 0, 1 o varias veces
→ + El elemento aparece 1 o varias veces.
→ | Puede añadirse uno de los dos elementos que se indican antes y después de | , pero no
ambos. Es similar a un Or lógico:
<!ELEMENT nombre (hijo1, (hijo2 | hijo3) ) >
<!ATTLIST precio moneda (EUR|USD) “EUR”> <!– valor por defecto EUR-->

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 28


Lenguajes de Marcas y Sistemas de
Elementos. Ocurrencia de aparición. G e s t i ó n d e I n fo r m a c i ó n
En el ejemplo siguiente, se observa el uso de los caracteres más (+) y pleca ( | ). Se ha creado un
XML que almacena componentes electrónicos donde puede aparecer el elemento precio o precio
con IVA (solo uno de los dos). Para ello, se ha añadido (precio | precioiva), que indica que puede
añadirse cualquier elemento que haya en la lista. Por otro lado, el signo + informa de que el
elemento debe aparecer una o más veces.
<!ELEMENT bdcomponentes (componente)+>
<!ELEMENT componente (nombre,(precio|precioiva),tipo+,medida)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT precio (#PCDATA)>
<!ELEMENT precioiva (#PCDATA)>
<!ELEMENT tipo (#PCDATA)>
<!ELEMENT medida (#PCDATA)>

Actividad 5. Crea un documento XML que cumpla con el anterior DTD.

Actividad 6. Modifica el DTD para que permita no enviar el tipo.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 29


Lenguajes de Marcas y Sistemas de
Atributos G e s t i ó n d e I n fo r m a c i ó n
Los atributos en una DTD se usan para enriquecer o añadir información a un elemento, pero su uso
no es muy recomendable, ya que no pueden contener varios valores, no son extensibles, etc. Si un
elemento contiene más de un atributo, se definen uno detrás de otro, separándose mediante
espacios, tabuladores o nuevas líneas. Se declaran usando la marca <!ATTLIST seguida del
elemento que contiene el atributo, su nombre, tipo y valor, tal y como se muestra a continuación.

Donde:
➢ Elemento: es el nombre del elemento al que quiere añadirse un atributo.
➢ Atributo: nombre del atributo por añadir.
➢ Tipo: se selecciona un tipo de atributo.
➢ Valor: comportamiento del valor del atributo.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 30


Lenguajes de Marcas y Sistemas de
Atributos G e s t i ó n d e I n fo r m a c i ó n
Tipos de atributo

Para especificar si los valores de los atributos son obligatorios u opcionales, se usan los
modificadores
• #FIXED atributo obligatorio y debe tener como valor el indicado después de FIXED.
• Ej. <!ATTLIST ejemplo color CDATA #FIXED "verde">
https://www.mclibre.org/consultar/xml/lecciones/xml-
• #IMPLIED El atributo es opcional, se puede omitir.
dtd.html#ddiv-declaracion-atributos
• #REQUIRED El atributo debe aparecer obligatoriamente. https://www.w3schools.com/xml/xml_dtd_attributes.asp
• valor para indicar el valor por defecto

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 31


Lenguajes de Marcas y Sistemas de
Atributos G e s t i ó n d e I n fo r m a c i ó n
En el ejemplo siguiente se aprecia un documento XML con su DTD asociada, donde aparecen dos
atributos obligatorios definidos mediante <!ATTLIST.
<!ELEMENT bdusers (user)+>
<!ELEMENT user (name,email,bornDate)>
<!ATTLIST user
password CDATA #REQUIRED
dni CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT bornDate ANY>

Actividad 7. Crea un documento XML que cumpla con el anterior DTD.

Actividad 8. Modifica el DTD para que la fecha de nacimiento (born date) no tenga contenido y
tenga tres atributos day, month, year .

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 32


Lenguajes de Marcas y Sistemas de
CDATA G e s t i ó n d e I n fo r m a c i ó n
En una DTD, un atributo de tipo CDATA (Character DATA), es aquel cuyo valor puede ser una
cadena de caracteres (texto).
EJEMPLO En la DTD del siguiente documento XML, el atributo pais del elemento "ciudad" ha sido
declarado de tipo CDATA:

Obsérvese que, el valor del atributo pais puede estar vacío.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 33


Lenguajes de Marcas y Sistemas de
Enumeraciones G e s t i ó n d e I n fo r m a c i ó n
En una DTD, se puede declarar un atributo de tipo enumerado indicando que su valor puede ser
uno de los pertenecientes a una lista de valores escritos entre paréntesis "()" y separados por el
carácter "|".
EJEMPLO En la DTD del siguiente documento XML, los valores posibles del atributo pais son "ESP",
"FRA", "ITA" y "ALE":

Véase que, en este caso, se ha especificado "ESP" como


valor por defecto, siendo obligatorio que esté en la lista
de valores escritos entre paréntesis "()".
Si se quiere definir el atributo pais obligatorio, habría
que escribir:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 34


Lenguajes de Marcas y Sistemas de
ID G e s t i ó n d e I n fo r m a c i ó n
En una DTD, los atributos declarados ID son aquellos que solo pueden tomar un valor único (identificador) para
cada elemento. Tienen que empezar por un carácter no numérico y no se puede repetir.

EJEMPLO En la DTD del siguiente documento XML, el atributo código del elemento "f1" ha sido declarado de tipo
ID:
Hay que tener en cuenta que:

Los valores de atributos ID, tienen que cumplir las mismas normas
de sintaxis utilizadas para escribir nombres en XML.

Cada elemento escrito en un documento XML, solo puede tener


un atributo ID.

En un documento XML, no pueden escribirse dos elementos que


tengan el mismo valor en un atributo ID, aunque dicho atributo
sea distinto.

Todo atributo declarado de tipo ID tiene que ser #IMPLIED


(opcional) o #REQUIRED (obligatorio).

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 35


Lenguajes de Marcas y Sistemas de
IDREF G e s t i ó n d e I n fo r m a c i ó n
En una DTD, los atributos declarados IDREF son aquellos cuyo valor tiene que existir en otro atributo ID del
documento XML.

En la DTD del siguiente documento XML, se indica que los elementos "pelicula" que se escriban, deben incluir el
atributo dirección, cuyo valor estará asignado a un atributo ID de otro elemento del documento. En este caso, el
valor estará asignado a un atributo coddir de un elemento "director":

Obsérvese que, por ejemplo, para la película


Titanic se ha indicado en su atributo dirección el
valor "JC", que es el valor del atributo coddir del
director James Cameron.

En este documento XML, el atributo de tipo IDREF


se ha definido obligatorio, #REQUIRED. Pero, a un
atributo IDREF también se le puede especificar un
valor por defecto, un valor fijo o que sea opcional
escribirlo, #IMPLIED.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 36


Lenguajes de Marcas y Sistemas de
NMTOKEN G e s t i ó n d e I n fo r m a c i ó n
En una DTD, los atributos declarados NMTOKEN son aquellos cuyo valor será una cadena de
caracteres, pudiendo contener letras minúsculas, letras mayúsculas, números, puntos ".", guiones
medios "-", guiones bajos "_" o el carácter dos puntos ":".
En la DTD del siguiente documento XML, el atributo clave del elemento "usuario" ha sido declarado
de tipo NMTOKEN:

En el valor de un atributo NMTOKEN no se


pueden escribir espacios en blanco ni
caracteres especiales, tales como: *, $, %, &, ?,
@...

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 37


Lenguajes de Marcas y Sistemas de
NMTOKENS G e s t i ó n d e I n fo r m a c i ó n
En una DTD, los atributos declarados NMTOKENS son aquellos cuyo valor será una cadena de
caracteres, pudiendo contener letras minúsculas, letras mayúsculas, números, puntos ".", guiones
medios "-", guiones bajos "_" o el carácter dos puntos ":“ y también admite espacios en blanco
En la DTD del siguiente documento XML, el atributo clave del elemento "usuario" ha sido declarado
de tipo NMTOKEN:

En el valor de un atributo NMTOKENs no se


pueden escribir caracteres especiales, tales
como: *, $, %, &, ?, @...

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 38


Lenguajes de Marcas y Sistemas de
Entidades G e s t i ó n d e I n fo r m a c i ó n
Las entidades se consideran constantes y pueden usarse para abreviar texto o utilizar algunos
caracteres especiales como el signo de menor que (<) cuya entidad es (&lt;). Pueden clasificarse en
internas y externas (especificando la URL del documento que contiene la entidad). Para crearlas
dentro de un DTD, se usa la marca <!ENTITY> seguida del nombre de la entidad y su valor
asociado, tal y como se muestra a continuación.

La manera de referenciar a una entidad es dentro del documento XML usando el carácter
ampersand (&) que precede al nombre de la entidad terminada en el carácter punto y coma (;).

DTD Entities (w3schools.com)

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 39


Lenguajes de Marcas y Sistemas de
Entidades G e s t i ó n d e I n fo r m a c i ó n
A continuación puedes ver un ejemplo completo de un DTD dentro de un XML.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bdusers[
<!ELEMENT bdusers (user)+>
<!ELEMENT user (nombre,email,event)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT event (#PCDATA)>

<!ENTITY web "http://www.libreriaFP.com">


<!ENTITY client "It is reported that the user has accessed to ">
]>
<bdusers>
<user>
<nombre>Adolfo Gala</nombre>
<email>[email protected]</email>
<event> &client; the visit book in the &web;</event>
</user>
<user>
<nombre>Adolfo Gala</nombre>
<email>[email protected]</email>
<event> &client; the content in the &web; in order to check a book</event>
</user>
</bdusers>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 40


Lenguajes de Marcas y Sistemas de
Entidades G e s t i ó n d e I n fo r m a c i ó n
Al visualizar el ejemplo anterior en un navegador web, podemos comprobar que las entidades han
sido resueltas a su valor:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 41


Lenguajes de Marcas y Sistemas de
Entidades G e s t i ó n d e I n fo r m a c i ó n
Las entidades también pueden ser declaradas en los atributos con ENTITY y serán aquellos cuyo
valor puede ser el nombre de una entidad.

En la DTD del siguiente documento XML, se


indica que los elementos "animal" que se
escriban, tiene que incluir obligatoriamente
el atributo imagen, cuyo valor será una
entidad:
En la DTD de este ejemplo se está indicando
que los valores posibles para el atributo
imagen de la entidad animal son las entidades
ballena o delfin

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 42


Lenguajes de Marcas y Sistemas de Gestión
d e I n fo r m a c i ó n

Asociar DTD en fichero


XML

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 43


Lenguajes de Marcas y Sistemas de
Asociar DTD en fichero XML G e s t i ó n d e I n fo r m a c i ó n
Existen dos maneras de vincular un fichero DTD a un XML.
1. Ubicarlo en el mismo documento XML . La segunda línea del XML será <!DOCTYPE seguida del
elemento raíz y, entre corchetes, los distintos elementos.
2. Usar un fichero externo del mismo servidor o de uno externo.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bdusers[
<!ELEMENT bdusers (user)+>
<!ELEMENT user (name,email,event)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT event (#PCDATA)>

<!ENTITY web "http://www.libreriaFP.com">


<!ENTITY client "It is reported that the user has accessed to ">
]>
<bdusers>
<user>
<nombre>Adolfo Gala</nombre>
<email>[email protected]</email>
<event> &client; the visit book in the &web;</event>
</user>
<user>
<nombre>Adolfo Gala</nombre>
<email>[email protected]</email>
<event> &client; the content in the &web; in order to check a book</event>
</user>
</bdusers>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 44


Lenguajes de Marcas y Sistemas de
Asociar DTD en fichero XML G e s t i ó n d e I n fo r m a c i ó n
Para declarar el DTD en un documento externo, hay que crear dos
ficheros independientes. El primero para la DTD y el segundo para el <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bdusers SYSTEM
XML. Esta es la recomendable por claridad, compartición y
"bdusers.dtd">
manipulación, pues si una DTD se usa para distintos XML y hubiera <bdusers>
que hacer modificaciones, habría que cambiar varios documentos <user>
<name>Adolfo Gala</name>
en vez de uno. <email>[email protected]</email>
</user>
Un DTD en un fichero independiente, tiene que introducir los <user>
<name>Adolfo Gala</name>
distintos elementos que lo forman. En el documento XML, la <email>[email protected]</email>
llamada al DTD se realiza con <!DOCTYPE seguida del elemento </user>
raíz y el nombre del fichero DTD entre comillas.
</bdusers>

Entre el nombre del documento y el elemento raíz, suele ponerse si


la definición es privada (SYSTEM), siendo esta la manera más DTD: Definición de Tipo de
usada o pública (PUBLIC) definida por organismos, lo que obliga a Documento. XML. Bartolomé Sintes
poner un campo más llamado identificador FPI (formal public Marco. www.mclibre.org
identifier). Para ver una definición de DTD independiente, se aprecia
la asociación del DTD en el XML en la segunda línea:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 45


Lenguajes de Marcas y Sistemas de
Uso en VSC-Visual Studio Code G e s t i ó n d e I n fo r m a c i ó n
Al crear en DTD en el fichero xml en visual estudio
code tienes que escribir <!D y el editor de VSC te
ayudará a elegir la forma de referenciarlo. La
primera es para incluirlo en el propio fichero xml

De igual forma podrás obtener ayuda para


elementos, atributos o entidades

Según vas escribiendo las restricciones del DTD verás que se van
eliminando las líneas rojas del XML que van cumpliendo las
restricciones

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 46


Lenguajes de Marcas y Sistemas de
Uso en VSC-Visual Studio Code G e s t i ó n d e I n fo r m a c i ó n

También puedes ver un resumen de la jerarquía a


la izquierda, en outline.

Y hacer Split para ver el dtd y el xml pulsando


con el botón dcho sobre la pestaña

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 47


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 9. Crea un XML con un DTD (en fichero diferente) para enviar y poder ser validado
los siguientes datos
<producto> <code> <description>
ratón 2726543
teclado 5448543 Teclado táctil

Actividad 10. Unos programadores necesitan un formato de fichero para que sus distintos
programas intercambien información sobre ventas. El acuerdo al que han llegado es que su
XML debería tener esta estructura:
El elemento raíz será <listaventas>. Toda <listaventas> tiene una o más <venta>. Toda
<venta> tiene los siguientes datos: Importe. Código de factura. Comprador. Vendedor. Fecha
(optativa y que a su vez contendrá un atributo day, otro month y otro year).
Realizar un fichero XML y el DTD (en ficheros diferentes)

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 48


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 11. Escribir el XML y la DTD que permita modelar los siguientes datos de ventas de una
editorial:
Ediciones Aran
Se deben tener en cuenta las siguientes consideraciones:
da
Informe regional del
ventas • Es obligatorio que el informe lleve una fecha
Descripción: informe de ventas para las regiones Norte, Centro y Sur

Se debe poder diferenciar la parte de la cabecera del informe de


Fecha del informe: 30/12/2009

Region Trimestre Libros Vendidos
Norte 1 24000 la parte con los datos
2 38600
3 NO_INFO • Siempre deben aparecer las tres regiones en el informe, y
4 NO_INFO ninguna más
Centro 1 NO_INFO
2 16080 • Para cada zona deben aparecer siempre los cuatro trimestres,
3 25000
aunque falte la información sobre los libros vendidos
4 29000

Si no se incluye el número de libros vendidos en los datos, en el


Sur 1 27000

2 31400
3 40100 informe aparecerá la cadena NO_INFO
4 30000
• El número de trimestre sólo puede tomar los valores 1, 2, 3 o 4

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 49


Lenguajes de Marcas y Sistemas de
Ampliaciones G e s t i ó n d e I n fo r m a c i ó n

Espacio de nombres: XML Namespaces (w3schools.com)

Mostrar XML : XML Display (w3schools.com)


XML con CSS: xml (aprende-web.net)

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 50


Lenguajes de Marcas y Sistemas de Gestión
d e I n fo r m a c i ó n

XML Schema Definition


XSD
https://www.w3schools.com/xml/schema_intro.asp
https://www.abrirllave.com/xsd/validacion-de-un-documento-
xml-con-xsd.php

https://www.freeformatter.com/xml-validator-xsd.html

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 51


Lenguajes de Marcas y Sistemas de
XSD G e s t i ó n d e I n fo r m a c i ó n
El lenguaje XML Schema o XSD (XML schema definition) surgido en 1998 y se usa como
alternativa a documentos DTD, al no cubrir este las expectativas que se necesitan, ya que no
permite especificar tipos de elementos o atributos más complejos, así como añadir otras
restricciones más complejas. Entre las ventajas que presenta, destacan:
➢ Más definición de tipos básicos.
➢ Mayor control sobre el número de ocurrencias de los elementos.
➢ Sintaxis similar a XML.
Los XML Schema son ficheros planos con extensión .xsd que permiten definir los elementos y
atributos que componen un XML, así como sus tipos, el orden de aparición, el número de veces
que puede repetirse cada elemento, valores por defecto, etc.
Para ver como puedes asociar un fichero xml para que sea validado por un xsd puedes ver esta
transparencia

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 52


Lenguajes de Marcas y Sistemas de
XSD. Creación y elementos G e s t i ó n d e I n fo r m a c i ó n
La estructura de todo documento XSD es similar a la de un XML, pero presentando el elemento raíz
<xs:schema>. Dicho elemento contiene una serie de atributos, entre los que destacan los siguientes:
➢ xmlns:alias. Se especifica el espacio de nombres de donde provienen los elementos y tipos
usados, cuyo valor tiene que ser "http://www.w3.org/2001/XMLSchema". El alias suele ser xs o
xsd, aunque, mientras se use la misma en todo el documento, no importa el nombre que se le
asigne. Hacen referencia a las etiquetas del espacio de nombres.
➢ elementFormDefault. A la hora de declarar los elementos, hay que indicar si debe añadirse el
espacio de nombres delante. Si hay que añadirlo se indica "qualified" y sino "unqualified".
➢ attributeFormDefault. A la hora de declarar los atributos, hay que indicar si debe añadirse el
espacio de nombres delante. Si hay que añadirlo se indica "qualified" y sino y sino "unqualified",
que indica que el primero de ellos debe ser obligatorio. Por defecto, se usa la segunda opción.
➢ targetNamespace. Se especifica el espacio de nombres de los elementos definidos.
➢ version. Se especifica la versión del documento de esquema.

https://www.w3schools.com/xml/schema_schema.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 53


Lenguajes de Marcas y Sistemas de
XSD. Creación y elementos G e s t i ó n d e I n fo r m a c i ó n
Aunque no es obligatorio, la primera línea del .xsd puede ser la declaración del XML.
En la segunda, tal y como se muestra a continuación, se define el esquema, con la especificación
de los distintos elementos. El alias en este caso es xs.
Formato básico después de la declaración de xml
<xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema”>
Elementos
</xs:schema>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 54


Lenguajes de Marcas y Sistemas de
XSD. Creación y elementos G e s t i ó n d e I n fo r m a c i ó n
Elementos. Puede realizarse una distinción entre los tipos de elementos de un XSD. Están los
elementos simples (de tipo simple; decimal, string, date, etc.) y complejos (se describe en detalle su
estructura de tipo)

Elementos Simples. Elementos sin hijos ni atributos o simples se definen con la marca <xs:element
NOMBRE TIPO VALOR OCURRENCIAS>, conteniendo solamente valores de un determinado tipo.
• NOMBRE: se representa mediante el atributo name, asignándole el valor que se desee.
• TIPO: se usa el atributo type, que permite especificar el tipo de elemento (ver cuadro tipo de datos).
• VALOR: puede ser un valor por defecto (default) que permite ser modificado o un valor fijo
obligatorio (fixed) que no podrá cambiarse. Cada uno de ellos irá acompañado de su
correspondiente asignación.
• OCURRENCIAS: número de veces que se repite el elemento, se define con los atributos maxOccurs y
minOccurs

https://www.w3schools.com/xml/schema_simple.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 55


Lenguajes de Marcas y Sistemas de
XSD. Creación y elementos G e s t i ó n d e I n fo r m a c i ó n
Elementos Complejos. Contienen otros elementos y atributos. Dependiendo del contenido, pueden darse
ejemplos de elementos con hijos, con contenido vacío y atributos, con contenido no vacío y atributos, entre otros.
Se definen con el tipo de datos <xs:complexType>, seguido de un indicador de orden y elementos (simples o
complejos), que puede variar dependiendo del contenido que tenga.

https://www.w3schools.com/x
ml/schema_complex.asp

<xs:complexType>: se usa para definir elementos de tipo complejo.


Indicador_Orden: en este apartado, hay que especificar un indicador de orden de aparición de los distintos
elementos, que puede ser tres distintos:
1. <xs:sequence>: se especifican los hijos del elemento principal, siguiendo la secuencia u orden de aparición
indicada. Cada elemento aparece de 0 a n veces.
2. <xs:choice>: se especifica el elemento hijo que puede aparecer de entre todos. Solo uno de ellos.
3. <xs:all>: los hijos pueden aparecer en cualquier orden una sola vez, la secuencia aparecerá en el orden que
se desee.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 56


Lenguajes de Marcas y Sistemas de
XSD. Creación y elementos G e s t i ó n d e I n fo r m a c i ó n
En el siguiente ejemplo, se declara un XSD con elementos complejos en secuencia <xs:sequence> :
nombre, email y fechaNac, en ese orden. Vemos el uso de referencia, con el atributo ref, y cuyo
valor es el nombre del elemento situado en la parte inferior, donde se especifica el tipo.

Un XML correcto (por el orden) sería: :

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 57


Lenguajes de Marcas y Sistemas de
XSD. Creación y elementos G e s t i ó n d e I n fo r m a c i ó n
En esta segunda captura vemos que también se puede definir directamente usando el elemento
simple.

Un XML incorrecto sería:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 58


Lenguajes de Marcas y Sistemas de
XSD. Creación y elementos G e s t i ó n d e I n fo r m a c i ó n
En el siguiente ejemplo, se declara un XSD con elementos complejos a elección <xs:choice>.
Permite especificar uno de los elementos hijos que aparecen, pero solo uno de ellos.

Un XML correcto sería: Un XML incorrecto sería:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 59


Lenguajes de Marcas y Sistemas de
XSD. Creación y elementos G e s t i ó n d e I n fo r m a c i ó n
En el siguiente ejemplo, se declara un XSD con elementos complejos mediante <xs:all>. Permite
especificar la secuencia de elementos en cualquier orden
Un XML correcto sería:

Un XML incorrecto sería:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 60


Lenguajes de Marcas y Sistemas de
XSD. Tipos de datos G e s t i ó n d e I n fo r m a c i ó n
XSD dispone de numerosos tipos de datos simples predefinidos incorporados para los elementos o
atributos, siendo los más comunes los que se observan en el siguiente cuadro:

https://www.w3schools.com/xml/sch
ema_dtypes_string.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 61


Lenguajes de Marcas y Sistemas de
XSD. Tipos de datos simples personalizados G e s t i ó n d e I n fo r m a c i ó n
En ocasiones, es interesante crear tipos de datos nuevos personalizados, dotándolos de mayor
precisión y eficiencia. Estos pueden ser asignados a elementos o atributos, siendo reutilizados en
el esquema XSD.
Para definir un tipo simple nuevo, se usa la siguiente estructura <xs:simpleType> cuyo atributo
name servirá para asignárselo al elemento e indicar que es de un tipo simple nuevo.
Dentro de un tipo simple, pueden añadirse restricciones o facetas, listas, uniones, etc. La sintaxis
puede apreciarse en el ejemplo siguiente:

https://www.w3schools.com/xml/el_simpletype.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 62


Lenguajes de Marcas y Sistemas de
XSD. Tipos de datos complejos G e s t i ó n d e I n fo r m a c i ó n
Igual que con los elementos simples, también podemos crear tipos complejos de forma que
podamos reutilizarlos como tipo en diferentes partes de un XSD asignándole un name

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 63


Lenguajes de Marcas y Sistemas de
XSD. Indicador de ocurrencias G e s t i ó n d e I n fo r m a c i ó n
Los atributos minOccurs y maxOccurs permiten añadir el número mínimo y máximo de apariciones
de un elemento
minOccurs : número mínimo de veces que debe aparecer el elemento. Por defecto es 1. Si se
utiliza <all> debe valer 0 o 1,
maxOccurs: número máximo de veces que debe aparecer el elemento. Por defecto es 1. Se utiliza
“unbounded” para ilimitado. Si se utiliza <all> debe valer 1
Ejemplo
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 64


Lenguajes de Marcas y Sistemas de
XSD. Atributos G e s t i ó n d e I n fo r m a c i ó n
Poseen la misma funcionalidad que los atributos de un elemento DTD. Se declaran después del elemento al
que pertenecen. Los elementos con atributos se consideran elementos complejos, declarándose como tipos
simples. Intentan dotarlos de más información usando la siguiente sintaxis <xs:attribute NOMBRE TIPO
USO VALOR>. Existe la posibilidad, al igual que en los elementos, de añadir restricciones a sus tipos.

➢ NOMBRE: se representa mediante el atributo name, asignándole el valor que se desee.

➢ TIPO: se usa el atributo type, que permite especificar el tipo de elemento.

➢ USO: se especifica la opcionalidad o no del atributo mediante el atributo use, que puede tener los valores:
"prohibited", que indica que es prohibido; "required" para indicar que es obligatorio, y "optional", que
informan de que es opcional y es el valor por defecto.

➢ VALOR: puede ser un valor por defecto (default) o un valor fijo u obligatorio (fixed) con su
correspondiente asignación.

https://www.w3schools.com/xml/schema_simple_attributes.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 65


Lenguajes de Marcas y Sistemas de
XSD. Extension G e s t i ó n d e I n fo r m a c i ó n
Con frecuencia puede ser necesario añadir en un XML un atributo a un elemento que contiene un
valor, por ejemplo
Con extensión podemos ampliar la definición de un simpleType o un complexType. Para
nuestro caso será necesario crearnos un ComplexType, ya que tiene un atributo, pero a la vez
definir un simpleContent con su extensión y el atributo

https://www.w3schools.com/xml/el_extension.asp
https://www.w3schools.com/xml/el_simplecontent.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 66


Lenguajes de Marcas y Sistemas de
XSD. Restricciones G e s t i ó n d e I n fo r m a c i ó n
Si quisiera ponerse una restricción (también
llamadas facetas) a un atributo o elemento,
hasta ahora, con DTD no podía especificarse.
XML Schema permite especificar esta
característica controlando en mejor medida
los datos introducidos en el XML.
Para definir restricciones se puede utilizar
xs:complexContent:
https://www.w3schools.com/xml/el_complexcontent.
asp

https://www.w3schools.com/xml/schema_facets.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 67


Lenguajes de Marcas y Sistemas de
XSD. Restricciones G e s t i ó n d e I n fo r m a c i ó n
Veamos las restricciones en base al siguiente ejemplo que almacena datos relativos a varios
productos.
XML: XSD:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 68


Lenguajes de Marcas y Sistemas de
XSD. Restricciones G e s t i ó n d e I n fo r m a c i ó n
Restricciones numéricas. Si desea especificarse que el descuento puede tener el valor entre 1 y 10,
ambos incluidos, va a crearse un tipo simple llamado ndescuento, que permite introducir descuentos
con el rango de valores [1..10]. Si, en el XML, se introduce en ese elemento un contenido no
perteneciente al rango, estará bien formado, pero no será válido. Lo primero es crear un tipo simple
con una restricción. Para añadir una restricción, se usa el elemento xs:restriction, que define las
restricciones del tipo. Dispone de un atributo base, que indica el tipo de datos.

El código tendrá una longitud entre 1 y 4 definida por el tipo Tlongitudentre. Y el precio tenga un
total de 4 dígitos y hasta 2 decimales, definidos por el tipo Tdecimal

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 69


Lenguajes de Marcas y Sistemas de
XSD. Restricciones G e s t i ó n d e I n fo r m a c i ó n
Restricciones de longitud del contenido. Como tal no viene en el ejemplo pero podríamos
definir que un elemento tiene que tener una longitud de 4 y definimos el tipo Tlongitud

Restricciones de enumeración. Como tal no viene en el ejemplo pero podríamos definir que un
elemento solo pudiera tomar un conjunto de valores concreto, en cuyo caso definiríamos un tipo
Tcat

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 70


Lenguajes de Marcas y Sistemas de
XSD. Restricciones G e s t i ó n d e I n fo r m a c i ó n
Restricciones mediante expresiones regulares o patrones. Otra manera de presentar el ejemplo
anterior es mediante el uso de patrones, donde el valor permitido es uno de los del rango de
valores permitidos. Algunas de las expresiones regulares o patrones que pueden incluirse son:
➢ [0-9]: número del al 9.
➢ [a-z]: letra minúscula perteneciente a ese intervalo.
➢ [A-Z]: letra mayúscula perteneciente a ese intervalo.
➢ [aeiou]: un carácter de los que aparecen entre los corchetes.
➢ [^aeiou]: un carácter que no aparezca entre corchetes.
➢ {X}: las llaves indican que tiene que repetirse X veces el contenido que haya delante.

Para más info y practicar visitad la web https://regexr.com

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 71


Lenguajes de Marcas y Sistemas de
Documentación de esquemas G e s t i ó n d e I n fo r m a c i ó n
La creación de un esquema puede ser algo complejo, por lo que introducir datos relacionados con
la autoría, utilidad, derechos de autor, etc., es un aspecto que ha de tenerse en cuenta. Podría
pensarse que, con poner comentarios, valdría, pero existen elementos destinados a tal fin. Si
necesita dotarse de información a los esquemas para que pueda ser consultada por otros usuarios,
se usan las siguientes instrucciones:
➢ xs:annotation: especifica los comentarios dentro de un esquema que actúan como
documentación de este. Tiene un atributo opcional (id) y dos elementos hijos (appinfo o
documentation).
➢ xs:appinfo: se usa para especificar la información de la aplicación. Tiene un atributo opcional
(source).
➢ xs:documentation: añade comentarios en un esquema. Tiene dos atributos opcionales (source
y xml:lang).

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 72


Lenguajes de Marcas y Sistemas de
Asociación XSD en XML G e s t i ó n d e I n fo r m a c i ó n
La asociación de un documento XSD a uno XML se realiza mediante un espacio de nombres con
una serie de atributos:
➢ xmlns: definir el espacio de nombres, indicando que van a usarse los elementos definidos en la
URL especificada. Los elementos del esquema llevarán el prefijo que se defina, en este caso, será
xsi: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Las referencias a los esquemas pueden realizarse mediante los siguientes atributos:
➢ noNamespaceSchemaLocation: se emplea cuando no se utilizarán espacios de nombres en el
documento. Se usará un fichero con el esquema:
xsi:noNamespaceSchemaLocation="personas.xsd">
➢ schemaLocation: se emplea cuando se utilizan explícitamente los nombres de los espacios de
nombres en las etiquetas.

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


xsi:noNamespaceSchemaLocation="personas.xsd">

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 73


Lenguajes de Marcas y Sistemas de
Asociación XSD en XML G e s t i ó n d e I n fo r m a c i ó n
Tal y como se aprecia en el ejemplo siguiente, el documento XML de bases de datos de alumnos
hace referencia a un fichero de espacio de nombres previamente creado, xsdalumnos.xsd, el cual
servirá para que sea validado el XML. Para referenciar el fichero xsd se puede utilizar
xsi:schemaLocation si usas un namespace; o
xsi:noNamespaceSchemaLocation si no usas no
namespace

https://www.w3schools.com/xml/schema_example.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 74


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 12. Diseña el esquema XSD para el siguiente archivo XML con las siguientes
consideraciones:
• El elemento número será un entero
entre 1 y 500.
• El elemento teléfono será un entero y
dicho elemento podrá aparecer entre 0 y
5 veces.
• El atributo dni será una plantilla de 8
números y una letra mayúscula.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 75


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 13. Diseña el esquema XSD para el siguiente archivo XML con las siguientes
consideraciones:
• Como primer elemento de helado podemos elegir, o bien
chocolate, o bien fresa (pero no los dos al mismo tiempo).
Estos elementos almacenarán la cantidad en gramos (como
un número entero entre 0 y 1000).

• Como segundo elemento de helado se podrá elegir uno de


los siguientes vainilla, turrón o nata. Estos elementos
almacenarán la cantidad en gramos (como un número
entero entre 0 y 1000).

• El atributo fabricación indicará la fecha en la que se fabricó


el mismo mediante el tipo de dato fecha.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 76


Lenguajes de Marcas y Sistemas de
G e s t i ó n d e I n fo r m a c i ó n
Actividad 14 Escribir un XML Schema para el siguiente documento XML, e incluir los cambios necesarios en el mismo para referenciar al esquema
creado.

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


<matricula>
<personal>
<dni>99223366M</dni>
<nombre>Juan Pardo Martín</nombre>
<titulacion>Ingeniería Informática</titulacion>
<curso_academico>1997/1998</curso_academico>
<domicilios>
<domicilio tipo="familiar">
<nombre>C/ Principal nº1</nombre>
</domicilio>
<domicilio tipo="habitual">
<nombre>C/ Secundaria nº2</nombre>
</domicilio>
</domicilios>
</personal>
<pago>
<tipo_matricula>Matrícula Ordinaria</tipo_matricula>
</pago>
</matricula>

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 77


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 15. Definir un XML schema que valide este documento, teniendo en cuenta
las siguientes características:
• El número de factura (n_fac), número de cliente (n_cli) y número de pedido (n_ped)
son del tipo “tipoID”, que se define como un entero positivo de 4 cifras. Estos atributos
son obligatorios. No tienen por qué ser únicos dentro del documento.
• Los números de teléfono (telefono) y fax (fax) de la empresa no tienen porqué
aparecer en la factura, pero siempre que lo hagan deberán tener los mismos valores
(teléfono 917776688, fax 917776699).
• La forma de pago puede tomar los valores “efectivo”, “tarjeta” y “plazos”.
• El elemento fecha es de tipo “date”.
• La moneda tiene que aparecer siempre, y siempre toma el valor “euro”.
• El iva tiene que aparecer siempre, y su valor no puede contener caracteres especiales.
• Las referencias de los artículos son cadenas de entre 5 y 15 caracteres.
• Las descripciones de los artículos son cadenas entre 1 y 100 caracteres.
• Los precios son números reales con un máximo de 5 cifras enteras y 2 decimales.
• Todos los demás valores de tipo real están limitados a 2 cifras decimales.
• Los códigos postales tienen 5 dígitos.
• El porcentaje de iva es un número entero positivo de 2 cifras.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 78


Lenguajes de Marcas y Sistemas de Gestión
d e I n fo r m a c i ó n

JavaScript Object
Notation
JSON https://www.w3schools.com/js/js_json.asp

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 79


Lenguajes de Marcas y Sistemas de
JSON G e s t i ó n d e I n fo r m a c i ó n
Se trata de un formato para guardar e intercambiar información que cualquier persona pueda leer.
Los archivos json contienen solo texto y usan la extensión .json.
JSON es un formato que almacena información estructurada y se utiliza principalmente para
transferir datos entre un servidor y un cliente.
El archivo es básicamente una alternativa más simple y liviana al XML (Lenguaje de marcado
extenso, por sus siglas en inglés) que cuenta con funciones similares.
Los desarrolladores usan JSON para trabajar con AJAX (JavaScript asíncrono y XML, por sus siglas
en inglés). Estos formatos funcionan bien juntos para lograr la carga asincrónica de los datos
almacenados, lo que significa que un sitio web puede actualizar su información sin actualizar la
página.
Este proceso es más fácil de hacer con JSON que con XML/RSS. Y, como muchos sitios web han
adoptado AJAX, los archivos .json se han vuelto muy populares.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 80


Lenguajes de Marcas y Sistemas de
Sintaxis G e s t i ó n d e I n fo r m a c i ó n
Un archivo .json, tiene una sintaxis correcta, básicamente hay dos elementos centrales en un objeto
JSON: claves (Keys) y valores (Values).
➢ Las Keys deben ser cadenas de caracteres (strings). Estas contienen una secuencia de caracteres
rodeados de comillas.
➢ Los Values son un tipo de datos JSON válido. Puede tener la forma de un arreglo (array),
objeto, cadena (string), booleano, número o nulo.
Un objeto JSON comienza y termina con llaves {}. Puede tener dos o más pares de claves/valor
dentro, con una coma para separarlos. Así mismo, cada key es seguida por dos puntos para
distinguirla del valor.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 81


Lenguajes de Marcas y Sistemas de
Tipos de valores G e s t i ó n d e I n fo r m a c i ó n
Strings. Un string (conocido en español como cadena de caracteres) es una secuencia establecida
de cero o más caracteres Unicode. Está encerrado entre dos comillas dobles.

Objeto. Un objeto contiene una clave y uno o varios atributos que se encierran entre llaves y
constituyen, en conjunto, el valor. Hay dos puntos después de cada clave y una coma después de
cada valor, excepto del último.
El objeto, como valor, debe seguir la misma regla que un objeto común. Ejemplo:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 82


Lenguajes de Marcas y Sistemas de
Tipos de valores G e s t i ó n d e I n fo r m a c i ó n
Número. El número en JSON debe ser un número entero o un punto flotante (23.45) , como:

Booleano. Puedes usar true o false como valor, de la siguiente manera:

Nulo. Es para mostrar que no hay información. El literal es null

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 83


Lenguajes de Marcas y Sistemas de
Tipos de valores G e s t i ó n d e I n fo r m a c i ó n
Arrays. Un array (en español conocido como arreglo o vector) es una colección ordenada de
valores. Está rodeado de corchetes [] y cada valor de objeto se pone entre llaves y separa del
siguiente por una coma. El último no lleva coma al final. Los valores internos de los atributos del
objeto serán pares clave- valor separados por coma.
Un valor de un array puede contener objetos JSON, lo que significa que utiliza el mismo concepto
de par clave/valor. Por ejemplo:

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 84


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 16. Crea una estructura JSON para enviar los siguientes datos.

product code description


mouse 2726543
keyboard 5448543 Magic keyboard

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 85


Lenguajes de Marcas y Sistemas de
Actividades G e s t i ó n d e I n fo r m a c i ó n

Actividad 17. Dadas las siguientes entidades. Como sería el JSON que se crearía, si quisiéramos
enviar la instancia de la clase Usuario utilizando un JSON.

Utilizad valores inventados para todos los campos. Para las listas usad al menos dos elementos.

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 86


Lenguajes de Marcas y Sistemas de
JSON transformado a otros lenguajes G e s t i ó n d e I n fo r m a c i ó n
Instala el plugin Paste JSON as Code (que incluye
quicktype) en VSC
Abre un fichero json y después utiliza CTRL+MAY+P para
acceder a la ventana de comandos
Utiliza CTRL+MAY+P para elegir Set quicktype target
language y elige el lenguaje de programación (java)
Aparecerá una ventana con el código en java

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 87


Lenguajes de Marcas y Sistemas de
Ampliaciones G e s t i ó n d e I n fo r m a c i ó n
Procesamiendo de json en java
Con Jackson: https://www.arquitecturajava.com/java-json-con-jackson/
https://elbauldelprogramador.com/como-mapear-json-a-objetos-java-con-jackson-objectmapper/
Con Google GSON: https://jarroba.com/gson-json-java-ejemplos/
Jackson vs Gson | Baeldung

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 88


Lenguajes de Marcas y Sistemas de
Ampliaciones G e s t i ó n d e I n fo r m a c i ó n
Crea un proyecto Maven (simple Project) y añade la public class EscribirArrayJSON {
dependencia: public static void main(String[] args) throws
<dependency> URISyntaxException {
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> ObjectMapper mapper = new ObjectMapper();
<version>2.14.2</version> Persona pv[]=new Persona[2];
</dependency> pv[0] = new Persona("Jose Manuel", "Perez", 20);
pv[1] = new Persona("Ana", "Gomez", 30);
try {
File fichero = new File("persona2.json");
fichero.createNewFile();
mapper.writeValue(fichero, pv);
} catch (IOException e) {
e.printStackTrace();
}
}
}

I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 89


Lenguajes de Marcas y Sistemas de
Ampliaciones G e s t i ó n d e I n fo r m a c i ó n
public class Leer2JSON {
public static void main(String[] args) throws URISyntaxException {
LectorJSON lector = new LectorJSON();
File fichero = new File("persona2.json");

System.out.println(fichero);
ObjectMapper mapper = new ObjectMapper();
try {
ArrayList<Persona> personas = mapper.readValue(fichero,
mapper.getTypeFactory().constructCollectionType(
ArrayList.class, Persona.class));
System.out.println(personas.get(0).getNombre());
System.out.println(personas.get(0).getApellidos());
System.out.println(personas.get(0).getEdad());
System.out.println("persona 2");
System.out.println(personas.get(1).getNombre());
System.out.println(personas.get(1).getApellidos());
System.out.println(personas.get(1).getEdad());
} catch (IOException e) {
e.printStackTrace();
}
}
}
I.E.S. Luis Vives - Desarrollo de Aplicaciones Web 90

También podría gustarte