xml, parte 2mtovar.cs.buap.mx/doc/wso/websem2.pdf alentar el aceite en … o después de él, ...

97
XML, parte 2

Upload: others

Post on 28-Mar-2021

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

XML, parte 2

Page 2: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Tipos de documentos XML Los documentos XML pueden ser documentos "válidos" o documentos "bien formados".

Un documento válido, es un documento que está asociado a un conjunto de reglas que definen su estructura lógica. El documento se certifica conforme a estas reglas que en conjunto reciben el nombre de "Definición de tipo de documento" (DTD).

Un documento bien formado, sigue las reglas de sintaxis especificadas para el lenguaje XML, pero no dispone de reglas de certificación asociadas. Un documento bien formado puede ser muy simple, todo lo que necesita contener son elementos de datos.

Page 3: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Documentos XML bien formados

Estructura jerárquica: Los documentos XML deben seguir entonces una estructura jerárquica respecto a las etiquetas que delimitan sus elementos.

Una etiqueta debe estar correctamente incluida en otra y los elementos con contenidos deben estar correctamente cerrados:

Page 4: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Arbóles Ejemplo

<person>

<name>

<first_name>Alan</first_name>

<last_name>Turing</last_name>

</name>

<profession>

computer scientist

</profession>

<profession>

Mathematician

</profession>

<profession>

Cryptographer

</profession>

</person>

Page 5: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejercicio Obtenga el archivo XML de:

Page 6: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Solución propuesta <?xml version=“1.0”?>

<!DOCTYPE MENSAJE SYSTEM “mensaje.dtd”>

<mensaje>

<remite>

<nombre> Alfredo Reino </nombre>

<email> [email protected] </email>

</remite>

<destinatario>

<nombre> Bill Clinton </nombre>

<email> [email protected] </email>

</destinatario>

<asunto> Hola Bill </asunto>

<texto>

<parrafo>

Hola que tal, Hace <enfasis> mucho </enfasis> que

no tienes popularidad entre tu gente.

</parrafo>

</texto>

</mensaje>

Page 7: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejercicio Probar en el navegador el siguiente archivo xml:

<libros> <autor pais="Uruguay">Leo

Masliah</libros></autor>

Page 8: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejercicio <libros> <autor pais="Uruguay">Leo

Masliah</libros></autor>

<libros> <autor pais="Uruguay">Leo

Masliah</autor></libros>

Page 9: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Reglas y pautas XML Los documentos deben tener un nodo raíz

Todas las etiquetas deben estar debidamente cerradas

Las etiquetas vacías (etiquetas sin contenido) deben tener una sintaxis especial

Ejemplo: probar en el navegador el siguiente archivo xml.

<libros><autor pais="Uruguay">Leo

Masliah<Ranking=100></autor></libros>

Page 10: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Reglas y pautas XML

<libros><autor pais="Uruguay">Leo

Masliah<Ranking=100></autor></libros>

Page 11: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Propuesta de solución

<libros><autor pais="Uruguay">Leo Masliah

<popularidad ranking="100"/></autor></libros>

<libros><autor pais="Uruguay">Leo Masliah

</autor><popularidad ranking="100"/></libros>

<libros><autor pais="Uruguay" ranking="100">Leo

Masliah </autor></libros>

<libros><autor pais="Uruguay">Leo Masliah

<ranking/></autor></libros>

Page 12: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Etiquetas vacías Las etiquetas vacías se utilizan para indicar elementos que no tienen contenido textual, aunque pueden tener atributos.

Los elementos HTML img y br son ejemplos de elementos vacíos.

Las etiquetas vacías tienen el mismo aspecto que las etiquetas de apertura, pero incluyen una barra diagonal (/) antes del cierre >.

<elementName att1Name="att1Value“ att2Name="att2Value".../>

Page 13: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Atributos Los atributos permiten añadir información sobre un elemento mediante pares de nombre-valor.

Los atributos se suelen utilizar para definir propiedades de elementos que no se consideran en el contenido del elemento.

Los atributos pueden aparecer en etiquetas de apertura o vacías, pero no en las etiquetas de cierre.

Sintaxis:

<elementName att1Name="att1Value"

att2Name="att2Value"...>

<elementName att1Name="att1Value"

att2Name="att2Value".../>

Page 14: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Atributos Los atributos deben tener un nombre y un valor.

No se permite un nombre sin un valor.

Un elemento no puede tener dos atributos con el mismo nombre.

Como XML no considera importante el orden en que aparecen los atributos dentro de un elemento, es posible que el analizador XML no lo conserve.

Al igual que los nombres de los elementos, los nombres de los atributos distinguen mayúsculas y minúsculas y deben empezar por una letra o un carácter de subrayado. El resto del nombre puede contener letras, números, guiones, caracteres de subrayado y puntos.

Page 15: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Atributos Los valores de atributo solo pueden contener texto, no pueden incluir elementos de marcado.

XML permite utilizar comillas simples o dobles para indicar atributos, aunque el tipo de comillas utilizado debe ser el mismo a ambos lados del valor de atributo.

Los analizadores XML rechazarán los documentos que no utilicen comillas alrededor de los valores de los atributos y generarán un error.

Si se utilizan comillas simples para indicar un valor de atributo, se deben incluir las comillas simples dentro del valor de atributo utilizando &apos;. <simbolo contraccion='isn&apos;t' />

<simbolo pregunta="They asked

&quot;Why?&quot;" />

<simbolo contraccion="isn't" />

<simbolo pregunta='They asked "Why?"' />

Page 16: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Las entidades en XML

Entidad Carácter

&amp; &

&lt; <

&gt; >

&apos; ‘

&quot; “

Page 17: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejercicio Pruebe en el navegador:

<introduccion_html>

El documento HTML mas sencillo se

muestra en el listado 4.2. El

documento completo esta encerrado

entre las etiquetas <HTML> y </HTML>.

La primera parte del documento esta

formado por una cabecera que comienza

con la etiqueta <HEAD> y que incluye

