Está en la página 1de 57

LENGUAJE DE MARCAS

XML
Información recopilada de W3SCHOOLS

Autor: Alejandro Rodríguez Rey

I
Alejandro Rodríguez Rey
UD 1. HISTORIA DE INTERNET
1945 MEMEX (Dispositivo fotoeléctrico) – Vannevar Bush

1958 ARPA (Advance Research Projects Agency)

1961 Articulo conmutación paquetes – Leonard Kleinrock

1964 Libro conmutación paquetes y redes – Leonard Kleinrock

1965 Termino HIPERTEXTO – Ted Nelson

1966 Comienza diseño ARPANET – Lawrence Roberts

1967 HES (Primer sistema de hipertexto) – Andy van Dam

1969 FRESS (Mejora del sistema de hipertexto) – Andy van Dam

Primer IMP (Interface Message Processor)

Primer nodo ARPANET – L.A.

Segundo nodo – Stanford

Tercer nodo – Santa Barbara

Cuarto nodo – Utah

1970 NCP (Network Control Protocol)

1971 15 nodos

1972 Demostración pública de ARPANET – Washington

Primer programa de eMail

37 nodos

1973 Primera conexión internacional ARPANET – Noruega y Londres

1974 TCP (Protocolo de interconexión de redes) – Vinton Cerf

Termino Internet

1978 TCP/IP (TCP: Extremo a extremo/IP: Direccionamiento)

1983 ARPANET (68 nodos civiles) y MILNET (45 nodos militares)

Obligatorio protocolo TCP/IP

1989 Informe interno CERN – Tim Berners-Lee

1990 Primer navegador y editor gráfico de hipertexto (para NeXTStep OS) – Tim Berners-Lee

Primer servidor web y página web – CERN


II
Alejandro Rodríguez Rey
1991 HTML 1 – Tim Berners-Lee

Seminario WWW – CERN

Se publica en Internet el primer navegador

Primer servidor web fuera de Europa – Stanford

1993 Propuestas HTML y HTML+ – IETF (Internet Engineering Task Force)

NCSA Mosaic (Navegador gráfico)

1994 NCSA Mosaic forma compañía que pasará a llamarse Netscape (lanza Netscape Navigator)

W3C (World Wide Web Consortium)

1995 HTML 2 – IETF

Sun Microsystems anuncia Java, Netscape lo soporta con applets

Windows 95 e Internet Explorer

1997 HTML 3 – W3C

1999 HTML 4

2000 XHTML 1 – W3C

2014 HTML 5

HTML (HyperText Markup Language)

XML  (eXtensible Markup Language)

SVG  (Scalable Vector Graphics)

MathML

FECHAS IMPORTANTES  1961, 66, 65, 69

1970, 72, 73, 74, 78

1983

1990, 91, 94, 95

2000, 2015

NOMBRES IMPORTANTES  Leonard Kleinrock

Ted Nelson

Lawrence Roberts

Vinton Cerf

Tim Berners-Lee
III
Alejandro Rodríguez Rey
UD 2. XML
XML significa eXtensible Markup Language.

XML fue diseñado para almacenar y transportar datos.

XML fue diseñado para ser a la vez legible por máquinas y humanos.

XML juega un papel importante en muchos sistemas de IT diferentes.

XML se utiliza a menudo para la distribución de datos a través de Internet.

Es importante (para todo tipo de desarrolladores de software!) tener una buena comprensión de XML.

Normas XML importantes


 AJAX XML
 DOM XML
 XML XPath
 XML XSLT
 XML XQuery
 DTD XML
 XML Schema
 XML Services

Introducción a XML

XML es una herramienta (independiente de software y hardware) para almacenar y transportar datos.

¿Qué es XML?
 XML significa eXtensible Markup Language
 XML es un lenguaje de marcas muy similar a HTML
 XML fue diseñado para almacenar y transportar datos
 XML fue diseñado para ser auto-descriptivo

XML no hace nada


Tal vez es un poco difícil de entender, pero XML no hacer nada, es sólo información envuelta en las etiquetas.

Alguien tiene que escribir una pieza de software para enviar, recibir, almacenar o mostrarlo.

IV
Alejandro Rodríguez Rey
La diferencia entre XML y HTML
XML y HTML fueron diseñados con diferentes objetivos:

 XML fue diseñado para transportar datos - enfocado en que datos son
 HTML fue diseñado para mostrar datos - enfocado en el aspecto de los datos
 Las etiquetas XML no están predefinidas

XML no utiliza las etiquetas predefinidas


El lenguaje XML no contiene etiquetas predefinidas.

Estas etiquetas son "inventadas" por el autor, se deben definir tanto las etiquetas como la estructura del documento.

XML es extensible
La mayoría de las aplicaciones XML funcionarán como se espera, incluso si se añaden nuevos datos (o eliminan).

XML simplifica las cosas


 Se simplifica el intercambio de datos
 Simplifica el transporte de datos
 Simplifica cambios de plataforma
 Simplifica la disponibilidad de datos

Muchos sistemas informáticos contienen datos en formatos incompatibles. El intercambio de datos entre sistemas incompatibles (o
sistemas actualizados) es una tarea que consume tiempo para los desarrolladores web. Grandes cantidades de datos se deben
convertir, y datos incompatibles a menudo se pierden.

XML almacena los datos en formato de texto plano. Esto proporciona una forma de almacenamiento independiente de software y
hardware, así como de transportar y compartir datos.

XML también hace que sea más fácil de ampliar o actualizar a los nuevos sistemas operativos, nuevas aplicaciones o nuevos
navegadores, sin perder datos.

Con XML, los datos pueden estar disponibles para todo tipo de "máquinas de lectura", personas, ordenadores, máquinas de voz...

¿Cómo se utiliza XML?

XML se utiliza en muchos aspectos del desarrollo web.

XML se utiliza a menudo para separar los datos de la presentación.

V
Alejandro Rodríguez Rey
XML separa los datos de presentación
XML no lleva ninguna información sobre como mostrarse.

Los mismos datos XML se pueden utilizar en escenarios muy diferentes.

Debido a esto, con XML, hay una separación completa entre los datos y la presentación.

XML es a menudo un complemento a HTML


En muchas aplicaciones HTML, XML se utiliza para almacenar o transportar datos, mientras que se utiliza HTML para dar
formato y mostrar los mismos datos.

XML separa los datos de HTML


Cuando se muestran los datos en HTML, no deberías tener que editar el archivo HTML cuando cambian los datos.

Con XML, los datos pueden ser almacenados en archivos XML separados.

Con unas pocas líneas de código JavaScript, se puede leer un archivo XML y actualizar el contenido de cualquier página HTML.

Datos de la transacción
Existen miles de formatos XML, en muchas industrias diferentes, para describir las transacciones de datos del día a día:

 Acciones y participaciones
 Transacciones financieras
 datos médicos
 datos matemáticos
 mediciones científicas
 Noticias
 Los servicios meteorológicos

Ejemplo: XMLNews
XMLNews es una especificación para el intercambio de noticias y otra información.

Ejemplo: Servicio Meteorológico XML


Un servicio meteorológico nacional XML de la NOAA (National Oceanic and Atmospheric Administration):

XML Tree

Los documentos XML forman una estructura de árbol que comienza en "la raíz" y ramifica hasta "las hojas".

VI
Alejandro Rodríguez Rey
Estructura de árbol XML
Los documentos XML se forman como árboles de elementos.

Todos los elementos pueden tener sub-elementos (elementos secundarios).

Los padres tienen hijos. Los hijos tienen padres. Los hermanos son hijos en el mismo nivel.

Todos los elementos pueden tener un contenido de texto y atributos.

Sintaxis auto-descriptiva
Un prólogo define la versión de XML y la codificación de caracteres:

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

La siguiente línea es el elemento raíz del documento:

<bookstore>

La siguiente línea comienza un elemento <libro>:

