Documentos de Académico
Documentos de Profesional
Documentos de Cultura
XML
Información recopilada de W3SCHOOLS
I
Alejandro Rodríguez Rey
UD 1. HISTORIA DE INTERNET
1945 MEMEX (Dispositivo fotoeléctrico) – Vannevar Bush
1971 15 nodos
37 nodos
Termino Internet
1990 Primer navegador y editor gráfico de hipertexto (para NeXTStep OS) – Tim Berners-Lee
1994 NCSA Mosaic forma compañía que pasará a llamarse Netscape (lanza Netscape Navigator)
1999 HTML 4
2014 HTML 5
MathML
1983
2000, 2015
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 ser a la vez legible por máquinas y humanos.
Es importante (para todo tipo de desarrolladores de software!) tener una buena comprensión de XML.
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
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
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).
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...
V
Alejandro Rodríguez Rey
XML separa los datos de presentación
XML no lleva ninguna información sobre como mostrarse.
Debido a esto, con XML, hay una separación completa entre los datos y la presentación.
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.
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.
Los padres tienen hijos. Los hijos tienen padres. Los hermanos son hijos en el mismo nivel.
Sintaxis auto-descriptiva
Un prólogo define la versión de XML y la codificación de caracteres:
<bookstore>
<book category="cooking">
Los elementos <libros> tienen 4 elementos secundarios: <title>, <autor>, <año>, <precios>.
</book>
Se puede suponer, a partir de este ejemplo, que el documento XML contiene información sobre los libros en una librería.
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:
El prólogo XML es opcional. Si existe, tiene que venir al principio del documento.
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.
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.
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>
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
texto
atributos
otros elementos
o una mezcla de los anteriores
<element></element>
<element />
X
Alejandro Rodríguez Rey
Las mejores prácticas de nomenclatura
Crear nombres descriptivos.
Evitar "-".
Evitar ".".
Estilos de nomenclatura
No hay estilos de nombres definidos para elementos XML. Pero estos son algunos de uso común:
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.
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 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.
Los metadatos (datos sobre los datos) deben ser almacenados como atributos y los datos en sí deben ser almacenados como
elementos.
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.
<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.
<f:table xmlns:f="https://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
</f:table>
Sin embargo, las empresas suelen utilizar el namespace como un puntero a una página web que contiene información.
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).
XIII
Alejandro Rodríguez Rey
XML Display
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".
Sin información sobre cómo mostrar los datos, los navegadores solo pueden mostrar el documento XML tal como está.
XIV
Alejandro Rodríguez Rey
UD 3. XSLT
XSLT Introducción
XSL (Extensible Stylesheet Language) es un lenguaje de estilo para XML.
El World Wide Web Consortium (W3C) comenzó a desarrollar XSL porque se necesitaba un lenguaje de hojas de
estilo basado en XML.
XV
Alejandro Rodríguez Rey
XSL - más que un lenguaje de hojas de estilo
XSL consta de cuatro partes:
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 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.
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.
XSLT - Transformación
¿Cómo transformar XML en XHTML mediante XSLT?
o:
Para obtener acceso a los elementos, atributos y características de XSLT, debemos declarar el namespace
XSLT en la parte superior del documento.
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:
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).
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.
= (Igual)
! = (No igual)
< menor que
> mayor que
<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>
XIX
Alejandro Rodríguez Rey
XSLT <xsl:if test="xxx"> element
El elemento <xsl:if> se utiliza como en programación.
Sintaxis
<xsl:choose>
<xsl:when test="expression">
... some output ...
</xsl:when>
<xsl:otherwise>
... some output ....
</xsl:otherwise>
</xsl:choose>
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.
Las expresiones XPath se pueden usar en JavaScript, Java, esquema XML, PHP, Python, C y C ++, y
muchos otros idiomas.
/bookstore/book[1]/title
/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.
Valores atómicos
J K. Rowling
"en"
Artículos
Relación de Nodos
Padre
Hijo
Los nodos del elemento pueden tener cero, uno o más hijos.
Los hermanos
XXII
Alejandro Rodríguez Rey
Los antepasados
Descendientes
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.
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
Wildcard Description
* Matches any element node
@* Matches any attribute node
node() Matches any node of any kind
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
Selects everything in the document after the closing tag of the current
following
node
Selects all nodes that appear before the current node in the document,
preceding
except ancestors, attribute nodes and namespace nodes
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/...
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)
axisname::nodetest[predicate]
Ejemplos
Example Result
child::book Selects all book nodes that are children 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
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
+ Addition 6+4
- Subtraction 6-4
* Multiplication 6*4
= Equal price=9.80
or or price=9.80 or price=9.70
Ejemplos de XPath
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 y XPath
XQuery 1.0 y XPath 2.0 comparten el mismo modelo de datos y admiten las mismas funciones y operadores.
Ejemplo de XQuery:
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
XXVIII
Alejandro Rodríguez Rey
Ejemplo de XQuery
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]
¿Qué es FLWOR?
FLWOR es un acrónimo de "For, Let, Where, Order by, Return".
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.
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>
<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
Sintaxis de XQuery
XXXI
Alejandro Rodríguez Rey
Expresiones condicionales de XQuery
Las expresiones "If – Then – Else" están permitidas en XQuery.
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>
Comparaciones de XQuery
En XQuery hay dos formas de comparar valores.
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
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
<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li>{data($x/title)}. Category: {data($x/@category)}</li>
}
</ul>
<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 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:
También se permite con más de una expresión en la cláusula for. Use una coma para separar cada expresión:
Resultado:
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:
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.
Ejemplo 1: en un elemento
<name>{upper-case($booktitle)}</name>
doc("books.xml")/bookstore/book[substring(title,1,5)='Harry']
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 ...
};
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.
Una aplicación puede usar una DTD para verificar que los datos XML son válidos.
<?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>
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>
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.
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.
XXXVIII
Alejandro Rodríguez Rey
Entidades
Entidad “espacio” en HTML: " ".
Algunos caracteres tienen un significado especial en XML, por ello las siguientes entidades están
predefinidas en XML:
< <
> >
& &
" "
' '
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
& < y >.
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
Elementos vacios
Los elementos vacíos se declaran con la palabra clave EMPTY:
Cuando los niños se declaran en una secuencia separada por comas, los niños deben aparecer en la misma
secuencia en el documento.
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".
El signo + declara que el elemento hijo debe aparecer una o más veces dentro del elemento "nota".
El signo * declara que el elemento hijo puede aparecer cero o más veces dentro del "nota".
Esto ? declara que el elemento hijo puede aparecer cero o una vez dentro de "nota".
Declara que el elemento "nota" debe contener un elemento "to", un elemento "from", un elemento "header"
y un elemento "message" o "body".
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
XML example:
Type Description
( en1 | en2 |..) The value must be one from an enumerated list
Value Explanation
XLII
Alejandro Rodríguez Rey
Un valor de atributo predeterminado
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">
Valid XML:
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:
Invalid XML:
<person />
#IMPLIED
<!ATTLIST contact fax CDATA #IMPLIED>
Valid XML:
<contact />
XLIII
Alejandro Rodríguez Rey
#FIXED
<!ATTLIST sender company CDATA #FIXED "Microsoft">
Valid XML:
Invalid XML:
Un atributo tenga un valor fijo sin permitir que el autor lo cambie. Si se incluye otro valor, devolverá un
error.
XML example:
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.
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
XML example:
<author>©right;</author>
Nota: Una entidad tiene tres partes: un ampersand (&), un nombre de entidad y un punto y coma (;).
XML example:
<author>©right;</author>
XLV
Alejandro Rodríguez Rey
Ejemplos de DTD
Horario de TV DTD
<!DOCTYPE TVSCHEDULE [
XLVI
Alejandro Rodríguez Rey
Catálogo de productos DTD
<!DOCTYPE CATALOG [
<!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">
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).
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.
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.
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"
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.
<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"
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"
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.
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:
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:
También se puede asignar automáticamente un valor fijo al elemento, y no puede especificar otro valor.
Atributos de XSD
¿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.
<lastname lang="EN">Smith</lastname>
LIII
Alejandro Rodríguez Rey
Atributos opcionales y requeridos
Los atributos son opcionales. Para especificar su uso obligatorio use="required":
Las restricciones se utilizan para definir valores aceptables para elementos o atributos.
<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>
<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>
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>
<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>
<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>
<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
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
totalDigits Specifies the exact number of digits allowed. Must be greater than zero
LVII
Alejandro Rodríguez Rey