el titulo de la pagina, delimitado por

las etiquetas <TITLE> y </TITLE>.

</introduccion_html>

Page 18: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Resultado El resultado al abrir este documento en el navegador es el siguiente:

El navegador muestra un mensaje de error. Debido a que las etiquetas: “<HTML>”, “</HTML”, “<HEAD>”, “<TITLE>” y “</TITLE>”, se interpretan como marcado.

Para evitar esto se deben usar las entidades de XML.

Page 19: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Solución Para solucionar esto evitamos ciertos caracteres como < con &lt;.

<introduccion_html>

El documento HTML mas sencillo se muestra en el

listado 4.2. El documento completo esta encerrado

entre las etiquetas &lt;HTML> y &lt;/HTML>. La

primera parte del documento esta formado por una

cabecera que comienza con la etiqueta &lt;HEAD> y

que incluye el titulo de la pagina, delimitado por

las etiquetas &lt;TITLE> y &lt;/TITLE>.

</introduccion_html>

Page 20: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Secciones CDATA Otra forma de ingresar un bloque de caracteres sin que el procesador XML los interprete, es utilizando los bloques CDATA (Character Data)

Ejemplo: Sin una sección CDATA

<ejemplo>

&lt;HTML&gt;

&lt;BODY&gt;

Hola, esto es un documento html dentro de uno XML

&lt;/BODY&gt;

&lt;/HTML&gt;

</ejemplo>

Page 21: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Secciones CDATA Con una sección CDATA

<ejemplo>

<![CDATA[

<HTML>;

<BODY>

Hola, esto es un documento html dentro de

uno XML

</BODY>

</HTML>

]]>

</ejemplo>

Page 22: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Secciones CDATA Las secciones CDATA son una forma cómoda de escapar textos, o de indicar al procesador XML que un determinado texto no debe ser interpretado como marcado.

No hay anidamiento de secciones CDATA

No pueden contener datos binarios.

Se consideran como información que debe pasarse a las aplicaciones, a diferencia de los comentarios que no se consideran datos carácter, y el procesador XML no tiene la obligación de pasarlos.

Sintaxis: ◦ Inician con: <![CDATA [

◦ Y terminan con: ]]>

Ejemplo: ◦ <![CDATA [ Este es un texto que puede ser <HTML> ]]>

Page 23: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Comentarios Los comentarios tienen el mismo formato que los comentarios en HTML, comienzan por

<!-- y terminan con -->.

Se pueden introducir comentarios en cualquier lugar de la instancia o del prólogo, pero nunca dentro de las declaraciones, etiquetas u otros comentarios.

Page 24: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Comentarios Antes del elemento documento:

<!– Esto es un comentario que aparece antes del elemento documento --> <Receta> Calentar el aceite en … </Receta>

O después de él, <Receta> Calentar el aceite en … </Receta> <!– Esto es un comentario que aparece posteriormente a elemento documento -->

Entre el contenido de un elemento, <Receta> Calentar <!-- Esto es un comentario en el contenido --> el aceite en …

</Receta>

Pero no dentro de una etiqueta <Receta <!-- Esto es un comentario en mal sitio -->> Para freír un huevo, …</Receta>

Tampoco antes de la declaración XML <!- - Ejemplo de mala formación --> <?xml version=“1.0” encoding= “UTF-8” standalone=“yes” ?> <Noticia> … </Noticia>

Page 25: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejercicios Construir un archivo xml, que incluya un catálogo de películas (cartelera). Los elementos que puede considerar son: Título, idioma, duración, horarios, clasificación de la película. Añada otros elementos o atributos que considere importantes.

Construir un archivo xml, que incluya por lo menos sus 10 canciones favoritas, añada elementos y atributos que considere representativos de las canciones.

Construir una lista de 10 libros de Web semántica, proponga por lo menos 10 elementos que los representen.

Page 26: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Intercambio de Datos en XML Los datos son relativamente simples de leer y editar con un simple editor de texto.

Relaciones complejas (árboles, herencia) pueden ser comunicadas Tags son auto-descriptivas, leídas por humanos.

Validación de datos automática

Page 27: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Despliegue Tradicional de Documentos

HTML Contenido e interfase gráfica mezclados

Buscar información en los datos es pesado

Los contenidos están ‘atados’ a la lógica y lenguaje HTML

Los Tags son genéricos por naturaleza

Page 28: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Despliegue de Documentos XML

Significado de los tags es manejado por XSL Instrucciones para transformar un tipo de

documento en otro

Transformación común XML -> HTML

Un archivo XML puede ser enlazado a varios archivos XSL El contenido de un archivo puede ser ‘renderizado’

para Web, impresión, celulares, etc.

Separación de la presentación y el contenido

Page 29: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Aplicaciones que procesan XML Verifican que documentos XML cumplan con los Standard para ser “bien formados”

Validan en base a las definiciones especificadas en un DTD

Transforman los datos basadas en instrucciones XSL (Extensible Stylesheet Language)

Page 30: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces

Page 31: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces El espacio de nombres de XML proporciona un método para evitar conflictos de nombres de elementos.

Ejemplo: Problema

<table>

<tr>

<td>Apples</td>

<td>Bananas</td>

</tr>

</table>

<table>

<name>African Coffee Table</name>

<width>80</width>

<length>120</length>

</table>

<table>

<tr>

<td>Apples</td>

<td>Bananas</td>

</tr>

</table>

<table>

<name>African Coffee Table</name>

<width>80</width>

<length>120</length>

</table>

Page 32: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces Conflictos de nombre

En XML, los nombres de elementos se definen por el desarrollador.

Esto a menudo resulta en un conflicto al intentar mezclar documentos XML a partir de diferentes aplicaciones XML.

Ejemplo: Este XML lleva información de la tabla HTML:

<table>

<tr>

<td>Apples</td>

<td>Bananas</td>

</tr>

</table>

Page 33: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces Este XML lleva información sobre una mesa (un mueble):

Si se juntan estos fragmentos XML, habría un conflicto de nombres.