<book category="cooking">

Los elementos <libros> tienen 4 elementos secundarios: <title>, <autor>, <año>, <precios>.

<title lang="en">Everyday Italian</title>


<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>

La siguiente línea termina el elemento de libro:

</book>

Se puede suponer, a partir de este ejemplo, que el documento XML contiene información sobre los libros en una librería.

XML Reglas de sintaxis

Las reglas de sintaxis de XML son muy sencillas y lógicas.

Las reglas son fáciles de aprender y fáciles de usar.

VII
Alejandro Rodríguez Rey
Los documentos XML deben tener un elemento raíz
Los documentos XML deben contener un elemento raíz que es el padre de todos los demás elementos:

<root>
<child>
<subchild>.....</subchild>
</child>
</root>

El XML Prolog
Esta línea se llama prólogo:

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

El prólogo XML es opcional. Si existe, tiene que venir al principio del documento.

Los documentos XML pueden contener caracteres internacionales.

Para evitar errores, se debe especificar la codificación utilizada, o guardar los archivos XML con la codificación UTF-8
(codificación por defecto).

UTF-8 es también la codificación predeterminada para HTML 5, CSS, JavaScript, PHP y SQL.

Todos los elementos XML deben tener una etiqueta de cierre


<br></br>
<br />

Nota: El prólogo XML no tiene una etiqueta de cierre! Esto no es un error. El prólogo no es una parte del documento XML.

Las etiquetas XML distinguen entre mayúsculas y minúsculas


La etiqueta <letra> es diferente de la etiqueta <Letra>.

"Etiquetas de apertura y cierre" se llaman a menudo "etiquetas de inicio y fin".

Elementos XML deben estar correctamente anidados


En HTML se pueden ver elementos incorrectamente anidados, en XML todos los elementos deben estar correctamente anidados
unos dentro de otros:

<b><i>This text is bold and italic</b></i>

<b><i>This text is bold and italic</i></b>

En el ejemplo anterior, "anidados correctamente" significa que, si la <i> se abre en el interior del elemento <b>, debe estar cerrada
en el interior del elemento <b>.

VIII
Alejandro Rodríguez Rey
Los atributos deben siempre ser citados “”
<note date="12/11/2007">
<to>Tove</to>
</note>

Referencias de la entidad (Caracteres especiales)


Hay 5 predefinidos:

&lt; < less than

&gt; > greater than

&amp; & ampersand

&apos; ' apostrophe

&quot; " quotation mark

Sólo < y & son estrictamente ilegales en XML.

Los comentarios en XML


La sintaxis para escribir comentarios en XML es similar a la de HTML:

<!-- This is a comment -->

Doble guión en el medio de un comentario no está permitido:

<!-- This is an invalid -- comment -->

El “espacio en blanco” se conserva en XML


XML no trunca múltiples espacios en blanco (HTML trunca múltiples espacios en blanco a un solo espacio en blanco).

XML almacena nueva línea como LF


Las aplicaciones de Windows almacenan una nueva línea como: retorno de carro y avance de línea (CR + LF).

Unix y Mac OS X utiliza LF.

Los viejos sistemas Mac utiliza CR.

XML almacena una nueva línea como LF.

IX
Alejandro Rodríguez Rey
XML bien formado
Los documentos XML que se ajustan a las reglas de sintaxis anteriores se dice que están "bien formados".

Elementos XML

¿Qué es un elemento XML?


Un elemento XML es todo, desde (incluyendo) la etiqueta de inicio del elemento hasta (incluyendo) la etiqueta de final del elemento.

Un elemento puede contener:

 texto
 atributos
 otros elementos
 o una mezcla de los anteriores

Elementos XML vacíos


Un elemento sin contenido se dice que está vacío.

<element></element>

<element />

Los elementos vacíos pueden tener atributos.

Reglas de nomenclatura XML


Los elementos XML deben seguir estas reglas de denominación:

 Distinguen entre mayúsculas y minúsculas


 Deben comenzar con una letra o un guión bajo
 No pueden comenzar con las letras xml (o XML, Xml, etc.)
 Puede contener pero no empezar por dígitos, guiones y puntos
 NO pueden contener espacios

No hay palabras están reservados (excepto xml).

X
Alejandro Rodríguez Rey
Las mejores prácticas de nomenclatura
Crear nombres descriptivos.

Crear nombres cortos y simples.

Evitar "-".

Evitar ".".

Evitar ":". Los dos puntos se reservan para los namespaces.

Estilos de nomenclatura
No hay estilos de nombres definidos para elementos XML. Pero estos son algunos de uso común:

Estilo Ejemplo Descripción

Minúscula <nombre> Todas las letras minúsculas

letras mayúsculas <NOMBRE> Todas las letras mayúsculas

Guion bajo <Nombre_apellido> Subrayado separa las palabras

Pascal case <FirstName> Mayúscula la primera letra de cada palabra

Carmel Case <firstName> Mayúscula la primera letra de cada palabra excepto la primera

Una práctica común es utilizar las reglas de denominación de la base de datos de los elementos XML.

Camel Case es una regla de denominación común en JavaScript.

Los elementos XML son extensibles


Pueden extenderse para transportar más información.

Se puede extender sin romper las aplicaciones, aunque se añada nueva información sigue siendo capaz de detectar la información
deseada.

XML Atributos

Los elementos XML pueden tener atributos, al igual que HTML.

Los atributos están diseñados para contener datos relacionados con un elemento específico.

XI
Alejandro Rodríguez Rey
Los atributos XML deben citarse “”
Los atributos siempre deben ser citados, con comillas simples o dobles.

Si el valor del atributo en sí contiene comillas dobles se pueden utilizar comillas simples o puede usar entidades de caracteres.

Elementos XML vs Atributos


No hay reglas acerca de cuándo utilizar atributos o cuando usar elementos en XML.

Algunas cosas a tener en cuenta al utilizar atributos son:

 No pueden contener múltiples valores (los elementos pueden)


 No pueden contener estructuras de árbol (los elementos pueden)
 No son fácilmente ampliables (para cambios futuros)

Atributos XML para metadatos


A veces, se asignan ID a los elementos. Estos identificadores se pueden utilizar para identificar elementos XML de la misma
manera que en HTML.

Los metadatos (datos sobre los datos) deben ser almacenados como atributos y los datos en sí deben ser almacenados como
elementos.

XML Namespaces “:”

Conflictos de nombres
En XML, los nombres de elementos se definen por el desarrollador. Esto a menudo es conflictivo cuando se trata de mezclar
documentos XML.

La solución del conflicto de nombres: El uso de un prefijo


Este XML lleva información sobre una tabla HTML, y una pieza de mobiliario:

<h:table>
<h:tr>
<h:td>Apples</h:td>
</h:tr>
</h:table>

<f:table>
<f:name>African Coffee Table</f:name>
</f:table>

En el ejemplo anterior, no habrá ningún conflicto porque los dos elementos <table> tienen diferentes nombres.

XII
Alejandro Rodríguez Rey
El atributo xmlns
Cuando se usan prefijos en XML, se debe definir un namespace para el prefijo.

El namespace se puede definir mediante un atributo xmlns en la etiqueta de inicio de un elemento.

La declaración de namespaces tiene la siguiente sintaxis:


<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
</h:tr>
</h:table>

<f:table xmlns:f="https://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
</f:table>

Los namespaces también pueden ser declarados en el elemento raíz XML:

<root xmlns:h=http://www.w3.org/TR/html4/ xmlns:f="https://www.w3schools.com/furniture">

Nota: El analizador no utiliza el URI para buscar información.

El propósito de utilizar un URI es dar un nombre único.

Sin embargo, las empresas suelen utilizar el namespace como un puntero a una página web que contiene información.

Identificador uniforme de recursos (URI)


Un identificador uniforme de recursos (URI) es una cadena de caracteres que identifica un recurso de Internet.

El URI más común es el Localizador Uniforme de Recursos (URL) que identifica una dirección de dominio de Internet. Otra, no
tan común es el Uniform Resource Name (URN).

Los namespaces por defecto


La definición de un namespace predeterminado para un elemento nos ahorra el uso de prefijos en todos los elementos secundarios.
Tiene la siguiente sintaxis:

Este XML lleva la información de tabla HTML:

<table xmlns=" namespaceURI ">


<name>African Coffee Table</name>
</table>

Los namespaces en el uso real


XSLT es un lenguaje que puede ser utilizado para transformar documentos XML en otros formatos (como HTML).

XIII
Alejandro Rodríguez Rey
XML Display

Raw XML se puede ver en los principales navegadores.

No espere que los archivos XML se muestren como páginas HTML.

Visualización de archivos XML


La mayoría de los navegadores mostrarán un documento XML con elementos codificados por colores.

A menudo, en un signo más (+) o signo menos (-) a la izquierda de los elementos se puede hacer clic para expandir o contraer la
estructura del elemento.

Para ver el código fuente XML sin procesar, seleccionar "Ver código fuente".

Visualización de un archivo XML no válido


Si se abre un archivo XML erróneo, algunos navegadores informarán el error y otros lo mostrarán o lo mostrarán incorrectamente.

¿Por qué XML se muestra de esta manera?


Los documentos XML no contienen información sobre cómo mostrar los datos. Dado que las etiquetas XML son "inventadas" por
el autor del documento XML, los navegadores no saben si una etiqueta como <table> describe una tabla HTML o una mesa de
comedor.

Sin información sobre cómo mostrar los datos, los navegadores solo pueden mostrar el documento XML tal como está.

Si desea aplicar un estilo a un documento XML, use XSLT.

XIV
Alejandro Rodríguez Rey
UD 3. XSLT
XSLT Introducción
XSL (Extensible Stylesheet Language) es un lenguaje de estilo para XML.

XSLT significa Transformaciones XSL.

XSL (T) Lenguajes


XSLT es un lenguaje para transformar documentos XML.

XPath es un lenguaje para navegar en documentos XML.

XQuery es un lenguaje para consultar documentos XML.

Comenzando con XSL


XSL representa E X tensible S tylesheet L anguage.

El World Wide Web Consortium (W3C) comenzó a desarrollar XSL porque se necesitaba un lenguaje de hojas de
estilo basado en XML.

CSS = Hojas de estilo para HTML


HTML utiliza etiquetas predefinidas. El significado de, y cómo mostrar cada etiqueta se entiende bien.

CSS se utiliza para agregar estilos a los elementos HTML.

XSL = Hojas de estilo para XML


XML no utiliza etiquetas predefinidas, y por lo tanto el significado de cada etiqueta no se entiende bien.

XSL describe cómo se deben mostrar los elementos XML.

XV
Alejandro Rodríguez Rey
XSL - más que un lenguaje de hojas de estilo
XSL consta de cuatro partes:

 XSLT - para transformar documentos XML


 XPath - para navegar en documentos XML
 XSL-FO - lenguaje de formato para documentos XML (descontinuado en 2013)
 XQuery - lenguaje para la consulta de documentos XML

Con el módulo de medios paginados CSS3, W3C ha entregado un nuevo estándar para el formato de
documentos. Así, desde 2013, CSS3 se propone como un reemplazo XSL-FO.

¿Qué es XSLT?
 XSLT es sinónimo de transformaciones XSL
 XSLT es la parte más importante de XSL
 XSLT transforma un documento XML en otro documento XML
 XSLT utiliza XPath para navegar en documentos XML
 XSLT es una Recomendación del W3C

XSLT = transformaciones XSL


XSLT es la parte más importante de XSL.

XSLT se utiliza para transformar un documento XML en otro documento XML, u otro tipo de documento
que es reconocido por un navegador, como HTML o XHTML. Normalmente XSLT transforma cada
elemento XML en un elemento (X) HTML.

Con XSLT puede añadir / eliminar elementos y atributos hacia o desde el archivo de salida. También puede
reorganizar y ordenar los elementos, realizar pruebas y tomar decisiones sobre qué elementos ocultar y
mostrar.

Una forma común de describir el proceso de transformación es decir que XSLT transforma un árbol de origen
XML en un árbol de resultados XML.

Usos XSLT XPath


XSLT utiliza XPath para encontrar información en un documento XML. XPath se utiliza para navegar a
través de elementos y atributos en documentos XML.

XVI
Alejandro Rodríguez Rey
¿Cómo funciona?
En el proceso de transformación, XSLT utiliza XPath para definir partes del documento fuente que
debe coincidir con una o más plantillas predefinidas. Cuando se encuentra una coincidencia, XSLT va a
transformar la parte coincidente del documento de origen en el documento de resultado.

Compatibilidad con navegadores


Todos los principales navegadores soportan XSLT y XPath.

XSLT - Transformación
¿Cómo transformar XML en XHTML mediante XSLT?

Declaración de hoja de estilo correcta


El elemento raíz que declara que el documento es una hoja de estilo XSL es <xsl: stylesheet> o
<xsl:transform> indiferentemente de cual:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

o:

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Para obtener acceso a los elementos, atributos y características de XSLT, debemos declarar el namespace
XSLT en la parte superior del documento.

Comience con un documento XML sin procesar


Queremos transformar un documento XML en XHTML.

Crear una hoja de estilo XSL


A continuación, se crea una hoja de estilo XSL con una plantilla de transformación.

XVII
Alejandro Rodríguez Rey
Vincular la hoja de estilo XSL al documento XML
Añadir la referencia de hoja de estilo XSL a un documento XML:

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


<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>

XSLT <xsl:template match="xxx"> element


Una hoja de estilo XSL consta de uno o más conjuntos de reglas que se denominan plantillas.

Una plantilla contiene reglas para aplicar cuando un nodo especificado coincide.

El elemento <xsl:template>
El elemento <xsl:template> se utiliza para construir las plantillas.

El atributo de coincidencia se utiliza para asociar una plantilla con un elemento XML.

El atributo de coincidencia también se puede utilizar para definir una plantilla para todo el documento XML.

El valor del atributo de coincidencia es una expresión XPath (<xsl:template match="/"> define todo el
documento).

XSLT <xsl:value-of select="xxx"> element


El elemento <xsl:value-of> se usa para extraer el valor de un nodo seleccionado.

<xsl:value-of select="xxx" />


El elemento <xsl:value-of> se puede usar para extraer el valor de un elemento XML y agregarlo a la secuencia de
salida de la transformación.

XSLT <xsl:for-each select="xxx"> element


El elemento <xsl:for-each> le permite hacer un bucle en XSLT.

XVIII
Alejandro Rodríguez Rey
El elemento <xsl:for-each select="xxx"> </xsl:for-each>
Puede ser usado para seleccionar cada elemento XML de un conjunto de nodos especificado.

Nota: El valor del atributo es una expresión XPath. Una expresión XPath funciona como navegar en un
sistema de archivos; donde una barra inclinada (/) selecciona subdirectorios.

Filtrado de la salida
También podemos filtrar la salida del archivo XML mediante la adición de un criterio de selección.

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">


Operadores de filtro:

 = (Igual)
 ! = (No igual)
 &lt; menor que
 &gt; mayor que

XSLT <xsl:sort select="xxx">


El elemento <xsl:sort> (tipo) se utiliza para ordenar la salida.

¿Dónde poner el tipo de información?


Para ordenar la salida, sólo tiene que añadir un elemento <xsl:sort> dentro de la etiqueta <xsl:for-each>:

<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>

Nota: el atributo de selección indica sobre qué elemento XML se ordenará.

XIX
Alejandro Rodríguez Rey
XSLT <xsl:if test="xxx"> element
El elemento <xsl:if> se utiliza como en programación.

<xsl:if test="xxx = yyy">