Ambos contienen un elemento <table>, pero los elementos tienen diferente contenido y significado.

Un usuario o una aplicación XML no sabrán cómo manejar estas diferencias.

<table>

<name>African Coffee Table</name>

<width>80</width>

<length>120</length>

</table>

Page 34: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces Resolviendo el conflicto usando un prefijo:

<h:table>

<h:tr>

<h:td>Apples</h:td>

<h:td>Bananas</h:td>

</h:tr>

</h:table>

<f:table>

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

<f:width>80</f:width>

<f:length>120</f:length>

</f:table>

Page 35: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces Al utilizar prefijos en XML, un espacio de nombres para el prefijo se debe definir.

El espacio de nombres puede ser definido por un atributo xmlns en la etiqueta inicial de un elemento.

La declaración de espacio de nombres tiene la siguiente sintaxis. xmlns: prefix = "URI"

<root> <h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table xmlns:f="http://www.w3schools.com/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root>

Page 36: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces El atributo xmlns en el primer elemento <table> da el prefijo h: a un espacio de nombres calificado.

El atributo xmlns en el segundo elemento <table> da el prefijo f: a un espacio de nombres calificado.

Cuando un espacio de nombres se define para un elemento, todos los elementos hijos con el mismo prefijo se asocian con el mismo espacio de nombres.

<root> <h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table xmlns:f="http://www.w3schools.com/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root>

Page 37: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces Los espacios de nombres también pueden ser declarados en el elemento raíz XML:

<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture"> <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root>

Page 38: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces Nota: El URI del espacio de nombres no es utilizado por el analizador para buscar información.

El propósito de usar un URI es dar al espacio de nombres un nombre único.

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

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 Uniform Resource Locator (URL) que identifica una dirección de dominio de Internet.

Page 39: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces por default La definición de un espacio de nombres predeterminado para un elemento que nos ahorra el uso de prefijos en todos los elementos hijos, tiene la siguiente sintaxis:

xmlns="namespaceURI"

Este XML lleva información de la tabla HTML:

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

Page 40: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

NameSpaces por default Este XML lleva información sobre un mueble:

<root xmlns:f="http://www.w3schools.com/furniture"> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root>

Page 41: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Definition Type Document (DTD)

Declaración de Tipos de Documento

Page 42: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Definition Type Document Un DTD (Definición de tipo de documento) es una colección de reglas usadas con el propósito de identificar un tipo o clase de documento.

Por ejemplo, podemos escribir una gran cantidad de informes, pero en general algunos de ellos tendrán una serie de puntos en común.

Los informes pueden contener: ◦ el nombre del autor,

◦ el nombre del sujeto a quien se refiere el informe,

◦ quizás una lista de distribución,

◦ un número de referencia,

◦ fecha de creación,

◦ título del informe,

◦ títulos de secciones,

◦ gráficos, etc.

Page 43: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Definition Type Document El DTD realiza las siguientes tareas:

◦ Define todos los elementos (nombres de etiquetas) que pueden aparecer en el documento.

◦ Define las relaciones establecidas entre los distintos elementos.

◦ Suministra información adicional que puede ser incluida en el documento: Atributos, Entidades y Notaciones.

◦ Aporta comentarios e instrucciones para su procesamiento.

Page 44: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD Un DTD es como crear un lenguaje de marcado propio, para una aplicación específica. Podríamos definir entonces un DTD para crear una tarjeta de visita.

A partir de este DTD, tendríamos una serie de elementos XML que nos permitirían definir éste tipo de tarjetas.

Un DTD define los tipos de elementos, atributos y entidades permitidas y expresa algunas restricciones para su combinación.

Los documentos XML que siguen las reglas de un DTD se denominan como ya se ha citado, “documentos válidos”.

Por tanto un documento “bien formado” puede ser además un “documento válido” si cumple con las reglas de un DTD determinado.

Los documentos XML que carecen de DTD son llamados simplemente “documentos bien formados”.

Un DTD puede residir en un archivo externo o bien, puede estar contenido dentro del propio documento XML, como parte de su declaración de tipo de documento:

Page 45: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejemplo <! DOCTYPE etiqueta [

<! ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)>