...some output if the expression is true...
</xsl:if>

Dónde colocar la etiqueta <xsl:if >


Para agregar un condicional, añadir <xsl:if> dentro de la etiqueta <xsl:for-each> en el archivo XSL.

XSLT <xsl:choose> element


La <xsl:choose> se utiliza con <xsl:when> y <xsl:otherwise> para expresar múltiples pruebas condicionales.

Sintaxis
<xsl:choose>
<xsl:when test="expression">
... some output ...
</xsl:when>
<xsl:otherwise>
... some output ....
</xsl:otherwise>
</xsl:choose>

XSLT <xsl:apply-templates select=”xxx”> element


El elemento <xsl:apply-templates> aplica una plantilla al elemento actual o a los nodos secundarios del elemento
actual.

Si agregamos un atributo de selección al elemento <xsl:apply-templates>, solo procesará el elemento


secundario que coincida con el valor del atributo.

Podemos usar el atributo de selección para especificar el orden en que se procesan los nodos secundarios.

XX
Alejandro Rodríguez Rey
UD 4. XPATH
¿Qué es XPath?
XPath se puede utilizar para navegar a través de elementos y atributos en un documento XML.

 XPath significa XML Path Language


 XPath es una sintaxis para definir partes de un documento XML, usa expresiones de
ruta para identificar y navegar por los nodos en un documento XML
 XPath es un elemento importante en XSLT y en XQuery

Expresiones de ruta de XPath


XPath utiliza expresiones de ruta para seleccionar nodos o conjuntos de nodos en un documento XML.

Las expresiones XPath se pueden usar en JavaScript, Java, esquema XML, PHP, Python, C y C ++, y
muchos otros idiomas.

XPath 1.0 se convirtió en una recomendación del W3C en 1999.

XPath 2.0 se convirtió en una recomendación del W3C en 2007.

XPath 3.0 se convirtió en una recomendación del W3C en 2014.

Selecciona el título del primer nodo de libro de librería:

/bookstore/book[1]/title

Selecciona en libros de librería el texto de todos los nodos de precios:

/bookstore/book/price[text()]

Selecciona en libros de librería todos los nodos de precios con un precio superior a 35:

/bookstore/book[price>35]/price

XXI
Alejandro Rodríguez Rey
XPath Nodes

Terminología XPath
Nodos

En XPath, hay siete tipos de nodos: elemento, atributo, texto, namespace, instrucción de procesamiento,
comentario y nodos de documento.

Los documentos XML se tratan como árboles de nodos. El elemento superior del árbol se llama el elemento
raíz.

<bookstore> (root element node)

<author>J K. Rowling</author> (element node)

lang="en" (attribute node)

Valores atómicos

Los valores atómicos son nodos sin hijos o padre.

Ejemplo de valores atómicos:

J K. Rowling

"en"

Artículos

Los elementos son valores atómicos o nodos.

Relación de Nodos
Padre

Cada elemento y atributo tiene un padre.

Hijo

Los nodos del elemento pueden tener cero, uno o más hijos.

Los hermanos

Nodos que tienen el mismo padre.

XXII
Alejandro Rodríguez Rey
Los antepasados

El padre de un nodo, el padre del padre…

Descendientes

Los hijos de un nodo, los hijos de los niños…

Sintaxis de XPath

Seleccionando nodos
XPath utiliza expresiones de ruta para seleccionar nodos en un documento XML. El nodo se selecciona
siguiendo una ruta o pasos. Las expresiones de ruta más útiles se enumeran a continuación:

Expression Description
nodename Selects all nodes with this name
/ Selects from the root node
Selects nodes in the document from the current node that match the selection no
//
matter where they are
. Selects the current node
.. Selects the parent of the current node
@ Selects attributes
Path Expression Result
bookstore Selects all nodes with the name "bookstore"
Selects the root element bookstore ||| Note: If the path starts with a slash ( / ) it
/bookstore
always represents an absolute path to an element!
bookstore/book Selects all book elements that are children of bookstore
//book Selects all book elements no matter where they are in the document
Selects all book elements that are descendant of the bookstore element, no matter
bookstore//book
where they are under the bookstore element
//@lang Selects all attributes that are named lang

Predicados
Se utilizan para encontrar un nodo específico o un nodo que contiene un valor específico, siempre están
incrustados entre corchetes.

Path Expression Result

Selects the first book element that is the child of the bookstore
/bookstore/book[1]
element.
Note: In IE 5,6,7,8,9 first node is[0], but according to W3C, it is
[1]. To solve this problem in IE, set the SelectionLanguage to
XPath:
In JavaScript: xml .setProperty("SelectionLanguage","XPath");
XXIII
Alejandro Rodríguez Rey
Selects the last book element that is the child of the bookstore
/bookstore/book[last()] element

Selects the last but one book element that is the child of the
/bookstore/book[last()-1]
bookstore element
Selects the first two book elements that are children of the
/bookstore/book[position()<3]
bookstore element
//title[@lang] Selects all the title elements that have an attribute named lang
Selects all the title elements that have a "lang" attribute with a
//title[@lang='en']
value of "en"
Selects all the book elements of the bookstore element that have
/bookstore/book[price>35.00]
a price element with a value greater than 35.00
Selects all the title elements of the book elements of the
/bookstore/book[price>35.00]/title bookstore element that have a price element with a value greater
than 35.00

Selección de nodos desconocidos


Los comodines XPath se pueden usar para seleccionar nodos XML desconocidos.

Wildcard Description
* Matches any element node
@* Matches any attribute node
node() Matches any node of any kind

Path Expression Result


/bookstore/* Selects all the child element nodes of the bookstore element
//* Selects all elements in the document
//title[@*] Selects all title elements which have at least one attribute of any kind

Seleccionando varios caminos


Usando el operador “ | “ en una expresión XPath puede seleccionar varias rutas.

Path Expression Result


//book/title | //book/price Selects all the title AND price elements of all book elements
//title | //price Selects all the title AND price elements in the document

Selects all the title elements of the book element of the


/bookstore/book/title | //price
bookstore element AND all the price elements in the document

XXIV
Alejandro Rodríguez Rey
XPath Axes

Ejes XPath
Un eje representa una relación con el nodo de contexto (actual) y se usa para ubicar nodos relativos a ese
nodo en el árbol.

AxisName Result

ancestor Selects all ancestors (parent, grandparent, etc.) of the current node

Selects all ancestors (parent, grandparent, etc.) of the current node and
ancestor-or-self
the current node itself

attribute Selects all attributes of the current node

child Selects all children of the current node

descendant Selects all descendants of the current node

Selects all descendants (children, grandchildren, etc.) of the current


descendant-or-self
node and the current node itself

Selects everything in the document after the closing tag of the current
following
node

following-sibling Selects all siblings (brothers) after the current node

namespace Selects all namespace nodes of the current node

parent Selects the parent of the current node

Selects all nodes that appear before the current node in the document,
preceding
except ancestors, attribute nodes and namespace nodes

preceding-sibling Selects all siblings (brothers) before the current node

self Selects the current node

Ubicación de la ruta de expresión


Una ruta de ubicación puede ser absoluta o relativa.

Una ruta de ubicación absoluta comienza con una barra (/) y una ruta de ubicación relativa no. En ambos
casos, la ruta de ubicación consta de uno o más pasos, cada uno separado por una barra:

XXV
Alejandro Rodríguez Rey
An absolute location path:
/step/step/...

A relative location path:


step/step/...

Cada paso se evalúa contra los nodos en el conjunto de nodos actual.

Un paso consiste en:

 un eje (define la relación de árbol entre los nodos seleccionados y el nodo actual)
 una prueba de nodo (identifica un nodo dentro de un eje)
 cero o más predicados (para refinar aún más el conjunto de nodos seleccionado)

La sintaxis para un paso de ubicación es:

axisname::nodetest[predicate]

Ejemplos
Example Result

child::book Selects all book nodes that are children of the current node

attribute::lang Selects the lang attribute of the current node

child::* Selects all element children of the current node

attribute::* Selects all attributes of the current node

child::text() Selects all text node children of the current node

child::node() Selects all children of the current node

descendant::book Selects all book descendants of the current node

ancestor::book Selects all book ancestors of the current node

Selects all book ancestors of the current node - and the current as well
ancestor-or-self::book
if it is a book node

child::*/child::price Selects all price grandchildren of the current node

Operadores XPath

Una expresión XPath devuelve un conjunto de nodos, una cadena, un booleano o un número.

XXVI
Alejandro Rodríguez Rey
Operadores XPath
Operator Description Example

| Computes two node-sets //book | //cd

+ Addition 6+4

- Subtraction 6-4

* Multiplication 6*4

div Division 8 div 4

= Equal price=9.80

!= Not equal price!=9.80

< Less than price<9.80

<= Less than or equal to price<=9.80

> Greater than price>9.80

>= Greater than or equal to price>=9.80

or or price=9.80 or price=9.70

and and price>9.00 and price<9.90

mod Modulus (division remainder) 5 mod 2

Ejemplos de XPath

Cargando el documento XML


El uso de un objeto XMLHttpRequest para cargar documentos XML es compatible con todos los
navegadores modernos.

var xmlhttp = new XMLHttpRequest();

Seleccionando nodos
Hay diferentes maneras de tratar con XPath en diferentes navegadores; Chrome, Firefox, Edge, Opera y
Safari usan para seleccionar nodos: xmlDoc.evaluate( xpath , xmlDoc, null, XPathResult.ANY_TYPE,
null); Internet Explorer usa para seleccionar el nodo: xmlDoc.selectNodes( xpath );
XXVII
Alejandro Rodríguez Rey
UD 5. XQUERY
¿Qué es XQuery?

 XQuery es el lenguaje para consultar datos XML


 XQuery para XML es como SQL para bases de datos
 XQuery está construido sobre expresiones XPath
 XQuery es compatible con todas las principales bases de datos

XQuery y XPath
XQuery 1.0 y XPath 2.0 comparten el mismo modelo de datos y admiten las mismas funciones y operadores.

XQuery - Ejemplos de uso


XQuery se puede utilizar para:

 Extraer información para usar en un servicio web


 Generar informes de resumen.
 Transformar datos XML a XHTML
 Buscar documentos web para información relevante

Ejemplo de XQuery:

for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title

XQuery es una recomendación de W3C


XQuery es compatible con varios estándares W3C, como XML, namespaces, XSLT, XPath y XML Schema.
XQuery 1.0 se convirtió en una Recomendación W3C en 2007.

XXVIII
Alejandro Rodríguez Rey
Ejemplo de XQuery

¿Cómo seleccionar nodos de "books.xml"?


Funciones

XQuery usa funciones para extraer datos de documentos XML.

La función doc() se utiliza para abrir el archivo "books.xml":

doc("books.xml")

Expresiones de ruta

XQuery usa expresiones de ruta XPath para navegar a través de los elementos:

doc("books.xml") /bookstore/book/title

Predicados

XQuery usa predicados para limitar los datos extraídos de documentos XML.

doc("books.xml")/bookstore/book [price<30]

XQuery FLWOR Expresiones

¿Qué es FLWOR?
FLWOR es un acrónimo de "For, Let, Where, Order by, Return".

 FOR - selecciona una secuencia de nodos


 LET - une una secuencia a una variable
 WHERE - filtra los nodos
 ORDER BY - ordena los nodos
 RETURN - qué devolver (se evalúa una vez para cada nodo)

Cómo seleccionar nodos de "books.xml" con FLWOR


Mira la siguiente expresión de ruta:

doc("books.xml")/bookstore/book[price>30]/title

XXIX
Alejandro Rodríguez Rey
La siguiente expresión FLWOR seleccionará exactamente lo mismo que la anterior y además ordenará el
resultado:

for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title

La cláusula for selecciona todos los elementos libro en una variable $x.

XQuery FLWOR + HTML

Presente el resultado en una lista HTML


Mira la siguiente expresión de XQuery FLWOR:

for $x in doc("books.xml")/bookstore/book/title
order by $x
return $x

Ahora para enumerar todos los títulos de libros en una lista HTML añadimos etiquetas <ul> y <li> a la
expresión FLWOR:

<ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{ $x }</li>
}
</ul>

El resultado de lo anterior será:

<ul>
<li><title lang="en">Everyday Italian</title></li>
<li><title lang="en">Harry Potter</title></li>
</ul>

Si queremos eliminar el elemento de título y mostrar solo los datos de dentro del elemento:

<ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{ data( $x ) }</li>
}
</ul>

XXX
Alejandro Rodríguez Rey
El resultado será:

<ul>
<li>Everyday Italian</li>
<li>Harry Potter</li>
</ul>

Términos de XQuery

Terminología de XQuery y XPath


 Nodos
 Valores atómicos
 Artículos

Relación de Nodos de XQuery y XPath


 Padre
 Hijos
 Hermanos
 Antepasados
 Descendientes

Sintaxis de XQuery

Reglas de sintaxis de XQuery


 XQuery distingue entre mayúsculas y minúsculas
 Los elementos, atributos y variables de XQuery deben ser nombres XML válidos
 Un valor de cadena XQuery puede estar entre comillas simples o dobles
 Una variable XQuery se define con un $ seguido de un nombre
 Los comentarios de XQuery están delimitados por (:xxxx:)

XXXI
Alejandro Rodríguez Rey
Expresiones condicionales de XQuery
Las expresiones "If – Then – Else" están permitidas en XQuery.

Mira el siguiente ejemplo:

for $x in doc("books.xml")/bookstore/book
return if ( $x/@category="girl" )
then <girl>{data($x/title)}</girl>
else <boy>{data($x/title)}</boy>

Notas: Puede ser solo else ().

Comparaciones de XQuery
En XQuery hay dos formas de comparar valores.

1. Comparaciones generales: = != < <= > >=

2. Comparaciones de valores: eq ne lt le gt ge

Devuelve verdadero si alguno de los atributos precio tiene un valor mayor que 10:

$bookstore//book/@precio > 10

Devuelve verdadero si solo hay un atributo precio devuelto por la expresión, y su valor es mayor que 10. Si
se devuelve más de un precio, se produce un error:

$bookstore//book/@precio gt 10

XQuery añadiendo elementos y atributos

Añadiendo elementos y atributos al resultado


for $x in doc("books.xml")/bookstore/book/title
order by $x
return $x

La expresión XQuery anterior incluirá tanto el elemento de título como el atributo lang en el resultado.

XXXII
Alejandro Rodríguez Rey
Añadir elementos HTML y texto

Pondremos el resultado en una lista HTML, junto con un poco de texto:

<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li>{data($x/title)}. Category: {data($x/@category)}</li>
}
</ul>

La expresión XQuery anterior generará el siguiente resultado:


<ul>
<li>Everyday Italian. Category: COOKING</li>
<li>Harry Potter. Category: CHILDREN</li>
</ul>

Añadir atributos a elementos HTML

Para usar el atributo de categoría como un atributo de clase en la lista HTML:

<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li class="{data($x/@category)}">{data($x/title)}</li>
}
</ul>

La expresión XQuery anterior generará el siguiente resultado:


<ul>
<li class="COOKING">Everyday Italian</li>
</ul>

XQuery seleccionando y filtrando (consultas)

La cláusula FOR
La cláusula FOR vincula una variable a cada elemento devuelto por la expresión IN. La cláusula FOR da
como resultado la iteración. Puede haber múltiples cláusulas para en la misma expresión FLWOR.

Para hacer un bucle un número específico de veces en una cláusula for, puede usar la palabra clave TO:

for $x in (1 to 5)
return <test>{$x}</test>