<!ELEMENT nombre (#PCDATA)>

<!ELEMENT calle (#PCDATA)>

<!ELEMENT ciudad (#PCDATA)>

<!ELEMENT pais (#PCDATA)>

<!ELEMENT codigo (#PCDATA)>

]>

<etiqueta>

<nombre> Fulanito De Tal </nombre>

<calle> C/Mayor, 27 </calle>

<ciudad> Puebla </ciudad>

<pais> México </pais>

<codigo> 123456 </codigo>

</etiqueta>

Page 46: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD La declaración del DTD comienza en la primera línea del código anterior y termina con ]>.

Las declaraciones DTD son las líneas que empiezan con “<!ELEMENT” y se denominan declaraciones de tipo elemento.

También se pueden declarar atributos, entidades y notaciones.

En este ejemplo, todas las declaraciones DTD que definen “etiqueta” residen dentro del documento.

No obstante, el DTD se puede definir en otro lugar, por ejemplo:

Page 47: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD

<?xml version=”1.0”?>

<! DOCTYPE coche SYSTEM

http://www.sitio.com/dtd/coche.dtd>

<coche>

<modelo> . . . </modelo>

. . .

. . .

. . .

</coche>

Page 48: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Definition Type Document Es preciso especificar los elementos válidos que pueden ser incluidos en un documento XML. Las dos formas más comunes de especificar definiciones son:

◦ DTD

◦ XML Schema

Son documentos basados en XML que: ◦ Describen la estructura del documento XML.

◦ Declara y define todos los tipos de elementos del documento.

◦ Define el orden de los tipos de elementos.

◦ Especifica el tipo de atributos y los valores por defecto.

Importancia a la hora de transferir datos entre sistemas. El DTD/XML Schema especifica a los sistemas la estructura de datos que es transferida mediante XML.

Page 49: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Documento válido Se puede incluir una declaración del tipo de documento.

Documento válido, Está bien formado y

La estructura encaja con la declaración del tipo de documento

<?xml version=“1.0”?>

<!DOCTYPE pizzas SYSTEM pizzas.dtd">

<pizzas>

<pizza nombre="Margarita" precio="6">

<ingrediente nombre="Tomate" />

</pizza>

</pizzas>

<!ELEMENT pizzas (pizza*)>

<!ELEMENT pizza (ingrediente*)>

<!ELEMENT ingrediente (#PCDATA)>

<!ATTLIST pizza nombre CDATA

#REQUIRED>

<!ATTLIST pizza precio CDATA

#REQUIRED>

<!ATTLIST ingrediente nombre

CDATA #REQUIRED>

Page 50: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD

En este ejemplo, gracias a DTD, se especifica que una libreta de direcciones se compone

de personas (registros), definiendo los campos válidos de cada registro

Page 51: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD Nos permite definir los tipos de elementos válidos de un documento XML.

Nos sirve para validar el documento XML. Hay que examinar la adecuación de un documento XML en dos niveles:

◦ Cuando el documento cumple con la DTD se dice que es “válido”.

◦ Cuando cumple con las reglas XML diremos que está “bien formado”.

Tipos de DTD: ◦ Internas: situadas dentro del documento XML

◦ Externas: archivo independiente

Las DTD no siguen la sintaxis de XML

Page 52: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD Tanto las DTD internas como las externas deben empezar por una declaración DOCTYPE:

<!DOCTYPE root SYSTEM externalDTD [internalDTD]>

◦ Root: elemento raíz del documento XML. ◦ externalDTD: la DTD es externa. Debe señalar el archivo entre comillas dobles y tener

la extensión .dtd ◦ Ejemplo:

<!DOCTYPE libreria SYSTEM “librería.dtd”>

◦ internalDTD: por defecto, interna. ◦ Ejemplo:

<!DOCTYPE libreria [

<!ELEMENT libro (#PCDATA)>

]>

El elemento raíz señalado en DOCTYPE debe coincidir con el nodo raíz del documento.

La DTD debe contener todos los elementos, atributos y entidades que se utilizarán en el documento XML

Page 53: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejemplo DTD

libreria2.dtd

libreria2.xml

Page 54: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Declaraciones tipo elemento Los elementos son la base de las marcas XML y deben ajustarse a un tipo de documento declarado en un DTD para que el documento XML sea considerado un documento valido.

Una declaración de tipo elemento empieza con “<! ELEMENT” seguido por el identificador genérico del elemento que se declara.

A continuación tienen una especificación de contenido: ◦ <! ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)>

◦ En este ejemplo <etiqueta> puede contener dentro, elementos como <nombre>, <calle>, <ciudad>, <pais> y <codigo>, que a su vez estarán definidos también en el DTD y que podrán contener más elementos.

Page 55: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Declaraciones tipo elemento La especificación de contenido puede ser de 4 tipos:

EMPTY: Puede no tener contenido. Suele usarse para los atributos:

<! ELEMENT salto-de-pagina EMPTY>

ANY: Puede tener cualquier contenido. Este tipo suele no utilizarse pues es conveniente estructurar adecuadamente los documentos XML:

<! ELEMENT lo-que-sea ANY>

Page 56: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Declaraciones tipo elemento MIXED: Con este tipo de especificación se pueden tener caracteres de tipos de datos o una mezcla de caracteres y sub-elementos especificados en la especificación de contenido mixto:

<! ELEMENT enfasis (#PCDATA)>

<! ELEMENT parrafo (#PCDATA|enfasis)*> ◦ En este ejemplo, el primer elemento definido puede contener datos de

carácter (#PCDATA), en tanto que el segundo puede contener tanto datos de carácter (#PCDATA) como sub-elementos de tipo <enfasis>.

ELEMENT: Sólo puede contener subelementos especificados en la especificación de contenido:

<! ELEMENT mensaje (remite, destinatario, texto)>

Page 57: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Modelos de contenido Un modelo de contenido es un patrón que establece los sub-elementos aceptados, y el orden en que se acepta:

Un modelo sencillo puede tener un solo tipo de sub-elemento: <! ELEMENT aviso (parrafo)>

◦ Esto indica que <aviso> sólo puede contener un solo <parrafo>

La coma, en este caso denota secuencia: <! ELEMENT aviso (titulo, parrafo)>

◦ Es decir, el elemento <aviso> debe contener un <titulo> seguido de un <parrafo>.

Page 58: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Modelos de contenido La barra vertical “|” indica una opción:

<! ELEMENT aviso (parrafo | grafico)>

◦ Es decir, <aviso> puede contener o bien un <parrafo> o bien un <grafico>. El número de opciones no esta limitado a dos y se pueden agrupar usando paréntesis:

<! ELEMENT aviso (titulo, (parrafo | grafico))>

◦ En este último caso, el <aviso> debe contener un <titulo> seguido de un <parrafo> o de un <grafico>.

Page 59: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Indicadores de Frecuencia

? Opcional (0 ó 1 vez)

* Opcional y repetible (0 o más veces)

+ Necesario y repetible (1 ó más veces)

Además, cada partícula de contenido puede llevar un indicador de frecuencia, que siguen

directamente a un identificador general, una secuencia o una opción, y no pueden ir precedidos por espacios en blanco:

Por ejemplo: <! ELEMENT aviso (titulo?, (parrafo+, grafico)*)>

◦ En este caso <aviso> puede tener <titulo> o no (pero sólo uno), y puede tener cero o más conjuntos <parrafo><grafico>, <parrafo><parrafo><grafico>, etc.

Modelos de contenido

Page 60: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD: Ejemplo de la librería Supongamos que queremos definir la estructura de una biblioteca donde los libros pueden tener varios autores y donde algunos libros tienen una rebaja del precio.

◦ DTD: <!ELEMENT libreria3 ( libro+ ) >

<!ELEMENT libro ( autor*, titulo, precio,rebaja? ) >

<!ELEMENT autor ( #PCDATA ) >

<!ELEMENT titulo ( #PCDATA ) >

<!ELEMENT precio ( #PCDATA ) >

<!ELEMENT rebaja ( #PCDATA ) >

◦ Esta definición permite el siguiente documento XML: <libro>

<autor>Miguel De Cervantes</autor>

<titulo>El Quijote</titulo>

<precio>18</precio>

</libro>

<libro>

<autor>Antonio Lopez</autor>

<autor>Ana Perez</autor>

<titulo>Cómo crecer</titulo>

<precio>25</precio>

<rebaja>10%</rebaja>

</libro>

Page 61: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD La DTD permite especificar la estructura del documento

La DTD puede estar separada del documento

http://www.validome.org/grammar/validate/

Page 62: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD

Page 63: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Tipos de declaraciones ELEMENT

◦ Elementos del documento XML

ATTLIST ◦ Lista de atributos de un elemento

ENTITY ◦ Entidades (≈ variables o macros)

Page 64: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Elementos (?) = 0, 1 elemento

(*) = 0 ó más elementos

(+) = 1 ó más elementos

(|) = alternativa

(,) = secuencia

EMPTY = vacío

ANY = cualquier estructura de subelementos

#PCDATA = cadena de caracteres analizados

<!ELEMENT pizza (ingrediente*, inventor?)>

<!ELEMENT servicio (domicilio | restaurante) >

<!ELEMENT ingrediente EMPTY>

<!ELEMENT inventor (#PCDATA)>

<!ELEMENT seccion (titulo, (contenido |

seccion+))>

<!ELEMENT p (#PCDATA | a | ul | em )* >

PCDATA = Parsed

Character Data

Indica que los datos son

analizados buscando

etiquetas

Page 65: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD - Atributos Tipos de datos CDATA = Cadena de caracteres NMTOKEN = Palabra (sin espacios) NMTOKENS = Lista de palabras Enumeración separada por | ID = Nombre único (sin duplicados) IDREF = Su valor debe apuntar a un ID

Valor de los Atributos #REQUIRED Obligatorio #IMPLIED Opcional #FIXED Constante Value Valor por defecto

<!ATTLIST pizza nombre CDATA #REQUIRED>

<!ATTLIST ingrediente nombre CDATA

#REQUIRED

calorías CDATA #IMPLIED>

<!ATTLIST precio moneda (euros|dolares)

#REQUIRED

valor CDATA #REQUIRED>

<!ATTLIST persona codigo ID #REQUIRED>

<!ATTLIST dueño codigo IDREF #REQUIRED>

<!ATTLIST ingrediente conOregano (si|no)

“si” >

<!ATTLIST impuesto tipo CDATA #FIXED

“IVA”>

<pizza nombre=“4 estaciones” >

<ingrediente nombre=“Jamon” />

<precio moneda=“euros” valor=“7”

/>

</pizza>

<persona codigo=“23” nombre

=“Juan” />

<persona codigo=“35” nombre

=“Pepe” />

<persona codigo=“37” nombre

=“Luis” />

<dueño codigo=“35” />

<impuesto tipo=“IVA” />

<!ATTLIST pizza nombre CDATA #REQUIRED>

<!ATTLIST ingrediente nombre CDATA

#REQUIRED

calorías CDATA #IMPLIED>

<!ATTLIST precio moneda (euros|dolares)

#REQUIRED

valor CDATA #REQUIRED>

<!ATTLIST persona codigo ID #REQUIRED>

<!ATTLIST dueño codigo IDREF #REQUIRED>

<!ATTLIST ingrediente conOregano (si|no)

“si” >

<!ATTLIST impuesto tipo CDATA #FIXED

“IVA”>

<pizza nombre=“4 estaciones” >

<ingrediente nombre=“Jamon” />

<precio moneda=“euros” valor=“7”

/>

</pizza>

<persona codigo=“23” nombre

=“Juan” />

<persona codigo=“35” nombre

=“Pepe” />

<persona codigo=“37” nombre

=“Luis” />

<dueño codigo=“35” />

<impuesto tipo=“IVA” />

Page 66: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

<!ATTLIST pizza

nombre CDATA #REQUIRED>

<!ATTLIST ingrediente

nombre CDATA #REQUIRED

calorías CDATA #IMPLIED>

<!ATTLIST precio

moneda (euros|dolares) #REQUIRED

valor CDATA #REQUIRED>

<!ATTLIST persona

codigo ID #REQUIRED>

<!ATTLIST dueño

codigo IDREF #REQUIRED>

<!ATTLIST ingrediente

conOregano (si|no) “si” >

<!ATTLIST impuesto

tipo CDATA #FIXED “IVA”>

<pizza nombre=“4 estaciones” >

<ingrediente nombre=“Jamon” />

<precio moneda=“euros” valor=“7” />

</pizza>

<persona codigo=“23” nombre =“Juan” />

<persona codigo=“35” nombre =“Pepe” />

<persona codigo=“37” nombre =“Luis” />

<dueño codigo=“35” />

<impuesto tipo=“IVA” />

Page 67: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Declaraciones de lista de atributos

Los atributos permiten añadir información adicional a los elementos de un documento.

A diferencia de los elementos que si pueden contener sub-elementos, los atributos no pueden contener sub-atributos.

Se utilizan para añadir información corta, sencilla y desestructurada.

<mensaje prioridad="urgente">

<de> Alfredo Reino </de>

<a> Hans van Parijs </a>

<texto idioma="holandes">

Hallo Hans, hoe gaat het?

. . .

</texto>

</mensaje>

Page 68: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Otra diferencia entre los atributos y los elementos, es que cada uno de los atributos sólo pueden ser especificados una vez y en cualquier orden.

Para declarar la lista de atributos de los elementos <mensaje> y <texto> del ejemplo anterior haríamos lo siguiente:

<!ELEMENT mensaje (de, a, texto)>

<!ATTLIST mensaje prioridad (normal

| urgente) "normal">

<!ELEMENT texto (#PCDATA)>

<!ATTLIST texto idioma CDATA

#REQUIRED>

<mensaje prioridad="urgente">

<de> Alfredo Reino </de>

<a> Hans van Parijs </a>

<texto idioma="holandes">

Hallo Hans, hoe gaat

het?

. . .

</texto>

</mensaje>

Page 69: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Una declaración de atributo empieza con “<!ATTLIST”, y a continuación del espacio en blanco viene el identificador del elemento al que se aplica el atributo. Después viene el nombre del atributo, su tipo y su valor por defecto.

<! ATTLIST mensaje prioridad (normal | urgente) “normal”>

◦ En el ejemplo anterior, el atributo “prioridad” puede estar en el elemento

<mensaje> y puede tener el valor “normal” o “urgente”, siendo “normal” el valor por defecto si no se especifica el atributo.

Por otro lado, el atributo “idioma”, pertenece al elemento <texto> y puede contener datos de carácter CDATA.

La palabra #REQUIRED indica que es obligatorio especificar este atributo pues carece de valor por defecto.

<!ATTLIST texto idioma CDATA #REQUIRED>

Page 70: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Muchas veces nos interesa omitir un atributo sin que se adopte automáticamente un valor por defecto.

Para esto se usa la condición “#IMPLIED”. Por ejemplo:

<!ATTLIST IMG URL CDATA #REQUIRED ALT CDATA #IMPLIED>

◦ Se define la etiqueta <IMG> de HTML donde el atributo “URL” es obligatorio, mientras que el “ALT” es opcional (y si se omite no toma ningún valor por defecto.

Page 71: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Tipos de atributos Atributos CDATA y NMTOKEN:

Los atributos CDATA (character data) son los más simples y pueden contener casi cualquier cosa, a diferencia de los atributos NMTOKEN (name token) que son parecidos pero sólo aceptan caracteres válidos para nombrar cosas (letras, números, puntos, guiones, subrayados y los dos puntos).

<!ATTLIST mensaje fecha CDATA #REQUIRED>

<mensaje fecha=”15 de Julio de 1999”>

<!ATTLIST mensaje fecha NMTOKEN #REQUIRED>

<mensaje fecha=”15-7-1999”>

Page 72: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Atributos enumerados y notaciones:

Los atributos enumerados son aquellos que sólo pueden contener un valor entre un número reducido de opciones:

<!ATTLIST mensaje prioridad (normal | urgente) “normal”>

Existe otro tipo de atributo parecido, llamado de notación (NOTATION), que permite al autor declarar que su valor se ajusta a una notación declarada:

<!ATTLIST mensaje fecha NOTATION (ISO-DATE | EUROPEAN-DATE) #REQUIRED>

Para declarar las anotaciones se utiliza <!NOTATION”, con una definición externa de la notación. La definición externa puede ser pública o un identificador del sistema para la documentación de la notación, una especificación formal o un asistente de la aplicación que contenga objetos representados en la notación:

<!NOTATION HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>

<!NOTATION HTML SYSTEM “http://www.w3.org/Markup”>

Page 73: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD: Ejemplo de la librería Supongamos que queremos definir la estructura de una biblioteca donde los libros pueden tener varios autores y donde algunos libros tienen una rebaja del precio.

◦ DTD: <!ELEMENT libreria3 ( libro+ ) >

<!ELEMENT libro ( autor*, titulo, precio,rebaja? ) >

<!ELEMENT autor ( #PCDATA ) >

<!ELEMENT titulo ( #PCDATA ) >

<!ELEMENT precio ( #PCDATA ) >

<!ELEMENT rebaja ( #PCDATA ) >

◦ Esta definición permite el siguiente documento XML: <libro>

<autor>Miguel De Cervantes</autor>

<titulo>El Quijote</titulo>

<precio>18</precio>

</libro>

<libro>

<autor>Antonio Lopez</autor>

<autor>Ana Perez</autor>

<titulo>Cómo crecer</titulo>

<precio>25</precio>

<rebaja>10%</rebaja>

</libro>

Page 74: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejercicio Dado el siguiente elemento, obtener el DTD correspondiente:

<order orderNo="23456"

customer="John Smith"

date="October 15, 2002">

<item itemNo="a528" quantity="1"/>

<item itemNo="c817" quantity="3"/>

</order>

Page 75: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Solución - propuesta

<!ELEMENT order (item+) >

<!ATTLIST order

orderNo ID #REQUIRED

customer CDATA #REQUIRED

date CDATA #REQUIRED >

<!ELEMENT item EMPTY >

<!ATTLIST item

itemNo ID #REQUIRED

quantity CDATA #REQUIRED

comments CDATA #IMPLIED >

<order orderNo="23456"

customer="John Smith"

date="October 15, 2002">

<item itemNo="a528" quantity="1"/>

<item itemNo="c817" quantity="3"/>

</order>

Page 76: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejercicio Dado el siguiente archivo XML obtenga el correspondiente DTD

<family>

<person id="bob" mother="mary" father="peter">

<name>Bob Marley</name>

</person>

<person id="bridget" mother="mary">

<name>Bridget Jones</name>

</person>

<person id="mary" children="bob bridget">

<name>Mary Poppins</name>

</person>

<person id="peter" children="bob">

<name>Peter Marley</name>

</person>

</family>

Page 77: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Solución

<!ELEMENT family (person*)>

<!ELEMENT person (name)>

<!ELEMENT name (#PCDATA)>

<!ATTLIST person

id ID #REQUIRED

mother IDREF #IMPLIED

father IDREF #IMPLIED

children IDREFS #IMPLIED>

Page 78: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Atributos ID e IDREF

El tipo ID permite que un atributo determinado tenga un nombre único que podrá ser referenciado por un atributo de otro elemento que sea de tipo IDREF. Por ejemplo, para implementar un sencillo sistema de hipervínculos en un documento se tendría:

<!ELEMENT enlace EMPTY> <!ATTLIST enlace destino IDREF #REQUIRED> <!ELEMENT capitulo (parrafo)*> <!ATTLIST capitulo referencia ID #IMPLIED>

En este caso una etiqueta <enlace destino=”seccion-3”> haría referencia a un <capitulo referencia=”seccion-3”>, de forma que el procesador XML lo podría convertir en un hipervínculo u otra cosa.

Page 79: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Declaración de entidades XML hace referencia a objetos (archivos, páginas Web, imágenes, cualquier cosa) que no deben ser analizados sintácticamente según las reglas de XML, mediante el uso de entidades.

Éstas se declaran en el DTD mediante el uso de: “<!ENTITY”.

Una entidad puede no ser más que una abreviatura que se utiliza como una forma corta de algunos textos.

Al usar una referencia a esta entidad, el analizador sintáctico reemplaza la referencia por su contenido.

En otras ocasiones es una referencia a un objeto externo o local.

Las entidades pueden ser: ◦ Internas o externas

◦ Analizadas o no analizadas

◦ Generales o parámetros

Page 80: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Entidades generales internas: Son las más sencillas y son abreviaturas definidas en la sección del DTD del documento XML.

Son siempre entidades analizadas, es decir, una vez reemplazada la referencia a la entidad por su contenido, pasa a ser parte del documento XML y como tal es analizada por el procesador XML.

<?xml version="1.0" standalone="yes" ?>

<!DOCTYPE author [

<!ELEMENT author (#PCDATA)>

<!ENTITY js "Jo Smith">

]>

<author>&js;</author>

Page 81: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Entidades generales internas: Entidades: Asignan nombres a ciertos elementos (similar a variables)

Se denotan por &entidad;

No se admite recursividad

<!ENTITY name "entity_value">

Page 82: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Entidades generales externas analizadas

Las entidades externas obtienen su contenido en cualquier otro sitio del sistema, ya sea en otro archivo del disco duro, en una página Web o en un objeto de una base de datos.

Se hace referencia al contenido de una entidad así mediante la palabra SYSTEM seguida de un URI (Universal Resource Identifier).

<! ENTITY intro SYSTEM “http://www.miservidor.com/intro.xml”>

URI: En la práctica, se trata de una URL en la que la entidad analizada externa se puede encontrar.

public_id: Esto puede ser utilizado por un procesador de XML para generar un alterno URI donde la entidad analizada externa se puede encontrar. Si no se puede encontrar en este URI, el procesador XML debe utilizar el URI normal.

<!ENTITY name SYSTEM "URI">

<!ENTITY name PUBLIC "public_ID" "URI">

Page 83: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejemplo

<?xml version="1.0" standalone="no" ?>

<!DOCTYPE copyright [

<!ELEMENT copyright (#PCDATA)>

<!ENTITY c PUBLIC "-//W3C//TEXT copyright//EN"

"http://www.w3.org/xmlspec/copyright.xml">

]>

<copyright>&c;</copyright>

<?xml version="1.0" standalone="no" ?>

<!DOCTYPE copyright [

<!ELEMENT copyright (#PCDATA)>

<!ENTITY c SYSTEM

"http://www.xmlwriter.net/copyright.xml">

]>

<copyright>&c;</copyright>

Page 84: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Entidades no analizadas

Si el contenido de la entidad es un archivo MPG o una imagen GIF, o bien un archivo ejecutable EXE, el procesador XML no debería intentar interpretarlo como si fuera texto XML. Este tipo de entidades siempre son generales y externas:

<! ENTITY logo SYSTEM “http://www.miservidor.com/logo.gif”>

<?xml version="1.0" standalone="no" ?>

<!DOCTYPE img [

<!ELEMENT img EMPTY>

<!ATTLIST img src ENTITY #REQUIRED>

<!ENTITY logo SYSTEM

"http://www.xmlwriter.net/logo.gif" NDATA gif>

<!NOTATION gif PUBLIC "gif viewer">

]>

<img src="logo"/>

Page 85: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejemplo

<?xml version="1.0" standalone="no" ?>

<!DOCTYPE img [

<!ELEMENT img EMPTY>

<!ATTLIST img src ENTITY #REQUIRED>

<!ENTITY logo PUBLIC "-//W3C//GIF logo//EN"

"http://www.w3.org/logo.gif" NDATA gif>

<!NOTATION gif PUBLIC "gif viewer">

]>

<img src="logo"/>

Page 86: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Entidades con entidades El siguiente ejemplo muestran cómo las entidades generales se pueden utilizar en el DTD.

<?xml version="1.0"?>

<!DOCTYPE author [

<!ELEMENT author (#PCDATA)>

<!ENTITY email "[email protected]">

<!--the following use of a general entity is legal if it

is used in the XML document-->

<!ENTITY js "Jo Smith &email;">

]>

<author>&js;</author>

Page 87: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Entidades generales predefinidas Son entidades que ya se utilizan para las marcas. La siguiente tabla muestra las entidades predefinidas y cómo declararlas en una DTD.

Entidades predefinidas Como declararlas en una DTD:

&lt; <!ENTITY lt "&#38;#60;">

&gt; <!ENTITY gt "&#62;">

&amp; <!ENTITY amp "&#38;#38;">

&apos; <!ENTITY apos "&#39;">

&quot; <!ENTITY quot "&#34;">

Page 88: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Declaración de entidades parámetro interno

Son usadas para declarar entidades que existen en el DTD.

Ejemplo:

<!ENTITY % name "entity_value">

<!--external DTD example-->

<!ENTITY % p "(#PCDATA)">

<!ELEMENT student

(id,surname,firstname,dob,(subject)*)>

<!ELEMENT id %p;>

<!ELEMENT surname %p;>

<!ELEMENT firstname %p;>

<!ELEMENT dob %p;>

<!ELEMENT subject %p;>

Page 89: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejemplos <!--external DTD example-->

<!ELEMENT author (#PCDATA)>

<!ENTITY % js "Jo Smith">

<!--note that the general entity statement below

is used to reference a parameter entity-->

<!ENTITY wb "written by %js;">

<!--external DTD example-->

<!ENTITY % info "(id,surname,firstname)">

<!ELEMENT lab_group_A %info;>

<!ELEMENT lab_group_B %info;>

<!ELEMENT lab_group_C %info;>

Page 90: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejemplo de un DTD Un DTD que defina un lenguaje de marcado para una base de datos de personas con direcciones e-mail:

Listin.dtd

<?xml encoding=”UTF-8”?> <!ELEMENT listin (persona)+> <!ELEMENT persona (nombre, email*, relacion?)> <!ATTLIST persona id ID #REQUIRED> <!ATTLIST persona sexo (hombre | mujer) #IMPLIED> <!ELEMENT nombre (#PCDATA)> <!ELEMENT email (#PCDATA)> < !ELEMENT relacion EMPTY> < !ATTLIST relacion amigo-de IDREFS #IMPLIED enemigo-de IDREFS #IMPLIED>

Page 91: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Listin.xml

<?XML VERSION=”1.0” ?>

<!DOCTYPE listin SYSTEM “listin.dtd”>

<listin>

<persona sexo=”hombre” id=”ricky”>

<nombre> Ricky Ricon </nombre>

<email> [email protected] </email>

<relacion amigo-de= “Alis”/>

</persona>

<persona sexo=”mujer” id=”Alis”>

<nombre> Alicia en el País de las Maravillas </nombre>

<email> [email protected] </email>

</persona>

</listin>

Page 92: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Ejemplo <!-- DTD de ejemplo para RecetaXML -->

<!ELEMENT Receta (Nombre, Descripcion?,Ingredientes?,Instrucciones?)>

<!ELEMENT Nombre (#PCDATA)>

<!ELEMENT Descripcion (#PCDATA)>

<!ELEMENT Ingredientes (Ingrediente*)>

<!ELEMENT Ingrediente (Cantidad, Item)>

<!ELEMENT Cantidad (#PCDATA)>

<!ATTLIST Cantidad unidad CDATA #REQUIRED>

<!ELEMENT Item (#PCDATA)>

<!ATTLIST Item opcional CDATA “0” vegetariano CDATA “si”>

<!ELEMENT Instructiones (Paso+)>

<!ELEMENT Paso (#PCDATA)>

Page 93: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

Una receta consta de un nombre (obligatorio), una descripción (opcional), unos ingredientes (opcionales) y unas instrucciones (opcionales).

El nombre y la descripción pueden contener caracteres alfanuméricos (PCDATA corresponde a Parsed Character Data).

Los ingredientes son una lista de elementos ingrediente.

Un ingrediente consta de un ítem y la cantidad.

La cantidad es un valor alfanumérico, teniendo la etiqueta un atributo, unidad que nos describe qué unidad de medida estamos utilizando.

Un ítem de la receta consta del nombre (un valor alfanumérico) y puede tener dos atributos: opcional (si el ingrediente es o no obligatorio) y vegetariano (si el ingrediente es apto para vegetarianos).

Las instrucciones de elaboración son una lista de pasos.

Un paso consta de un texto alfanumérico descriptivo del paso.

Page 94: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

La cantidad es un valor alfanumérico, teniendo la etiqueta un atributo, unidad que nos describe qué unidad de medida estamos utilizando.

• Un ítem de la receta consta del nombre (un valor alfanumérico) y puede tener dos atributos: opcional (si el ingrediente es o no obligatorio) y vegetariano (si el ingrediente es apto para vegetarianos).

• Las instrucciones de elaboración son una lista de pasos.

• Un paso consta de un texto alfanumérico descriptivo del paso.

Page 95: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

<?xml version="1.0"?>

<Receta>

<Nombre>Tortilla de papa</Nombre>

<Descripcion>

La tradicional y típica tortilla de papa,

tal como la hacen todas las madres.

</Descripcion>

<Ingredientes>

<Ingrediente>

<Cantidad unidad="pieza">3</Cantidad>

<Item>Papa</Item>

</Ingrediente>

<Ingrediente>

<Cantidad unidad="pieza">2</Cantidad>

<Item>Huevos</Item>

</Ingrediente>

Page 96: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

<Ingrediente>

<Cantidad unidad="litro">0.1</Cantidad>

<Item>Aceite</Item>

</Ingrediente>

</Ingredientes>

<Instrucciones>

<Paso>

Pelar y cortar la papa en rodajas

</Paso>

<Paso>

Poner aceite en una paella

</Paso>

<!-- Y así seguimos... -->

</Instrucciones>

</Receta>

Page 97: XML, parte 2mtovar.cs.buap.mx/doc/WSO/websem2.pdf alentar el aceite en …  O después de él,  alentar el aceite en …

DTD: Ejemplo de la librería Vamos a ampliar el ejemplo de la librería. Un libro puede tener un resumen, este elemento tiene como atributos el autor del resumen y el archivo donde se guarda:

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

<!ELEMENT libreria3 ( libro+ ) >

<!ELEMENT libro (autor*, titulo, precio,rebaja?,resumen?)>

<!ELEMENT autor ( #PCDATA ) >

<!ELEMENT titulo ( #PCDATA ) >

<!ELEMENT precio ( #PCDATA ) >

<!ELEMENT rebaja ( #PCDATA ) >

<!ELEMENT resumen (#PCDATA ) >

<!ATTLIST resumen

autor CDATA #IMPLIED

archivo CDATA #REQUIRED

>

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

<!DOCTYPE libreria3 SYSTEM "libreria3.dtd">

<libreria3>

<libro>

<autor>Miguel De Cervantes</autor>

<titulo>El Quijote</titulo>

<precio>18</precio>

</libro>

<libro>

<autor>Antonio Lopez</autor>

<autor>Ana Perez</autor>

<titulo>Cómo crecer</titulo>

<precio>25</precio>

<rebaja>10%</rebaja>

<resumen archivo="ert34.doc" />

</libro>

</libreria3>