XXXIII
Alejandro Rodríguez Rey
La palabra clave AT se puede usar para contar la iteración:

for $x at $i in doc("books.xml")/bookstore/book/title
return <book>{$i}. {data($x)}</book>

Resultado:

<book>1. Everyday Italian</book>


<book>2. Harry Potter</book>

También se permite con más de una expresión en la cláusula for. Use una coma para separar cada expresión:

for $x in (10,20), $y in (100,200)


return <test>x={$x} and y={$y}</test>

Resultado:

<test>x=10 and y=100</test>


<test>x=10 and y=200</test>
<test>x=20 and y=100</test>
<test>x=20 and y=200</test>

La cláusula LET
La cláusula LET permite asignaciones de variables y evita repetir la misma expresión muchas veces. La
cláusula LET no da lugar a la iteración.

let $x := (1 to 5)
return <test>{$x}</test>

Resultado:

<test>1 2 3 4 5</test>

La cláusula WHERE
La cláusula WHERE se usa para especificar uno o más criterios para el resultado:

where $x/price>30 and $x/price<100

La cláusula ORDER BY
La cláusula ORDER BY por se usa para especificar el orden de clasificación del resultado. Aquí queremos
ordenar el resultado por categoría y título:

for $x in doc("books.xml")/bookstore/book
order by $x/@category, $x/title
return $x/title

XXXIV
Alejandro Rodríguez Rey
La cláusula RETURN
La cláusula RETURN especifica lo que se va a devolver.

for $x in doc("books.xml")/bookstore/book
return $x/title

Funciones de XQuery

Funciones de XQuery
XQuery se basa en expresiones XPath. XQuery 1.0 y XPath 2.0 comparten la misma biblioteca de funciones,
comparten el mismo modelo de datos y admiten las mismas funciones y operadores.

También puedes definir tus propias funciones en XQuery.

Tipos de datos de XQuery


XQuery comparte los mismos tipos de datos que el esquema XML 1.0 (XSD).

Ejemplos de llamadas a funciones


Puede aparecer una llamada a una función donde puede aparecer una expresión.

Ejemplo 1: en un elemento

<name>{upper-case($booktitle)}</name>

Ejemplo 2: en el predicado de una expresión de ruta

doc("books.xml")/bookstore/book[substring(title,1,5)='Harry']

Ejemplo 3: en una cláusula let

let $name := (substring($booktitle,1,4))

Funciones definidas por el usuario de XQuery


Si no puede encontrar la función XQuery que necesita, puede escribir la suya propia.

Las funciones definidas por el usuario se pueden definir en la consulta o en una biblioteca separada.

XXXV
Alejandro Rodríguez Rey
Sintaxis
declare function prefix:function_name ($ parameter as datatype )
as returnDatatype
{
... function code here ...
};

Notas sobre las funciones definidas por el usuario:

 Utilice la palabra clave declare function


 El nombre de la función debe tener prefijo
 El tipo de datos de los parámetros es casi igual al de los tipos de datos definidos en el esquema XML.
 El cuerpo de la función debe estar rodeado de llaves.

Ejemplo de una función definida por el usuario declarada en la consulta


declare function local:minPrice($price as xs:decimal?,$discount as xs:decimal?)
as xs:decimal?
{
let $disc := ($price * $discount) div 100
return ($price - $disc)
};

XXXVI
Alejandro Rodríguez Rey
UD 6. DTD
¿Qué es DTD?
Una DTD es una Definición de Tipo de Documento (Document Tipe Definition).

Una DTD define la estructura y los elementos legales y atributos de un documento XML.

¿Por qué usar un DTD?


Grupos independientes de personas pueden ponerse de acuerdo sobre una DTD estándar para intercambiar
datos.

Una aplicación puede usar una DTD para verificar que los datos XML son válidos.

Una declaración interna de DTD


Si se declara en un archivo XML, tiene que estar dentro de la definición <!DOCTYPE>:

<?xml version="1.0"?>
<!DOCTYPE xxx [
<!ELEMENT xxx (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<to>Tove</to>

</xxx>

 !DOCTYPE xxx define que el elemento root de este documento es xxx


 !ELEMENT xxx define que el elemento xxx debe contener cuatro elementos: "a, desde, encabezado, cuerpo"
 !ELEMENT to definir el elemento to para ser del tipo "#PCDATA"
 !ELEMENT from define el elemento from para que sea del tipo "#PCDATA"
 !ELEMENT heading define el elemento del encabezado como de tipo "#PCDATA"
 !ELEMENT body define el elemento de cuerpo como de tipo "#PCDATA"

XXXVII
Alejandro Rodríguez Rey
Una declaración de DTD externa
Si la DTD se declara en un archivo externo, la definición <!DOCTYPE> debe contener una referencia al
archivo DTD:

<?xml version="1.0"?>
<!DOCTYPE xxx SYSTEM "yyy.dtd">
<xxx>
<to>Tove</to>
</xxx>

Y aquí está el archivo "xxx.dtd", que contiene la DTD:

<!ELEMENT xxx (to,from,heading,body)>


<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

DTD - Bloques de construcción XML

Desde el punto de vista DTD, los documentos XML están compuestos por los siguientes bloques de
construcción:

 Elementos
 Atributos
 Entidades
 PCDATA
 CDATA

Elementos
Los elementos son los componentes principales de los documentos XML y HTML. Los elementos pueden
contener texto, otros elementos, o estar vacíos.

Ejemplos de elementos HTML son "<body>" y "<table>".

Ejemplos de elementos XML podrían ser "<nota>" y "<mensaje>".

Atributos
Los atributos proporcionan información adicional sobre los elementos. Los atributos siempre se colocan
dentro de la etiqueta de apertura de un elemento. Siempre vienen en pares de nombre / valor.

<img src="computer.gif" />

XXXVIII
Alejandro Rodríguez Rey
Entidades
Entidad “espacio” en HTML: "&nbsp;".

Algunos caracteres tienen un significado especial en XML, por ello las siguientes entidades están
predefinidas en XML:

Entity References Character

&lt; <

&gt; >

&amp; &

&quot; "

&apos; '

PCDATA
PCDATA significa datos de caracteres analizados/procesados.

Los datos de caracteres son el texto que se encuentra entre las etiquetas de un elemento XML.

PCDATA es un texto que será analizado por el analizador para las entidades y el marcado.

Las etiquetas dentro del texto serán tratadas como marcas y las entidades serán traducidas.

Los datos de caracteres analizados no deben contener ningún &, <, o >; estos deben estar representados por
&amp; &lt; y &gt;.

CDATA
CDATA significa datos de caracteres.

CDATA es un texto que NO será analizado por un analizador. Las etiquetas dentro del texto NO serán
tratadas como marcas y las entidades NO serán traducidas.

XXXIX
Alejandro Rodríguez Rey
DTD - Elementos

En una DTD, los elementos se declaran con una declaración ELEMENT:

<!ELEMENT element-name category>


<!ELEMENT element-name (element-content)>

Elementos vacios
Los elementos vacíos se declaran con la palabra clave EMPTY:

<!ELEMENT element-name EMPTY>

Elementos con datos de caracteres analizados


Se declaran con #PCDATA entre paréntesis:

<!ELEMENT element-name (#PCDATA)>

Elementos con cualquier contenido


Los elementos declarados con la palabra clave ANY, pueden contener cualquier combinación de datos
analizables:

<!ELEMENT element-name ANY>

Elementos con hijos (secuencias)


Los elementos con uno o más elementos secundarios se declaran con el nombre de los elementos
secundarios entre paréntesis.

Cuando los niños se declaran en una secuencia separada por comas, los niños deben aparecer en la misma
secuencia en el documento.

En una declaración completa, los niños también deben ser declarados.

<!ELEMENT element-name (child1,child2,...)>

XL
Alejandro Rodríguez Rey
Declarar solo una ocurrencia de un elemento
<!ELEMENT note (message)>

El elemento hijo debe aparecer una y solo una vez dentro del elemento "nota".

Declarar la ocurrencia mínima de un elemento


<!ELEMENT note (message+)>

El signo + declara que el elemento hijo debe aparecer una o más veces dentro del elemento "nota".

Declarar cero o más ocurrencias de un elemento


<!ELEMENT note (message*)>

El signo * declara que el elemento hijo puede aparecer cero o más veces dentro del "nota".

Declarar cero o una ocurrencia de un elemento


<!ELEMENT note (message?)>

Esto ? declara que el elemento hijo puede aparecer cero o una vez dentro de "nota".

Declarar condicional OR “|”


<!ELEMENT note (to,from,header,(message|body))>

Declara que el elemento "nota" debe contener un elemento "to", un elemento "from", un elemento "header"
y un elemento "message" o "body".

Declarar contenido mixto


<!ELEMENT note (#PCDATA|to|from|header|message)*>

El ejemplo anterior declara que el elemento "nota" puede contener cero o más apariciones de datos de
caracteres analizados, elementos "a", "desde", "encabezado" o "mensaje".

XLI
Alejandro Rodríguez Rey
DTD - Atributos

Los atributos se declaran con una declaración ATTLIST.

<!ATTLIST element-name attribute-name attribute-type attribute-value>

<!ATTLIST payment method CDATA "check">

XML example:

<payment method="check" />

El tipo de atributo puede ser uno de los siguientes:

Type Description

CDATA The value is character data

( en1 | en2 |..) The value must be one from an enumerated list

ID The value is a unique id

IDREF The value is the id of another element

IDREFS The value is a list of other ids

NMTOKEN The value is a valid XML name

NMTOKENS The value is a list of valid XML names

ENTITY The value is an entity

ENTITIES The value is a list of entities

NOTATION The value is a name of a notation

xml: The value is a predefined xml value

El valor de atributo puede ser uno de los siguientes:

Value Explanation

“xxx” The default value of the attribute

#REQUIRED The attribute is required

#IMPLIED The attribute is optional

#FIXED “xxx” The attribute value is fixed

XLII
Alejandro Rodríguez Rey
Un valor de atributo predeterminado
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">

Valid XML:

<square width="100" />

Se define como un elemento vacío con un atributo "width" de tipo CDATA que si no se especifica un
valor tiene por defecto “0”.

#REQUIRED
<!ATTLIST person number CDATA #REQUIRED>

Valid XML:

<person number="5677" />

Invalid XML:

<person />

No tiene valor predeterminado pero es obligatorio que tenga valor el atributo.

#IMPLIED
<!ATTLIST contact fax CDATA #IMPLIED>

Valid XML:

<contact fax="555-667788" />

<contact />

No tiene valor por defecto y no es obligatorio un valor para el atributo.

XLIII
Alejandro Rodríguez Rey
#FIXED
<!ATTLIST sender company CDATA #FIXED "Microsoft">

Valid XML:

<sender company="Microsoft" />

Invalid XML:

<sender company="W3Schools" />

Un atributo tenga un valor fijo sin permitir que el autor lo cambie. Si se incluye otro valor, devolverá un
error.

Valores de atributo enumerados


<!ATTLIST payment type (check|cash|debit) "cash">

XML example:

<payment type="check" />


<payment type="cash" />

El valor de atributo será uno de un conjunto fijo de valores.

Elementos XML vs. Atributos

En XML, no hay reglas sobre cuándo usar atributos y cuándo usar elementos secundarios.

Los atributos son útiles en HTML, pero en XML debe intentar evitarlos. Use elementos secundarios si la
información se siente como datos.

Algunos de los problemas con los atributos son:

 no pueden contener varios valores (los elementos secundarios pueden)


 no son fácilmente expandibles (para cambios futuros)
 no pueden describir estructuras (los elementos hijos pueden)
 son más difíciles de manipular por código de programa
 los valores de atributo no son fáciles de probar contra una DTD

Si usa atributos como contenedores para datos, terminará con documentos que son difíciles de leer y
mantener. Trate de usar elementos para describir los datos. Use atributos solo para información que no sea
relevante para los datos.

XLIV
Alejandro Rodríguez Rey
Una excepción a la regla de atributo
Referencias de ID para acceder a los elementos, son identificadores únicos, no una parte de los datos. Los
metadatos (datos sobre datos) deben almacenarse como atributos, y los datos en sí deben almacenarse como
elementos.

<note id="p501">
<to>Tove</to>
<from>Jani</from>
</note>

DTD - Entidades

Las entidades se utilizan para definir accesos directos a caracteres especiales.

Las entidades pueden ser declaradas internas o externas.

Una declaración de entidad interna


<!ENTITY entity-name "entity-value">
<!ENTITY copyright "Copyright W3Schools.">

XML example:

<author>&copyright;</author>

Nota: Una entidad tiene tres partes: un ampersand (&), un nombre de entidad y un punto y coma (;).

Declaración de una entidad externa


<!ENTITY entity-name SYSTEM "URI/URL">
<!ENTITY copyright SYSTEM "https://www.w3schools.com/entities.dtd">

XML example:

<author>&copyright;</author>

XLV
Alejandro Rodríguez Rey
Ejemplos de DTD

Horario de TV DTD
<!DOCTYPE TVSCHEDULE [

<!ELEMENT TVSCHEDULE (CHANNEL+)>


<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>

<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>


<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>

Artículo de periódico DTD


<!DOCTYPE NEWSPAPER [

<!ELEMENT NEWSPAPER (ARTICLE+)>


<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>


<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

<!ENTITY NEWSPAPER "Vervet Logic Times">


<!ENTITY PUBLISHER "Vervet Logic Press">
<!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">
]>

XLVI
Alejandro Rodríguez Rey
Catálogo de productos DTD
<!DOCTYPE CATALOG [

<!ENTITY AUTHOR "John Doe">


<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">

<!ELEMENT CATALOG (PRODUCT+)>

<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">

<!ELEMENT SPECIFICATIONS (#PCDATA)>


<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>

<!ELEMENT OPTIONS (#PCDATA)>


<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte"
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">

<!ELEMENT PRICE (#PCDATA)>


<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>

<!ELEMENT NOTES (#PCDATA)>


]>

XLVII
Alejandro Rodríguez Rey
UD 7. XML SCHEMA
¿Qué es un esquema XML?
Un esquema XML describe la estructura de un documento XML.

El lenguaje de XML Schema también se conoce como XSD (XML Schema Definition).

El propósito de un XSD es definir los bloques de construcción legales de un XML:

 Los elementos y atributos que pueden aparecer en un documento.


 El número y orden de elementos secundarios
 Tipos de datos para elementos y atributos.
 Valores predeterminados y fijos para elementos y atributos.

¿Por qué aprender el esquema XML?


En el mundo XML, cientos de formatos XML estandarizados están en uso diario.

Muchos de estos estándares XML están definidos por esquemas XML.

El esquema XML es una alternativa a DTD basada en XML (y más potente).

Tipos de datos de soporte de esquemas XML


Una de las mayores fortalezas de los esquemas XML es el soporte para tipos de datos.

Los esquemas XML utilizan la sintaxis XML


Otra gran ventaja de los esquemas XML es que están escritos en XML.

 Puede usar su analizador XML para analizar sus archivos de esquema


 Puedes manipular tu esquema con el DOM XML
 Puedes transformar tu esquema con XSLT

Los esquemas XML son extensibles, porque están escritos en XML.

Con una definición de esquema extensible puedes:

 Reutilizar tu esquema en otros esquemas


 Crear tus propios tipos de datos derivados de los tipos estándar
 Referenciar de múltiples esquemas en el mismo documento

XLVIII
Alejandro Rodríguez Rey
Esquemas XML Comunicación segura de datos
Al enviar datos de un remitente a un receptor, es esencial que ambas partes tengan las mismas "expectativas"
sobre el contenido.

Con los esquemas XML, el remitente puede describir los datos de manera que el receptor los comprenda.

<date type = "date"> 2004-03-11 </date>

El tipo de datos XML "date" requiere el formato "YYYY-MM-DD".

Bien formado no es suficiente


Un documento XML bien formado se ajusta a las reglas de sintaxis XML:

 debe comenzar con la declaración XML


 debe tener un elemento raíz único
 las etiquetas de inicio deben tener etiquetas finales coincidentes
 los elementos distinguen entre mayúsculas y minúsculas
 todos los elementos deben estar cerrados
 todos los elementos deben estar correctamente anidados.
 todos los valores de los atributos deben ser citados entre “”
 las entidades deben ser utilizadas para caracteres especiales

Incluso si los documentos están bien formados, aún pueden contener errores.

XSD Cómo?

Los documentos XML pueden tener una referencia a un DTD o a un esquema XML.

Un esquema XML
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

XLIX
Alejandro Rodríguez Rey
XSD:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3schools.com"
xmlns="https://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>

El elemento note es un tipo complejo porque contiene otros elementos. Los otros elementos son tipos
simples porque no contienen otros elementos.

XSD - El elemento <schema>

El elemento <schema> es el elemento raíz de cada esquema XML.

El elemento <schema>
El elemento <schema> puede contener algunos atributos. Una declaración de esquema a menudo se ve algo
como esto:

<?xml version="1.0"?>

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

L
Alejandro Rodríguez Rey
El siguiente fragmento:

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

Indica que los elementos y tipos de datos utilizados en el esquema provienen del namespace
http://www.w3.org/2001/XMLSchema y que deben tener el prefijo xs:

Este fragmento:

targetNamespace="https://www.w3schools.com"

Indica que los elementos definidos por este esquema provienen del namespace
"https://www.w3schools.com".

Este fragmento:

xmlns="https://www.w3schools.com"

Indica que el namespace predeterminado es "https://www.w3schools.com".

Este fragmento:

elementFormDefault="qualified"

Indica que todos los elementos utilizados por el documento de instancia XML que se declararon en este
esquema deben tener un namespace calificado.

Hacer referencia a un XSD en un documento XML


<?xml version="1.0"?>

<note xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com note.xsd">

<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

El siguiente fragmento:

xmlns="https://www.w3schools.com"

Especifica la declaración de namespaces por defecto.

LI
Alejandro Rodríguez Rey
Una vez que tenga el namespace de instancia de esquema XML:

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

Puede utilizar el atributo schemaLocation, para la ubicación del esquema XML a usar para ese namespaces:

xsi:schemaLocation="https://www.w3schools.com note.xsd"

XSD elementos simples

Un elemento simple es un elemento XML que contiene solo texto. No puede contener ningún otro
elemento o atributo.

El texto puede ser de muchos tipos diferentes. Puede ser uno de los tipos incluidos en la definición de
esquema XML (booleano, cadena, fecha...), o puede ser un tipo personalizado que puede definir usted
mismo.

También puede agregar restricciones (facets) a un tipo de datos para limitar su contenido, o puede requerir
que los datos coincidan con un patrón específico.

Definiendo un elemento simple


La sintaxis para definir un elemento simple es:

<xs:element name="xxx" type="yyy"/>

El esquema XML tiene muchos tipos de datos incorporados. Los tipos más comunes:

 xs:string
 xs:decimal
 xs:integer
 xs:boolean
 xs:date
 xs:time

Ejemplo
<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>

XSD:

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


<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>

LII
Alejandro Rodríguez Rey
Valores predeterminados y fijos para elementos simples
Un valor predeterminado se asigna automáticamente al elemento cuando no se especifica ningún otro valor:

<xs:element name="color" type="xs:string" default="red"/>

También se puede asignar automáticamente un valor fijo al elemento, y no puede especificar otro valor.

<xs:element name="color" type="xs:string" fixed="red"/>

Atributos de XSD

Todos los atributos son declarados como tipos simples.

¿Qué es un atributo?
Los elementos simples no pueden tener atributos, si un elemento tiene atributos, se considera de tipo
complejo. El atributo en sí siempre se declara como un tipo simple.

¿Cómo definir un atributo?


Aquí hay un elemento XML con un atributo:

<lastname lang="EN">Smith</lastname>

Y aquí está la definición del atributo correspondiente:

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

Valores predeterminados y fijos para los atributos


En el siguiente ejemplo, el valor predeterminado es "EN":

<xs:attribute name="lang" type="xs:string" default="EN"/>

En el siguiente ejemplo, el valor fijo es "EN":

<xs:attribute name="lang" type="xs:string" fixed="EN"/>

LIII
Alejandro Rodríguez Rey
Atributos opcionales y requeridos
Los atributos son opcionales. Para especificar su uso obligatorio use="required":

<xs:attribute name="lang" type="xs:string" use="required"/>

Restricciones / facets de XSD

Las restricciones se utilizan para definir valores aceptables para elementos o atributos.

Restricciones en los valores


Valor mínimo y máximo:

<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Restricciones en un conjunto de valores


Valores aceptados:

<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

El ejemplo anterior también podría haber sido escrito así:

<xs:element name="car" type="carType"/>


<xs:simpleType name="carType">

LIV
Alejandro Rodríguez Rey
Restricciones en una serie de valores
Restricción de patrón:

<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>

<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
</xs:restriction>

<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
</xs:restriction>

UNA de las siguientes letras: x, y, z:

<xs:restriction base="xs:string">
<xs:pattern value="[xyz]"/>
</xs:restriction>

CINCO dígitos de 0 a 9:

<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
</xs:restriction>

Otras restricciones sobre una serie de valores


Cero o más de letra minúsculas de la A a la Z:

<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>

Uno o más pares de letras, cada par es una letra minúscula seguida de una letra mayúscula:

<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>

Condición OR:

<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>

LV
Alejandro Rodríguez Rey
Debe haber exactamente ocho caracteres y deben ser letras minúsculas, mayúsculas o números del 0 al 9:

<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>

Restricciones en los caracteres de espacio en blanco


Especificar cómo manejar caracteres de espacio en blanco, usaríamos la restricción whiteSpace.

La restricción whiteSpace está configurada para "preservar" los espacios:

<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>

Reemplaza todos los caracteres de espacios en blanco (líneas, tabulaciones, espacios y retornos de carro)
con espacios: yy

<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>

Contraer: Los avances de línea, las pestañas, los espacios y los retornos de carro se reemplazan con
espacios; los espacios iniciales y finales se eliminan; los espacios múltiples se reducen a un solo espacio:

<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>

Restricciones en la longitud
Para limitar la longitud de un valor en un elemento, utilizaríamos las restricciones length, maxLength y
minLength.

<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>

<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>

LVI
Alejandro Rodríguez Rey
Restricciones para tipos de datos
Constraint Description

enumeration Defines a list of acceptable values

Specifies the maximum number of decimal places allowed. Must be equal to or


fractionDigits
greater than zero

Specifies the exact number of characters or list items allowed. Must be equal to or
length
greater than zero

maxExclusive Specifies the upper bounds for numeric values, must be less than this value

Specifies the upper bounds for numeric values, must be less than or equal to this
maxInclusive
value

Specifies the maximum number of characters or list items allowed. Must be equal
maxLength
to or greater than zero

minExclusive Specifies the lower bounds for numeric values, must be greater than this value

Specifies the lower bounds for numeric values, must be greater than or equal to
minInclusive
this value

Specifies the minimum number of characters or list items allowed. Must be equal
minLength
to or greater than zero

pattern Defines the exact sequence of characters that are acceptable

totalDigits Specifies the exact number of digits allowed. Must be greater than zero

whiteSpace Specifies how white space is handled

LVII
Alejandro Rodríguez Rey

También podría gustarte