Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
Está en la página 1de 137
1 de 137
16 de enero de 2001 www.coverlink.com Manual de XML/XSL
MANUAL DE XML/XSL
DOCUMENTACIN COMPLEMENTADA CURSO XML FECHA CURSO: 11, 12, 13, 14 Y 15 de Diciembre de 2000 Duracin: 25 Horas Elaboracin manual complementado: Kepa Prez
2 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
1. INTRODUCCIN A XML. ............................................................................................................................................. 4 1.1 QU ES EL XML?. ..................................................................................................................................................... 4 1.2. SGML........................................................................................................................................................................... 5 1.3. XML E INTERNET...................................................................................................................................................... 6 1.4. HOJ AS DE ESTILO..................................................................................................................................................... 7 2. SINTAXIS XML. .............................................................................................................................................................. 8 2.1. ESTRUCTURA, MARCA Y CONTENIDO DE UN CONTENIDO XML. ................................................................ 8 2.2. ELEMENTOS Y ATRIBUTOS. .................................................................................................................................. 8 2.3. DOCUMENTOS BIEN FORMADOS......................................................................................................................... 8 2.4. DOCUMENTOS VLIDOS........................................................................................................................................ 9 2.5. DECLARACIN DE TIPO DE DOCUMENTO. ...................................................................................................... 10 2.6. DECLARACIN DE ELEMENTOS......................................................................................................................... 11 2.7. DECLARACIN DE ATRIBUTOS.......................................................................................................................... 13 2.8. COMENTARIOS, PI, SECCIONES CDATA, ENTIDADES PREDEFINIDAS....................................................... 15 2.9. USO DE ENTIDADES. ............................................................................................................................................. 16 3. XSCHEMA. ..................................................................................................................................................................... 20 3.1. QU ES UN ESQUEMA?........................................................................................................................................ 20 3.2. ESTRUCTURA DE UN ESQUEMA......................................................................................................................... 20 3.3. DEFINICIN DE ELEMENTOS. ............................................................................................................................. 22 3.4. UTILIZACIN DE TIPOS DE DATOS PRIMITIVOS............................................................................................. 24 3.5. DEFINICIN DE TIPOS DE DATOS DE USUARIO. ............................................................................................. 25 3.6. EXPRESIONES REGULARES................................................................................................................................. 27 3.7. DERIVACIN........................................................................................................................................................... 29 3.7.1. Derivacin por extensin. ................................................................................................................................... 29 3.7.2. Derivacin por restriccin. ................................................................................................................................. 30 3.8. GLOBALES Y LOCALES......................................................................................................................................... 30 3.9. EQUIVALENCIAS DE ELEMENTOS..................................................................................................................... 30 3.10. DECLARACIN DE ATRIBUTOS........................................................................................................................ 31 3.11. GRUPOS DE ELEMENTOS. .................................................................................................................................. 32 3.12. ELEMENTOS ALTERNATIVOS, REPETITIVOS, ALEATORIOS O VACOS. ................................................. 33 3.12.1. Elementos alternativos. ..................................................................................................................................... 33 3.12.2. Repeticiones. ..................................................................................................................................................... 33 3.12.3. Orden aleatorio................................................................................................................................................. 33 3.12.4. Elementos vacos............................................................................................................................................... 34 3.12.5. Elemento ANY. .................................................................................................................................................. 34 3.12.6. Atributo ANY. .................................................................................................................................................... 34 3.13. DEFINICIN DE CLAVES..................................................................................................................................... 35 4. CASCADING STYLE SHEETS (CSS). ........................................................................................................................ 36 4.1 INTRODUCCIN. ..................................................................................................................................................... 36 4.2. SINTAXIS BSICA.................................................................................................................................................. 37 4.3. SELECTORES........................................................................................................................................................... 38 4.4. HERENCIA. .............................................................................................................................................................. 39 4.5. PROPIEDADES......................................................................................................................................................... 40 4.6. DIV Y SPAN.............................................................................................................................................................. 46 4.7. CASOS ESPECIALES: PSEUDOELEMENTOS Y PSEUDOCLASES. .................................................................. 47 4.8. USO DE DIFERENTES MEDIOS............................................................................................................................. 48 4.9. EJ EMPLO XML CON CSS. ...................................................................................................................................... 49 5. MODELO DE PROCESO DE XSLT............................................................................................................................ 51 5.1. INTRODUCCIN. .................................................................................................................................................... 51 5.2. TEMPLATES............................................................................................................................................................. 53 5.3. CREACIN DE UNA HOJ A DE ESTILO. ............................................................................................................... 55 5.4. XPATH. ..................................................................................................................................................................... 59 5.5. ELEMENTOS XSLT. ................................................................................................................................................ 69 5.5.1. <xsl:sort>........................................................................................................................................................... 69
3 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
5.5.2. <xsl:number>..................................................................................................................................................... 69 5.5.3. Bucles.................................................................................................................................................................. 70 5.5.4. Estructuras de decisin. ...................................................................................................................................... 70 5.5.5. Incorporacin de atributos a los elementos. ....................................................................................................... 71 5.5.6. <xsl:variable>.................................................................................................................................................... 72 5.5.7. Comentarios. ....................................................................................................................................................... 73 5.5.8. <xsl:text>............................................................................................................................................................ 73 5.5.9. Scripts. ................................................................................................................................................................ 74 5.6. XML DATA ISLANDS (XML DSO). ....................................................................................................................... 75 5.7. XSL FORMATTING OBJ ECTS (XSL-FO). ............................................................................................................. 76 6. PROCESADORES / PARSERS XML. ......................................................................................................................... 78 6.1. PROCESO DE DOCUMENTOS XML...................................................................................................................... 78 6.2. SIMPLE API PARA XML (SAX). ................................................................................................................................... 78 6.3. DOCUMENT OBJ ECT MODEL (DOM). ......................................................................................................................... 79 ANEXO 1: RECOMENDACIN W3C FEBRERO DE 1998 (CASTELLANO). ........................................................ 80 ANEXO 2: XML SCHEMA W3C WORKING DRAFT MAYO 1999 (INGLS). ..................................................... 111
4 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
1. INTRODUCCIN A XML.
1.1 QU ES EL XML?.
XML proporciona a las empresas el camino para el intercambio de informacin. Por eso stas prefieren los formatos XML a otros porque es ms fcil de interpretar y manipular, se podra decir que es casi autodescriptivo. De esta forma, si se recibe una cadena de texto normal sin ninguna identificacin y la tenemos que interpretar, resulta difcil saber qu es exactamente, pero si ese texto va acompaado de unas etiquetas, s que podemos identificarla (transforma los datos en informacin descriptiva). Es un meta markup language (metalenguaje de marcas) y es extensible, ya que no es un formato prefijado como HTML.
XML refuerza el impacto de internet en el mundo empresarial ya que se integran de esta forma ms rpidamente. Es decir, si queremos modificar la presentacin o contenido de pginas se requiere menos tiempo y recursos humanos utilizando XML que otro formato.
Es el futuro lenguaje de la Web aunque por ahora no lo sustituir, esto es debido a que los navegadores actuales nicamente entienden HTML. Existen browsers que dicen entender XML, aunque en realidad tienen que transformar este lenguaje para poder presentarlo.
El uso de XML elimina la libertad del HTML que es anrquico, y nos presenta el XHTML que debe seguir unas normas. El eXtensible Markup Language es un estndar desarrollado por el grupo W3C o World Wide Web Consortium (www.w3.org) para textos estructurados. Este grupo se dedica a definir estndares en los que las empresas de software se basan posteriormente para crear sus aplicaciones. Existe otros subgrupos del W3C como es el grupo OASIS que pretende la estandarizacin de los documentos, y as permitir el intercambio de stos fcilmente, y sin las complicaciones que se produciran con documentos con diferentes estructuras. Este grupo tiene ya definido un catlogo de XML con DTD estandarizados, de esta forma las ramas sanitarias (HL7), qumica/farmacuticas (CML), financieras (VisaXML, IFX, BIPS), del turismo/viajes (OTA), de la prensa/publicitarias (aXML), etc... puede intercambiarse documentos con un DTD ya definido y estandarizado, y por tanto sin complicaciones.
Actualmente hay 2 versiones de XML: 1.0 y 1.1, aunque la mayora de los parsers (procesadores) por ahora slo reconocen la versin 1.0.
5 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
El XML separa contenido de estructura, es decir podemos saber si un documento est bien formado sin saber qu es lo que contiene. Todo elemento del documento tiene un principio y un final, y entre esas dos etiquetas tendremos el valor del elemento, aunque tambin puede contener a otros elementos.
<?xml version="1.0" encoding="ISO-8859-1"?> <informe> <fecha>24 de diciembre de 2000</fecha> <hora>14:00</hora> <area> <ciudad>Len</ciudad> <region>Castilla y Len</region> <pais>Espaa</pais> </area> <mediciones> <cielo>claro</cielo> <temperatura escala="C">25</temperatura> <viento> <direccion>SW</direccion> <velocidad>6</velocidad> </viento> </mediciones> </informe>
En el ejemplo <area> es un elemento que contiene a otros elementos y <ciudad> es un elemento que contiene un valor.
1.2. SGML.
XML tiene a SGML (Structured Generalized Markup Language) como predecesor; ste es un metalenguaje que cumple con el estndar ISO 8879, permite definir diferentes tipos de documentos y cuyos objetivos son: - Proceso de documentos por ordenador. - Separacin de estructura, contenido y presentacin. - Independencia de sistemas y vendedores.
Es decir, tena las mismas caractersticas que el XML y se utilizaba, pero tena varios inconvenientes: - Complejidad. - Muchas opciones para aplicaciones especiales. - Sintaxis no legible. - SGML disea herramientas demasiado complicadas.
Por tanto si al SGML le aadimos internet (antes no estaba preparado para la presentacin de documentos en internet), y le eliminamos su complejidad y otras caractersticas que le hacen ilegible, obtenemos el XML.
6 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
1.3. XML e INTERNET.
El XML pretende en definitiva que en el mundo de internet, los documentos sean ms fciles de integrar en esas pginas.
As, otro predecesor del XML es el HTML que se utiliza para la presentacin de la informacin en internet. ste tiene ventajas aprovechadas por el XML: - Es el lenguaje de formateo para los navegadores de internet. - Es fcil de entender y utilizar. - Su uso es muy extendido.
Pero tiene los inconvenientes que intenta suplir el XML: - No tiene semntica. - El contenido no puede ser reconocido ni procesado por programas. - Tiene un costoso mantenimiento de las pginas. - No tiene estndares comunes. - Slo tiene hiperenlaces simples (XML puede tener de 1 a n enlaces). - Dificultad de ampliacin (razones polticas y tcnicas).
HTML es un lenguaje de marcas fijas. Slo se deben utilizar las marcas establecidas en las especificacin, y cualquier otra marca es ignorada. XML sin embargo, permite al diseador crear sus propias marcas, especificando su sintaxis y funcionalidad de tal forma que las nuevas marcas puedan ser reconocidas e interpretadas por los visualizadores. Esto es muy til puesto que las propias marcas pueden ser utilizadas para identificar contenidos, no slo para determinar la forma de presentacin al usuario como hace HTML.
7 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
En resumen, el HTML es un lenguaje muy fcil de comprender y muy utilizado para la presentacin de la informacin, pero sta no se puede procesar ni almacenar, ya que no permite ser manipulado por un programa debido a su anarqua (al ser tan libre, es en consecuencia, muy personal del programador).
1.4. HOJAS DE ESTILO.
Uno de los problemas que puede aparecer es el formato de presentacin, ya que existen muchas, y muy diversas. Por eso el XML pretende una integracin mucho ms fcil con las distintas publicaciones. Es decir, una misma estructura nos la permite manipular y procesar de diferentes formas a travs de un componente que son las hojas de estilo (XSL).
Esto es en cuanto a presentacin, puesto que la tecnologa XML como manipulador de informacin que es, intenta que esas diferentes comunicaciones utilicen la misma estructura y as facilitar el intercambio de datos.
8 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL 2. SINTAXIS XML.
2.1. ESTRUCTURA, MARCA Y CONTENIDO DE UN CONTENIDO XML.
La estructura de un documento XML es un conjunto de etiquetas y su contenido siguiendo unas normas. Las marcas estn entre los caracteres < y >, y tambin entre </ y >. El contenido es lo que hay entre las marcas, que pueden ser otras etiquetas.
Podemos distinguir 2 tipos de contenido: elemento y atributo.
2.2. ELEMENTOS Y ATRIBUTOS.
Los elementos poseen su propia etiqueta, mientras que los atributos irn dentro de la etiqueta de comienzo del elemento al cual pertenecen esos atributos.
Dentro de un documento XML puede haber elementos vacos definidos como tal o porque no contienen contenido.
<temperatura escala="C"></temperatura>
<temperatura escala="C"/>
En el ejemplo, la primera no tiene contenido y la segunda est definida de esa forma, ya que lo nico que nos interesara sera el atributo.
2.3. DOCUMENTOS BIEN FORMADOS.
Dentro del XML podemos distinguir documentos vlidos y documentos bien formados. Un documento est bien formado si se dan las mnimas condiciones para ser manipulados por las aplicaciones, y para ello se deben cumplir lo siguiente:
9 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Debe aparecer una etiqueta XML con la versin (no es obligario pero s recomendable), y es muy frecuente encontrarnos adems el atributo encoding que le dir al parser el formato con el que tiene que interpretar los caracteres del documento. As para poder entender caracteres espaoles como la o las tildes utilizamos el encoding ISO-8859- 1, ya que por defecto usa UTF-8 UTF-16.
Debe haber una etiqueta de inicio y otra de final por cada elemento del XML, salvo cuando sea un elemento vaco que puede tener en una sola etiqueta inicio y final: <temperatura escala="C"/>. Es decir todas las etiquetas deben estar cerradas.
Toda la informacin del documento debe estar agrupada en un elemento principal. Es decir, todas las etiquetas deben estar dentro de una nica etiqueta que ser el padre del resto. En el ejemplo anterior , sta sera: <informe>.
Tenemos que tener en cuenta que el XML es case sensitive, es decir distingue las etiquetas maysculas y minsculas, pues para l son distintas.
El valor de los atributos debe estar siempre entre comillas simples o dobles.
Las etiquetas deben estar bien anidadas, es decir no puede haber elementos solapados. Por ejemplo, si tenemos 2 elementos y uno contiene al otro, no se puede cerrar antes la etiqueta del primero que la del segundo; debe cerrarse la marca del elemento contenido en primer lugar.
Si utilizamos una DTD, las etiquetas no pueden tener un mismo nombre con formatos diferentes, o sea que marcas iguales estn en diferentes posiciones del documento. Sin embargo con XSCHEMA s admitira que tuvieran el mismo nombre y los interpretara dependiendo de la posicin del elemento. Ya veremos los XSCHEMA en el captulo 3.
2.4. DOCUMENTOS VLIDOS.
Para que un documento sea vlido debemos de tener una herramienta que valide a partir del documento XML y una DTD. Esta herramienta es un procesador o parser, y en el caso de que no se produzca ningn error genera un rbol del documento (si es un parser de DOM ya se vers ms adelante).
La DTD (definicin del tipo de documento) es el esquema que debe seguir el documento para que el procesador al compararlo con el documento en s, pueda saber si ste es vlido o no.
10 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
2.5. DECLARACIN DE TIPO DE DOCUMENTO.
Para saber qu DTD utiliza un documento XML se indica en el propio XML de la siguiente forma <!DOCTYPE nombre del documento SYSTEM nombre.dtd>.
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE informe SYSTEM "tiempo.dtd"> <informe> <fecha>24 de diciembre de 2000</fecha> <hora>14:00</hora> <area> <ciudad>Len</ciudad> <region>Castilla y Len</region> <pais>Espaa</pais> </area> <mediciones> <cielo>claro</cielo> <temperatura escala="C">25</temperatura> <viento> <direccion>SW</direccion> <velocidad>6</velocidad> </viento> </mediciones> </informe>
Si el nombre de la DTD es un fichero, lo busca en el mismo directorio del documento XML. Si no est en l se pone la direccin relativa o absoluta para llegar al fichero: <!DOCTYPE informe SYSTEM "../dtds/tiempo.dtd"> o <!DOCTYPE informe SYSTEM "c:/xml/dtds/tiempo.dtd">.
Tenemos que tener en cuenta que no puede haber 2 etiquetas DOCTYPE a 2 DTD en un fichero XML, pero s se puede referenciar una DTD desde otra.
11 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Existe otra forma de referenciar a una DTD, y es con PUBLIC: <!DOCTYPE informe PUBLIC "tiempo.dtd">. No hay apenas diferencias entre una y otra, ya que con las direcciones absolutas o relativas encuentra las DTD en los dos casos. Pero cuando unicamente ponemos el nombre de la DTD, SYSTEM lo busca en el mismo directorio, mientras que PUBLIC lo busca en todo el rbol de directorios de la mquina.
Pero no slo se puede poner un fichero que est en nuestra mquina, tambin se puede referenciar una direccin http:
<!DOCTYPE informe SYSTEM "http://123.234.2.34/xml/dtds/tiempo.dtd">
Existen 2 tipos de DTD: externa e interna. La externa, es la que hemos visto antes; desde el documento XML se referencia a travs de la etiqueta DOCTYPE y SYSTEM o PUBLIC. La interna est definida dentro del propio XML, y por tanto no tiene ninguna referencia. La declaracin de la DTD se encuentra en una etiqueta: <!DOCTYPE nombre del documento XML [ y despus se cierra con ]>.
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE informe [ <!ELEMENT informe (fecha, hora, area, mediciones)> <!ELEMENT fecha (#PCDATA)> <!ELEMENT hora (#PCDATA)> <!ELEMENT area ((ciudad, region, pais) | (x, y))> ............. ]> <informe> <fecha>24 de diciembre de 2000</fecha> <hora>14:00</hora> <area> .........
2.6. DECLARACIN DE ELEMENTOS.
La declaracin de un elemento es: <!ELEMENT nombre (contenido)>. Donde nombre, es el elemento que estamos declarando y contenido, lo que va a contener dicho elemento.
El contenido de un elemento pueden ser otros elementos o un valor (cadena de caracteres). En este ltimo caso se coloca (#PCDATA):
<!ELEMENT pais (#PCDATA)>
La dificultad est cuando contiene a otros elementos, ya que le podemos poner tantas restricciones como se pueda para que el documento XML sea vlido.
12 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
MODELO DE CONTENIDO DE LOS ELEMENTOS:
Cuando un elemento contiene un nico elemento (tenemos que tener en cuenta que de esta forma debe aparecer una vez, en caso contrario el parser da error):
<!ELEMENT identidad (dni)>
Cuando aparece una vez o ninguna (se utiliza el carcter ?):
<!ELEMENT telefono (numero?)>
Cuando aparece una o ms veces (se utiliza el carcter +):
<!ELEMENT registro (factura+)>
Cuando aparece cero o ms (se utiliza el carcter *):
<!ELEMENT telefonos (numero*)>
Todos los caracteres anteriores pueden ir junto al elemento al que marcan o fuera de los parntesis. Teniendo en cuenta que al ir fuera de ellos actuaran sobre todo lo que contenga. En estos casos como slo contienen un elemento dara lo mismo.
Cuando un elemento contiene una secuencia fija de elementos (deben aparecer en el mismo orden y una nica vez):
As por ejemplo, si desea una secuencia de elementos pero que no tenga un orden fijo (aparecern uno o ms veces cualquiera de ellos: verano y otono; invierno, verano y primavera...):
Puede que no tenga ningn contenido (se utiliza EMPTY y el elemento siempre debe estar vaco). Este caso se puede utilizar cuando un elemento tiene atributos que son los que contienen los valores:
<!ELEMENT vacio (EMPTY)>
O sin condiciones para el contenido (con ANY): <!ELEMENT libre (ANY)>
2.7. DECLARACIN DE ATRIBUTOS.
Se declaran <!ATTLIST elemento atributo tipo_atributo valor_defecto>. Donde elemento es el elemento al cual pertenece y atributo es el nombre del atributo.
El tipo de los atributos puede ser: CDATA: Cuando es una cadena de caracteres. Una enumeracin de valores que puede tener el atributo: (a|b|c). ID: Si el valor del atributo es nico en el documento. IDREF: El valor debe coincidir con el atributo ID del mismo documento o est vaco.
El valor por defecto puede ser: #REQUIRED: Si es un valor obligatorio. #IMPLIED: No tiene condiciones, es opcional. #FIXED VALOR: El atributo debe coincidir con el valor definido como defecto. Valor por defecto.
Ejemplos: <!ATTLIST temperatura escala CDATA #IMPLIED>
El atributo escala es una cadena de caracteres y no es obligatorio, puede que el elemento temperatura no tenga dicho atributo.
<!ATTLIST temperatura escala CDATA #REQUIRED>
Aqu s es obligatorio.
14 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
<!ATTLIST temperatura escala CDATA #FIXED c>
El valor del atributo escala siempre debe valer c.
<!ATTLIST temperatura escala CDATA c>
Si no tiene ningn valor coge c como predeterminado.
<!ATTLIST temperatura escala (C|CDATA) #REQUIRED>
Aqu es obligatorio y puede ser C una cadena de caracteres.
<!ATTLIST coche color (rojo|azul|blanco) #IMPLIED>
No es obligatorio, pero si tiene algn valor debe ser alguno de estos 3.
<!ATTLIST table align (left|right|center) left>
Este forma parte del DTD que tiene por defecto el HTML. Vemos que dentro del elemento table, tiene un atributo align que puede tener una serie de valores y que por defecto es left.
<!ATTLIST temperatura escala (R|J) #FIXED "C">
No sera una declaracin correcta, porque le damos a elegir entre 2 valores (R y J) pero le decimos que debe ser C. Dara error.
<!ATTLIST empleado cod ID #REQUIRED jefe IDREF #IMPLIED>
Todos los atributos de un elemento se pueden poner juntos en una misma declaracin como vemos en el ejemplo. Aqu cod es obligatorio y su valor es nico en el documento. El atributo jefe debe coincidir con el ID, y no es obligatorio
Este sera el XML del ejemplo anterior, donde el empleado con el cod=100 sera el jefe y los otros dos sus empleados. El empleado con cod=100 debe existir o dara error en los atributos jefe de los otros.
A la hora de elegir si utilizar un atributo o un elemento para tener un valor, depende de si queremos que tenga un valor u otro (utilizamos atributos) o si queremos saber cuanto se repite
15 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
(utilizamos elementos). Desde el punto de vista de la programacin es ms sencillo que todos sean atributos.
Ejemplos de DTD:
La DTD (tiempo.dtd) correspondiente al ejemplo xml ya visto anteriormente: <!ELEMENT informe (fecha, hora, area, mediciones)> <!ELEMENT fecha (#PCDATA)> <!ELEMENT hora (#PCDATA)> <!ELEMENT area ((ciudad, region, pais) | (x, y))> <!ELEMENT ciudad (#PCDATA)> <!ELEMENT region (#PCDATA)> <!ELEMENT pais (#PCDATA)> <!ELEMENT x (#PCDATA)> <!ELEMENT y (#PCDATA)> <!ELEMENT mediciones ((cielo|temperatura|humedad|visibilidad|viento)+)> <!ELEMENT cielo (#PCDATA)> <!ELEMENT temperatura (#PCDATA)> <!ELEMENT humedad (#PCDATA)> <!ELEMENT visibilidad (#PCDATA)> <!ELEMENT viento (direccion,velocidad)> <!ATTLIST temperatura escala CDATA #REQUIRED> <!ELEMENT direccion (#PCDATA)> <!ELEMENT velocidad (#PCDATA)>
Una DTD que permita almacenar diferentes discos que tengamos en nuestra discoteca con la siguiente informacin: ttulo, intrprete, canciones, casa discogrfica. Teniendo en cuenta que un disco puede tener muchas canciones con intrpretes diferentes, y que una cancin puede tener varios intrpretes:
Para hacer comentarios en XML se pone el texto entre las marcas:<!-- y -->. Por ejemplo: <!-- Esto es un comentario -->.
Las instrucciones de proceso PIs indican al procesador cmo tiene que interpretar las sentencias. Van entre las marcas <? y ?>.
Un ejemplo: <?xml version="1.0" encoding="ISO-8859-1"?>
16 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Dentro de las secciones CDATA irn todos aquellos caracteres que no queramos que interprete el procesador.
Nosotros podramos poner <temperatura> <0 </temperatura>?, pues NO, porque el valor del elemento contiene uno de los caracteres reservados (en este caso <). Otras entidades predefinidas son:
< < > > & & ' "
El ejemplo anterior sera: <temperatura><![CDATA[ <0 ]]></temperatura>, ya que el interior de la seccin CDATA, el parser lo interpreta como una cadena de caracteres y la trata como tal.
Tambin se podra haber puesto <temperatura> <0 </temperatura>, pero de esta forma hay que ir trasformando todos los caracteres reservados para ser correcto, mientras que con el CDATA no importa qu caracteres tiene el elemento.
2.9. USO DE ENTIDADES.
Existen dos tipos de entidades de usuario: de sustitucin y de definicin, y ambas se definen dentro de la DTD.
La entidad de sustitucin se declara <!ENTITY nombre valor>. Donde nombre es la entidad que est definiendo y valor puede ser una cadena de texto o el contenido de un fichero (utilizando SYSTEM):
<!ENTITY cov "COVERLINK"> <!ENTITY covtext SYSTEM "http://www.coverlink.com/kepa.txt">
Cuando queramos referenciar estas entidades escribimos &nombre;, y se sustituirn cuando se represente el documento XML:
<texto>&cov; est orgulloso de anunciar... &covtext;</texto>
17 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Esto es vlido porque las considera cadenas de texto. Ejemplo:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE orden-pedido [ <!ENTITY Cabecera SYSTEM "SeccionCabecera.xml"> <!ENTITY PosicionPC SYSTEM "Posicion/PC1.xml"> <!ENTITY PosicionMonitor SYSTEM "http://monitores.de/m2.xml"> ]>
La entidad de definicin se declara <!ENTITY % nombre valor>. Estas entidades no son cadenas de textos, sino definiciones, por lo que no se referencian dentro del XML como las entidades de susitucin, sino dentro de la DTD.
Se referencia con %nombre;:
<!DOCTYPE ejemplo [ <!ENTITY % entidad-ejemplo "<!ELEMENT ejemplo(#PCDATA)>"> %entidad-ejemplo; ]> <ejemplo> Aqu viene cualquier cosa </ejemplo>
Las entidades de definicin pueden tener parmetros internos y externos:
PARMETROS INTERNOS DE LAS ENTIDADES
Aqu definimos la entidad bloque que puede ser parrafo listado imagen. Posteriormente se referencia en la definicin de otros elementos de la DTD. <!ENTITY % bloque "parrafo | listado | imagen">
Estamos referenciando desde esta DTD a otra externa (tabla-modelo.dtd). Es decir, todo lo que haya en esa DTD externa lo voy a tener disponible. <!ENTITY % tabla-modelo SYSTEM "tabla-modelo.dtd">
18 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Otra de las caractersticas del uso de entidades es la integracin de datos no XML. Esto se entiende mejor con un ejemplo:
Primero definimos un elemento logo que estar vaco pero con un atributo imagen que es de tipo ENTITY y es obligatorio. Con NOTATION le defino un nombre (GIF) para que sea interpretado por un ejecutable (gifmagic.exe). Definimos la entidad kepalogo, le decimos donde est (con SYSTEM) y con NDATA le indicamos con qu ejecutable queremos que lo interprete. <!ELEMENT logo EMPTY>
<!ATTLIST logo imagen ENTITY #REQUIRED>
<!NOTATION GIF SYSTEM "gifmagic.exe">
<!ENTITY kepalogo SYSTEM "http://www.coverlink.com/logo1.gif" NDATA GIF> ... <logo imagen="&kepalogo;"/>
19 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
20 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
3. XSCHEMA.
3.1. QU ES UN ESQUEMA?
El lenguaje de esquema nos permite definir estructuras de documentos XML de la misma forma que las DTDs, aunque a diferencia de stas, el lenguaje que se utiliza es ms complejo. Por qu se utilizan los xschemas?:
Posibilitan la utilizacin de diferentes tipos de datos. Con las DTD solo existan un tipo de datos.
Posibilitan la creacin de tipos de datos propios.
Posibilitan la definicin de modelos de contenido.
Tiene la misma sintaxis que un documento XML. En realidad, un esquema es un documento XML vlido, por lo que necesitamos un procesador para validarlo.
Es posible definir elementos con el mismo nombre pero con diferentes contenidos.
Es posible definir la unicidad de un elemento.
Etc.
3.2. ESTRUCTURA DE UN ESQUEMA.
Lo primero que tenemos que tener en cuenta es que el XSCHEMA no es estndar, sino que estn en working draft del W3C. Es decir, todava se est trabajando en l y puede que se produzcan cambios respecto a lo que hay ahora. Por eso, es frecuente encontrarnos algunos editores o parseadores que utilizan otras versiones diferentes a la propuesta por el W3C.
Un esquema se define entre las etiquetas <schema> y </schema>, y dentro de ellas tendremos referencias a namespaces espacios de nombres. Un namespace es un fichero que contiene la definicin de etiquetas y mtodos que se van a utilizar en el documento. Es parecido a una DTD pero con una sintaxis diferente, ya que cuando se encuentra un elemento, para validarlo, accede a este fichero y as lo reconoce.
21 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
<element name="CatalogoLibros"> <complexType> <sequence> <annotation> <documentation> Un catlogo de libros contiene cero o ms libros </documentation> </annotation> <element ref="cat:Libro" minOccurs="0" maxOccurs="unbounded"/> </sequence> </complexType> </element>
Este ejemplo as visto, puede parecer difcil de entender sobre todo con las referencias a los namespaces, ya que hace alusin a 2 namespace diferentes, adems de crear uno propio.
La referencia a los namespaces se hace con el atributo xmlns. Si tenemos este atributo sin la definicin del prefijo para los elementos, entonces estamos con el namespace por defecto: xmlns="http://www.w3.org/1999/XMLSchema". As, cuando nos encontremos con algn elemento que no tenga prefijo por delante, para comprobarlo, lo va a buscar a este namespace. Aunque el namespace es una direccin web, no accede a internet, sino que es la forma que existe para indicarle al procesador cual se est utilizando y validar el documento.
En cambio, si tenemos el atributo xmlns con algun prefijo despus de dos puntos, le indicamos que si encuentra alguna etiqueta con esta identificacin previa, lo vaya a buscar a este namespace y no al que tiene por defecto o a otros que se estn referenciando.
Ejemplos:
22 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Si en el documento encontrara algn elemento con el prefijo xsi: (<xsi:ejemplo>) lo ira a buscar al primer namespace y si encuentra otro con cat: (<cat:otroejemplo>) lo intenta validar con el segundo.
La referencia al segundo namespace (xmlns:xsi), en el ejemplo se ha hecho en dos pasos: primero referencia a XMLSchema-instance, que valida a los otros dos esquemas referenciados por el segundo con xsi:schemaLocation, XMLSchema y XMLSchema.xsd. Aunque esto depende del parser o procesador con el que trabajemos, en otros slo exige la primera referencia.
Para la creacin de un namespace propio lo hacemos con el atributo targetNamespace: targetNamespace="http://www.publishing.org/namespaces/CatalogoLibros". Esto genera un fichero .xsd que ser el esquema, pero para hacerlo correctamente, la definicin de dicho esquema debe ser validada por el procesador. Con la sentencia: elementFormDefault="qualified" le decimos que queremos calificarlo, es decir, que los elementos del esquema llevara un prefijo por delante para identificarlos (el calificador es cat:). Tenemos que tener en cuenta que en muchos procesadores, la creacin de un nuevo namespace nos devuelve un error, y esto es porque est en working draftk por el W3C.
La referencia a un namespace dentro de un documento XML sera: <?xml version="1.0" encoding="ISO-8859-1"?> <CatalogoLibros xmlns="http://www.publishing.org/namespaces/CatalogoLibros"> <Libro> <Titulo>Solsticio de invierno</Titulo> <Autor>Rosamunde Pilcher</Autor> <Fecha>julio, 2000</Fecha> <ISBN>840132839X</ISBN> <Editorial>Plaza & Jans</Editorial> </Libro> ... </CatalogoLibros>
3.3. DEFINICIN DE ELEMENTOS.
Cuando se van a definir los esquemas tenemos que tener en cuenta que el nombre del primer elemento debe coincidir con el nombre del namespace. Para definir elementos de un esquema se utiliza la etiqueta <element> con los siguientes atributos posibles:
name: Indica el nombre del elemento. Es obligatorio. type: Seala el tipo. ref: Referencia a un elemento que se definir en otra parte del documento.
23 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
minOccurs: Mnima ocurrencia del elemento. Puede ser un nmero o unbounded (infinito). maxOccurs: Mxima ocurrencia del elemento. Puede ser un nmero o unbounded (infinito).
Un elemento puede ser de tipo complejo y estar formado por otros elementos ms simples:
.... <element name="empleado"> <complexType> <sequence> <element ref="emp:Nombre" minOccurs="1" maxOccurs="1"/> <element ref="emp:Apellido" minOccurs="1" maxOccurs="1"/> <element ref="emp:DNI" minOccurs="1" maxOccurs="1"/> <element ref="emp:Salario" minOccurs="1" maxOccurs="1"/> </sequence> </complexType> </element> .... .... <element name="Nombre" type="string"/> (Definicin del elemento Nombre referenciado antes dentro de la definicin de Empleado)
Con la etiqueta <complexType>, le indicamos que el elemento es de tipo complejo (est formado por otros) y con <sequence>, le decimos que est formado por una secuencia de elementos.
Las etiquetas <annotation> y <documentation> se utilizan para definir comentarios dentro del esquema.
El primer ejemplo sin utilizar ninguna referencia quedara:
<element name="CatalogoLibros"> <complexType> <sequence> <annotation> <documentation> Un catlogo de libros contiene cero o ms libros </documentation> </annotation> <element name="Libro" minOccurs="0" maxOccurs="unbounded"> <complexType> <sequence> <element name="Titulo" type="string" minOccurs="1" maxOccurs="1"/>
24 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Para la utilizacin de los tipos predefinidos podemos usar el atributo type o a travs de la etiqueta complexType para formar tipos complejos. Existe una restriccin sobre su uso, y es que en la declaracin de un elemento se puede utilizar cualquiera de los dos, pero no ambos.
Creacin de un tipo complejo (ej. TarjetaCatalogo):
string: Hola Mundo bolean: {true, 1, false, 0} float: 12.56E3, 12, 12560, 0, -0, INF, -INF, NAN double: 12.56E3, 12, 12560, 0, -0, INF, -INF, NAN decimal: 7.08 timeDuration: P1Y2M3DT10H30M12.3S recurringDuration: formato CCYY-MM-DDThh:mm:ss.sss uriReference: http://www.xml.com ID: [Slo debe ser usado con atributos] IDREF: [Debe emparejar el valor de un atributo ID]
25 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
ENTITY NOTATION QNAME language: Cualquier valor vlido de xml:lang (ej. EN, FR...) IDREFS: Lista de valores IDREFS ENTITIES NMTOKEN: casa NMTOKENS: yate casa Name: parte (sin calificador de namespace) NCName: cat:libro integer: 456 nonPositiveInteger: desde - a 0 negativeInteger: desde - a -1 long: desde 9223372036854775808 a 9223372036854775808 int: desde 2147483648 a 2147483647 short: desde -32768 a 32767 byte: desde 127 a 128 nonNegativeInteger: desde 0 a unsignedLong: desde 0 a 18446744073709551615 unsignedInt: desde 0 a 4294967295 unsignedShort: desde 0 a 65535 unsignedByte: desde 0 a 255 positiveInteger: desde 1 a timeInstant: 1999-05-31T13:20:00-05:00 time: formato hh:mm:ss.sss date: formato CCYY-MM-DD month: formato CCYY-MM year: formato CCYY century: formato CC recurringData: formato --MM-D recurringDay: formato ---DD
3.5. DEFINICIN DE TIPOS DE DATOS DE USUARIO.
Con XSchema podemos crear nuestros propios tipos de datos basados en los tipos de datos existentes. Los tipos base son los 40 tipos de datos descritos en el punto anterior. A estos ya definidos se les pueden modificar aspectos facets para formar los nuestros. El esquema a seguir es:
26 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
EJEMPLO TIPO1: ASPECTOS DEL TIPO STRING: El tipo String nos permite cambiar hasta nueve aspectos: pattern: patrones para el valor del elemento (mscaras). enumeration: lista de valores. length: longitud obligatoria. maxlength: longitud mxima obligatoria. minlength: longitud mnima obligatoria. maxInclusive: valor mximo que puede incluir el elemento (alfabticamente). maxExclusive: valor cuyo mximo es el anterior a ste. minInclusive: valor mnimo que puede incluir el elemento. minExclusive: valor cuyo mnimo es el posterior a ste.
Un ejemplo de tipo creado basndonos en el tipo string:
<simpleType name="TelefonoMovil" base="string"> <length value="10"/> <pattern value="\d{3}-\d{6}"/> </simpleType> Este nuevo tipo TelefonoMovil almacena cadenas de caracteres, pero su longitud tiene que ser exactamente 10 y debe cumplir el patrn ddd- dddddd. En este caso no hara falta el length, pues con el pattern se lo indicamos (con \d{} le indicamos los dgitos).
EJEMPLO TIPO2: ASPECTOS DEL TIPO INTEGER: El tipo integer permite cambiar los siguientes aspectos:
27 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
minInclusive minExclusive
Ejemplo: <simpleType name="Edad" base="integer"> <minInclusive value="0"/> <maxInclusive value="200"/> </simpleType> Crea un nuevo tipo de dato Edad de tipo integer. Sus valores estarn entre 0 y 200, ambos inclusive.
Si tenemos varios aspectos pattern y enumeration existir un OR entre ellos, es decir uno u otro u otro... Mientras que el resto de aspectos se referirn a un AND.
EJEMPLO TIPO3: TIPO DATE: Los elementos declarados con tipo date deben cumplir el siguiente formato: CCYY-MM-DD, donde el rango de CC es 00-99, al igual que el de YY; el rango de MM es de 1-12; y el de DD depende del mes y del ao.
EJEMPLO TIPO4: TIPO YEAR: Los elementos declarados con este tipo deben tener la siguiente estructura: CCYY donde CC e YY tienen un rango de 00-99.
[PARA MS INFORMACIN BUSCAR EN EL ANEXO 2]
3.6. EXPRESIONES REGULARES.
Los patrones o patterns especificados en los aspectos utilizan expresiones regulares. Algunos ejemplos para entenderlas mejor:
Expresin Regular Ejemplo Capitulo \d
Capitulo 1 (es un dgito de 0 a 9, por lo que Capitulo 10 no valdra)
[] (Secuencia de caracteres)
28 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
-
(Si el est entre 2 valores es un rango, si va al principio o al final es una secuencia)
a*b
b, ab, aab, aaab, ... (a aparece 0 ms veces)
[xyz]b
xb, yb, zb
a?b
b, ab (a puede venir o no, b est siempre)
a+b
ab, aab, aaab, aaaab, ... (a aparece 1 ms veces)
[a-c]x
ax, bx, cx
[-ac]x
-x, ax, cx
[ac-]x
ax, cx, -x
[^0-9]x
(cualquier caracter que no sea un dgito del 0 al 9 seguido de x)
\Dx
(cualquier caracter que no sea un dgito del 0 al 9 seguido de x)
\dx
(cualquier caracter que sea un dgito del 0 al 9 seguido de x)
Capitulo\s\d
(Capitulo seguido por un espacio en blanco y un dgito)
(ka){2} alli
kaka alli
(ka\s){2} alli
ka ka alli
.abc
(cualquier caracter seguido por abc)
(a|b)+c
ax, bx, aax, bbx, abx, bax, ...
a{1,3}x
ax, aax, aaax
a{2,}x
aax, aaax, aaaax, ...
29 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
\w\s\w
(obligatoriamente dos palabras entre un espacio en blanco)
Ejemplo con expresiones regulares: definicin del tipo de dato de una IP.
<simpleType name="IP" base="string"> <pattern value="(([1-9]?[0-9]1[0-9][0-9] | 2[0-4][0-9] | 25[0-5])\.{3} ([1-9]?[0-9]1[0-9][0-9] | 2[0-4][0-9] | 25[0-5])"> <annotation> <documentation> - Tipo de datos para representar direcciones IP. Ejemplos: 129.83.64.255, 64.128.2.71, etc. - Este tipo de datos restringe cada campo de la direccin IP a tener un valor entre cero y 255: [0-255].[0-255].[0-255].[0-255] - En el atributo value le decimos que repita 3 veces acabando en punto (representado por "\.") y una cuarta sin l. </documentation> </annotation> </pattern> </simpleType>
3.7. DERIVACIN.
Los tipos derivados proceden de otros tipos de datos. Estos tipos pueden ser derivados por extensin derivados por restriccin.
Cuando creamos un tipo de datos podemos prohibir algn tipo de derivacin:
<complexType name="Publicacion" final="#all" ...> No puede derivarse, ni por restriccin, ni por derivacin. <complexType name="Publicacion" final="restriction" ...> No puede derivarse por restriccin <complexType name="Publicacion" final="extension" ...> No puede derivarse por extensin.
3.7.1. Derivacin por extensin.
La derivacin por extensin consiste en coger un conjunto de datos, reutilizarlos todos, adems de aadir los que se deseen.
30 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
3.7.2. Derivacin por restriccin.
Derivar por restriccin significa que no se pueden ni eliminar, ni aadir nuevos elementos al conjunto de datos que se est reutilizando, solamente se pueden modificar, obligndonos a definir todos los elementos de los que est compuesto, aunque no cambien.
Entonces, si derivar por restriccin es lo mismo que poner un nuevo tipo para qu sirve?, pues, de esta forma me aseguro que todos los elementos que contiene son los mismos.
Los elementos y tipos sern globales cuando sean hijos inmediatos del esquema, y sern locales cuando estn anidados dentro de otros elementos o tipos.
3.9. EQUIVALENCIAS DE ELEMENTOS.
Dentro del mundo real hay muchos objetos o caractersticas que podemos nombrarlos de diferente forma. Ejemplos: taxi vs pelas, ladrn vs caco, coche vs buga, etc.
Los XSchema pretenden resolver este conflicto de elementos equivalentes con equivClass, e incluso puede sernos til por ejemplo si queremos amoldar el esquema a mltiples idiomas.
Para que exista equivalencia, los elementos declarados como equivalentes debes ser declarados como elementos globales y el tipo de los elementos debe ser el mismo que el del elemento del que son equivalentes.
3.10. DECLARACIN DE ATRIBUTOS.
Para la declaracin de atributos se utilizan las etiquetas <attributeGroup> y <attribute>. Siempre se declaran despus de la declaracin de elementos, slo pueden tener simpleType y pertenecen al elemento dentro del cual estn anidados.
Si queremos obtener una secuencia de elementos pero sin un orden fijo, utilizamos el tag <all>. Los elementos declarados con esta etiqueta deben tener maxOccurs=1 y minOccurs=1.
<selector> indica el camino que se necesita recorrer hasta llegar al elemento o elementos que forman la clave. En este ejemplo, los campos tienen que ser hijos de Libro, que a su vez es hijo de CatalogoLibros, y nieto de Biblioteca. Si quiero que la clave est formada por el atributo de un hijo, ejemplo: <field>Titulo/@subtitulo</field>. (La @ va delante de atributos).
Tambin podemos definir unicidad, es decir, que sea nico sin tener que ser clave:
36 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL 4. CASCADING STYLE SHEETS (CSS).
4.1 INTRODUCCIN.
Para proporcionar un diseo a la pgina es conveniente utilizar el lenguaje de hojas de estilo en cascada o CSS (del ingls cascading style sheet). Mediante este lenguaje podremos modificar (sin tener que andar reescribiendo el cdigo continuamente): el estilo de un elemento de la pgina (para ello utilizaremos el atributo id que identifica a una etiqueta de otra en el documento). el estilo de aquellos elementos de la pgina que pertenezcan a la misma clase (utilizaremos el atributo class para asignar una clase a una etiqueta). el estilo de todos los elementos de la pgina del mismo tipo (utilizaremos simplemente el nombre de la etiqueta en cuestin.
Para referenciar una hoja de estilo desde el documento XML:
<? xml-stylesheet type=text/css href=nombre.css?>
CSS se utiliza para definir propiedades de formateo para elementos y atributos XML. Una misma hoja de estilo se puede utilizar en mltiples documentos, que podrn ser preparados para diferentes dispositivos de salida utilizando la hoja de estilo apropiada.
Existen 4 formas para aadir estilos:
interna: dentro del propio tag al que aplica el estilo. embebida: mediante la etiqueta <STYLE>. enlazada: a travs de <LINK>. importada: dentro de <STYLE> pero con @import URL();
37 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
La secuencia de evaluacin es interna - embebida - enlazada - importada.
La sintaxis bsica es el selector (que puede ser una etiqueta, una clase [class] un identificador [ID]) seguido de propiedades o lista de propiedades y el valor asignado:
selector {[propiedad:valor];...}
Por ejemplo, si queremos definir una justificacin total para los prrafos de la pgina tendremos que escribir el siguiente cdigo: <Style type="text/css"> P {text-align: justify} </Style>
La asignacin de un valor a un determinado estilo se hace utilizando los dos puntos y no el signo de igualdad. Es de destacar que en esta sintaxis no se diferencia entre maysculas y
38 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
minsculas. Si se hacen asignaciones de varias caractersticas del texto, stas se separan por punto y coma.
Si se desea declarar el mismo estilo para varias etiquetas de tal forma que el estilo definido con los valores para los diferentes atributos afecte a todas las etiquetas, se usar:
Por ejemplo la siguiente regla asigna el color azul a todos los epgrafes del documento: H1, H2, H3, H4, H5, H6 {COLOR: BLUE}
Los valores se pueden agrupar pero el orden es decisivo, ya que font-weight y font-style se deben especificar antes que el resto de propiedades.
En vez de: P{font-family: Times, serif; font-size: 12pt; line-height: 20pt; font-weight: normal; font-style: italic}
Se puede usar: P{font: normal italic 12pt/20pt Times, serif}
4.3. SELECTORES.
Como hemos dicho hay 3 clases de selectores:
Las etiquetas: <style type=text/css> <!-- A {text-decoration:none;} --> </style>
39 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL Class: Dado que se puede necesitar el uso de diferentes versiones de estilos de un mismo elemento, CSS permite la especificacin de clases. Para definir una clase se aade un nombre de clase al nombre de la etiqueta en cuestin mediante la notacin punto.
ID: Los identificadores funciona de una forma similar a las clases, pero estn limitados a la utilizacin para un solo elemento. Se utiliza # en lugar del punto.
Tenemos que tener en cuenta que en el rbol de etiquetas de un documento se produce herencia de los estilos, es decir se pueden especificar estilos globales en la etiqueta body, y as en las etiquetas de los niveles inferiores slo ser necesario sobrescribir los estilos que se heredan.
40 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
4.5. PROPIEDADES
PRRAFOS Mediante las hojas de estilos podemos modificar el margen, el borde, fondo, sangra e interlineado de los prrafos. Las propiedades que nos permiten modificar tales caractersticas son: margin-top margin-right margin-bottom margin-left Definen respectivamente el margen superior, derecho, inferior e izquierdo del prrafo en pixels o en porcentaje de pantalla. margin Define el margen superior, derecho, inferior e izquierdo del prrafo. Si slo se escribe un valor el margen se aplica por igual a los cuatro mrgenes. Si se escriben dos, el primer valor se aplica a los mrgenes superior e inferior, y el segundo a los mrgenes izquierdo y derecho. Por ltimo si se escriben tres valores, el primero se aplica al margen superior, el segundo al margen izquierdo y derecho, y el tercero al margen inferior. padding-top padding-right padding- bottom padding-left En el caso de que el prrafo tenga un borde, definen el espacio que hay entre el contenido del prrafo y los bordes superior, derecho, inferior e izquierdo del prrafo en pixels o porcentaje. padding Define el espacio que hay entre el contenido del prrafo y los bordes superior, derecho, inferior e izquierdo del prrafo en pixels o porcentaje. La aplicacin de slo un valor, dos o tres valores, sigue las mismas reglas que las de la propiedad margin. border-top border-right border-bottom border-left Definen respectivamente el estilo, color y ancho del borde superior, derecho, inferior e izquierdo del prrafo. Los valores posibles para el estilo son none, solid y double. El color se dar en notacin hexadecimal o mediante su nombre en ingls. Y el grosor se proporcionar en pixels. border Define el estilo, color y ancho del borde superior, derecho, inferior e izquierdo del prrafo. La aplicacin de slo un valor, dos o tres valores, sigue las mismas reglas que las de las propiedades margin y padding. background- color Define el color de fondo del prrafo. background- image Define la imagen de fondo del prrafo. El valor se debe proporcionar con el siguiente formato: url(imagen).
41 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
background- attachment Define si el fondo permanecer fijo (fixed), o no (scroll), respecto del texto. No funciona con los prrafos. background- repeat Define si la imagen se repite, repeat; se repite solamente horizontalmente, repeat-x; verticalmente, repeat-y; o simplemente no se repite, no-repeat. background- position Define la posicin superior e izquierda de la imagen en pixels o porcentajes. background Define el color, la imagen, repeticin, fijacin o no del fondo y posicin de la imagen. NOTA: Es mejor utilizar la combinacin de nmero hexadecimales que los nombre de colores ya predefinidos porque pueden ser diferentes en navegadores distintos ({background:red, es mejor {background:#6633FF} text-indent Define la sangra de primera lnea del prrafo en pixels. text-transform Define los efectos sobre el prrafo (conversin a maysculas, etc..). Los valores posibles: capitalize, uppercase, lowercase y none. text-align Define la alineacin del prrafo. Los valores posibles son: left, center, right y justify.
Veamos un ejemplo:
P {margin-left: 20; margin-right: 20; padding: 5; border: solid white 2; background-color: #C0C0C0; text-indent: 20; text-align: justify} Este prrafo tiene un margen izquierdo y derecho de 20 pixels, un espaciado entre el texto y el borde de 5 pixels, un borde slido de color blanco de 2 pixels de anchura, un fondo de color gris,una sangra de primera lnea de 20 pixels y alineacin justificada.
CARACTERES Veamos ahora cuales son las propiedades que nos permiten modificar el estilo de los caracteres: font-style Permite mostrar el texto en cursiva mediante el valor italic . Su valor por defecto es normal. font-variant Permite mostrar el texto en formato de VERSALES mediante el valor small-caps. Su valor por defecto es normal. font-weight Permite mostrar el texto en negrita mediante el valor bold . Su valor por defecto es normal. font-size Define el tamao del tipo de letra en pixels o porcentaje (teniendo en cuenta el tamao de la fuente actual).
42 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
line-height Define el espacio de interlineado del prrafo en picas. He incluido el interlineado en esta seccin debido a que forma parte de uno de los valores de la propiedad font expuesta ms abajo. Pero en realidad se trata de una propiedad para prrafos. font-family Define el tipo de letra. Si el nombre de la fuente contiene espacios es conveniente entrecomillarlo. Si se trata de un estilo insertado utiliza las comillas simples para no confundirlas con las dobles. font Define los formatos de cursiva, versales y negrita; el tamao de la fuente, el interlineado del prrafo; y finalmente el tipo de letra. color Define el color de la fuente. vertical-align Define los formatos de subndice y superndice del texto. letter-spacing D e f i n e e l e s p a c i a d o e n t r e c a r a c t e r e s e n p i x e l s .
El siguiente cdigo muestra un prrafo de ejemplo en el que hemos modificado el estilo de algunas de sus palabras:
<P style="margin-left: 20; margin-right: 20; line-height: 2; font-family:'Comic Sans MS'; background- color: #FFFFE0 ;"> "No habra ido yo a matar a un padre ni a llamarme el mundo novio de aquello de lo que nac. Pero as soy un <Span style="font-size:110%; color: blue">sin-dios</Span>, hijo de crimen soy, cra comn mi cra con la de quien sal; y si algo ms hondo an hay en el mal del mal, en ello es parte <Span style="letter-spacing:4"> Edipo</Span>" </P>
"No habra ido yo a matar a un padre ni a llamarme el mundo novio de aquello de lo que nac. Pero as soy un sin-dios, hijo de crimen soy, cra comn mi cra con la de quien sal; y si algo ms hondo an hay en el mal del mal, en ello es parte E d i p o "
Nota 1: Observa que he utilizado las propiedades line-height y font-family dentro de la etiqueta <P>. En principio, y salvo algunas excepciones ms o menos evidentes, las propiedades de las hojas de estilo se pueden aplicar a todas las etiquetas de HTML. He empezado por agrupar los estilos que se pueden aplicar a las etiquetas de prrafo, etiquetas que delimitan su contenido y lo tratan como un bloque ()como son las etiquetas <Hn>, <P>, <Pre>, <Strong> y <Div>); y
43 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL he continuado con estilos que se pueden aplicar fundamentalmente a etiquetas que no definen bloques (como son <Strong>, <Em> o <Span>).
LISTAS Gracias a los estilos podemos definir el tipo, imagen y posicin de las listas: list-style-type Define el tipo de lista. Los valores disponibles son: disc, circle, square, decimal, lower-roman, upper-roman, lower-alpha, upper-alpha y none. list-style- image Define una imagen para los elementos de la lista. El valor se debe proporcionar con el siguiente formato: url(imagen). list-style- position Define si la lista tiene sangra francesa, outside, o no, inside. list-style Define el tipo, la imagen de los elementos y la sangra de la lista.
El siguiente cdigo inserta una lista con imgenes: <Ul style="list-style-image: url(l1.jpg); font-weight:bold; background-color: #FFFFE0 "> <Li>HTML</Li> <Li>CSS</Li> <Li>JavaScript</Li> </Ul>
HTML
CSS
JavaScript
IMGENES Podemos modificar el margen y el borde de las imgenes mediante las propiedades que vimos anteriormente en la seccin de prrafos. Tambin pueden resultar de utilidad las siguientes propiedades: float Recuerda el ejemplo de alineacin de imgenes que vimos en el captulo II. Cuando asignbamos el valor left o right al atributo align de la etiqueta <Img>, el texto se situaba a su izquierda o derecha. Decamos que la imagen flotaba a
44 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
izquierda o derecha del texto. Pues bien, asignar el valor left o right a la propiedad float consigue el mismo efecto.
vertical-align Los valores top, middle y bottom de esta propiedad son equivalentes a los mismos valores del atributo align de las imgenes.
VNCULOS Ya hemos visto como definir estilos para las diferentes pseudoclases de los vnculos. Dos propiedades que te pueden ayudar a modificar an ms tales elementos son: text-decoration Define los formatos de estilo subrayado, underline; sobre-rayado, overline; tachadura, line-through; y ninguno, none. cursor Define diferentes tipos de puntero para el ratn entre los que se encuentran: crosshair, default, hand, move, text, wait y help.
Mediante el valor none de la propiedad text-decoration puedes evitar el subrayado de los vnculos: A:link, A:visited, A:active {text-decoration: none}
FORMULARIOS Y TABLAS Los elementos Form y Table admiten casi todas las propiedades de estilo vistas hasta el momento: las propiedades de prrafo, las propiedades de caracteres, etc. Ahora bien, puesto que ambos elementos contienen a su vez subelementos (como las celdas de las tablas y los botones de los formularios), el comportamiento de algunas de estas propiedades diferir segn se apliquen a la tabla o formulario, o a alguno de sus subelementos. Por ejemplo, mientras que la propiedad text-align alinear la tabla a izquierda, centro o derecha, la misma propiedad referida a sus subelementos Td seleccionar una alineacin para el contenido de sus celdas. Luego las dos siguientes reglas sirven a propsitos diferentes: TABLE {text-align: center} TD {text-align: center} Celda 1 Celda 2
45 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL Tampoco ser lo mismo asignar un fondo al formulario que a alguno de sus subelementos Input. En especial puedes obtener efectos impactantes con los cuadros de texto de una sola lnea y con los botones: INPUT {background-color: #4682B4; color: white; font-weight: bold}
CSS-P (POSICIONAMIENTO) Por ltimo vamos a ver una serie de propiedades que tienen que ver con la posicin de los elementos en la pgina. Estas propiedades se utilizan generalmente para crear animaciones mediante scripts. Las que puedes utilizar: position Define la posicin de un elemento el el documento como absolute, relative o static. left, top, width y height Definen la posicin del elemento mediante la especificacin de su esquina superior izquierda, su anchura y su altura. z-index Define la posicin del elemento con respecto al resto de elementos de la pgina.
La posicin por defecto de un elemento HTML es static. Si queremos variar la posicin de un elemento tendremos que asignar a la propiedad position del elemento el valor absolute o relative. Las dos imgenes siguientes tienen posiciones absolutas y relativas respectivamente:
Fjate que mientras la posicin relativa no parece diferir en nada de la posicin normal, static, la posicin absoluta sita la imagen de una manera anmala. Esto se debe a que cada tipo de ubicacin utiliza un sistema de coordenadas diferente. Los elementos con posicin absoluta utilizan la esquina superior del documento para su ubicacin con independencia del flujo del resto de elementos del texto:
46 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL La siguiente imagen est situada a 20 pixels del lado izquierdo del documento. Observa que ste prrafo se muestra en el navegador como si no hubiera ninguna imagen insertada en l. El valor - 1 de la propiedad sita a la imagen detrs del texto (de todas formas he suavizado la imagen para que no emborrone el texto). Por su parte los elementos con posicin relativa tienen como origen de coordenadas la posicin dentro de la que se encuentran. Observa que la diferencia con el cdigo anterior es, tan solamente, el valor de la posicin:
<P>La siguiente imagen <Img style="position: relative; left: 20; z-index: -1" src="pepper.gif" alt="absoluta" width="55" height="69">est situada... La siguiente imagen est situada a 20 pixels del lado izquierdo de su origen de coordenadas. Observa como difiere su posicin de la anterior a pesar de tener ambas el mismo valor para su propiedad left.
4.6. DIV Y SPAN.
Las etiquetas <Div> y <Span> permiten definir mbitos definidos por el usuario. Ya conoces lo que es el mbito de una etiqueta, pero quizs quieras agrupar un grupo de etiquetas, de manera que puedas aplicarles un estilo de forma compacta. En el ejemplo siguiente vamos a utilizar un elemento Div para definir un margen izquierdo de 50 pixels para un prrafo y una imagen contenidos en l. La etiqueta <Div> es similar a las etiquetas de prrafo. Su contenido es tratado como un bloque, por lo cual inserta un punto y aparte automtico despus de su etiqueta de cierre: <Div style="margin-left:50" class="ej"> <P>Este es un prrafo hijo de un elemento Div que define un margen izquierdo de 50 pixels. La imagen siguiente tambin pertenece al mbito del elemento DIV. Y por ello comparte el mismo margen izquierdo que el prrafo.</P>
<P><Img src="bolsa3.jpg" width="56" height="80" alt="bolsa con margen de 15 pixels"></P> </Div>
47 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL Este es un prrafo hijo de un elemento Div que define un margen izquierdo de 50 pixels. La imagen siguiente tambin pertenece al mbito del elemento DIV. Y por ello comparte el mismo margen izquierdo que el prrafo.
Por su parte la etiqueta <Span> nos permite definir mbitos insertados dentro de un bloque. El siguiente cdigo muestra la frase en color rojo:
<P style="text-align:center">No ir a conocer la misma suerte, <Span style="color: red">a acostarme para no levantarme jams?</Span> </P>
No ir a conocer la misma suerte, a acostarme para no levantarme jams?
4.7. CASOS ESPECIALES: PSEUDOELEMENTOS Y PSEUDOCLASES.
El concepto de pseudoelementos o pseudoclases permite el formateo de elementos basndose en informacin que no est contenida en el rbol del documento.
Los pseudoelementos permiten acceder a informacin que de otra forma no est accesible, permiten definir instrucciones para elementos que no estn contenidos en el cdigo fuente:
PSEUDOELEMENTOS EJEMPLOS first-line (primera lnea) p:first-line {text-transform: uppercase} first-letter (primer letra) p:first-letter {font-size: 200%; font-style: italic} before, after (insercin dinmica de contenido antes o despus de un elemento) h1:before {content: counter (chapno, upper-roman) .}
Las pseudoclases permiten clasificaciones lgicas de los elementos; normalmente, las caractersticas no se pueden extraer del rbol del documento.
48 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Debido a que los vnculos pueden presentar diferentes estados (sin visitar, visitado y activo) el selector para la etiqueta <A> presenta una serie de pseudoclases (clases pertenecientes solamente a esta etiqueta) que te pueden ayudar a definir los estilos de tales estados. El siguiente cdigo define el color negro para los vnculos por defecto, el color blanco para los vnculos visitados y el color rojo para los vnculos activos (fjate en los dos puntos que separan el selector de su pseudoclase!): <Style type="text/css"> A:link {color: black} A:visited {color: white} A:active {color: red} </Style>
Otras pseudoclases:
PSEUDOCLASES first-child (el primer hijo) p:first-child {text-transform: uppercase} active, hover, focus Cambia la representacin debido a la interaccin del usuario. (las pseudoclases link y visited) solo se pueden aplicar a la etiqueta A en HTML). lang Hace que los elementos dependan del idioma.
4.8. USO DE DIFERENTES MEDIOS.
Existe el atributo media a travs de @import o LINK para especificar el medio de salida, de esta forma dependiendo del medio en el que se va a mostrar, elige la CSS determinada para dicho medio.
IMPORT LINK @import url (loudvoice.css aural; @media print{...} <HEAD> <TITLE>seleccin de otro medio</TITLE> <LINK rel=stylesheet type=text/css media=print, handled href=print.css> </HEAD> ...
Se ponen diferentes atributos media para cada medio que se quiere hacer, y es el propio navegador el que detecta el medio. Los tipos de medios soportados (REC-CSS2:1998):
all aplicable a todos los tipos aural para sintetizadores de voz braille para dispositivos braille
49 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
embossed para impresoras de pginas braille handheld dispositivos handheld (pantallas pequeas, monocromo, anchura de banda limitada) print para documentos visualizados en print mode (Ej. PDF...) projection para documentos visualizados en formato proyeccin (Ej. PowerPoint Viewer) screen para pantallas en color tv para dispositivos de tipo televisin (baja resolucin, color, sonido)
Obviamente, existen propiedades de las CSS habituales que conocemos que no tienen ningn sentido en algunos medios, al igual que existirn otras propiedades exclusivas para diversos medios.
Ms informacin en http://www.w3.org/TR/REC-CSS2
4.9. EJEMPLO XML CON CSS.
Si tenemos este XML con hojas de estilos:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/css" href="hamlet.css"?> <Play> <Annotation> Use XML, HATEML, sorry HAMLET and Style Sheets </Annotation> <Title> Hamlet </Title> <STitle> Prince of Denmark </STitle> <Act> <Title>Act 1</Title> <Scene> <Title>Scene 1</Title> <Action> <Speaker>MARCELLUS</Speaker> <Mar> <Line>'Tis gone!</Line> </Mar> <Directive>[Exit Ghost]</Directive> <Speaker>MARCELLUS</Speaker> <Mar> <Line>We do it wrong, being so majestical,</Line> <Line>To offer it the show of violence;</Line> <Line>For it is, as the air, invulnerable,</Line> <Line>And our vain blows malicious mockery.</Line> </Mar> <Speaker>BERNARDO</Speaker> <Ber> <Line>It was about to speak, when the cock crew.</Line> </Ber> <Speaker>HORATIO</Speaker> <Hor> <Line>And then it started like a guilty thing</Line> <Line>Upon a fearful summons.</Line> </Hor> </Action> </Scene> </Act>
50 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL </Play>
Y esta hoja de estilos CSS:
Play {font-family: Arial, sans-serif; color: black; background: #F3EDE0; Display:block;} Annotation {Display: none;} Play Title {Display: Block; background:#E6E5E5; font-family: verdana, Arial, sans-serif; font-size: 30pt; font-weight: bold; color: #006699; text-align: center} Play STitle {Display: Block; background:#F0F0F0; font-size: 15pt; font-weight: bold; color: #666666; text-align: center} Act Title {font-size: 12pt; color: blue; text-align: left} Scene Title {background:#DFE8EC; display:inline; font-size: 10pt; color: #000066; text-align: left } Directive {font-family: Arial, sans-serif; Display: Block; font-size: 10pt; font-Style: italic; color: blue;} Speaker {Display: Block; font-family: Lucida Console; font-size: 12pt; margin-top: 10px; font-weight:bold;} Action {font-family: arial; font-size: 12pt;} Action Mar {font-family:Verdana; color: #7D2515;} Action Ber {font-family:Verdana; color: #9933aa;} Action Hor {font-family:Verdana; color: #666699;} Line {Display: Block;}
La pgina XML se visualiza:
51 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL 5. MODELO DE PROCESO DE XSLT.
5.1. INTRODUCCIN.
(MS INFORMACIN EN CAPTULO 14 DE LA BIBLIA DE XML: TRANSFORMACIONES XSL http://www.ibiblio.org/xml/books/bible/updates/14.html)
El XSL (eXtensible Stylesheet Language) es un lenguaje que nos permite definir una presentacin o formato para un documento XML. Un mismo documento XML puede tener varias hojas de estilo XSL que lo muestren en diferentes formatos (HTML, PDF, RTF, VRML, PostScript, sonido, etc.). En definitiva, el XSL se puede definir como un lenguaje de hojas de estilo que nos permite dar al XML un formato de salida (el XSL no es ms que un documento XML, por lo que debe tambin ser vlido).
El XML describe los contenidos, el XSL la presentacin mientras que el HTML mezcla contenidos con presentacin. Para describir cmo se deben presentar los documentos XML podemos optar por dos soluciones: las CSS que se utilizan con HTML y/o las descripciones que se basan en XSL. CSS es eficaz para describir formatos y presentaciones, pero no sirve para decidir qu tipos de datos deben ser mostrados y cules no deben salir en la pantalla. Esto es, CSS se utiliza con documentos XML en los casos en los que todo su contenido debe mostrarse sin mayor problema. XSL no solo permite especificar cmo queremos presentar los datos de un documento XML, sino que tambin sirve para filtrar los datos de acuerdo a ciertas condiciones. Se parece un poco ms a un lenguaje de programacin. El XSL aade al XML, adems del aspecto que ya inclua CSS referente a la presentacin y estilo de los elementos del documento, una pequea sintaxis de lenguaje script para poder procesar los documentos XML de forma ms cmoda. Adems, XSL no es incompatible con las CSS, es decir que podemos utilizar ambos formatos para la presentacin de los documentos.
52 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Lo que se pretende con la hoja de estilo es realizar una transformacin desde un documento XML a un rbol resultante. Para ello necesitamos saber la jerarqua del XML.
Los formatos de salida (rbol resultante) de este proceso de transformacin son HTML, XML texto. Tambin existen otros formatos como PDF, pero este utiliza XSLT para seleccionar y FO- XSL para formatear el documento.
Mientras que al documento HTML slo se le poda aplicar una CSS para presentarlo, al XML le puedo aplicar, un lenguaje de formateo (XSL-FO), una CSS o un lenguaje de transformacin (XSLT), hasta llegar a la presentacin. Las CSS las interpreta el navegador, pero el XSLT o el XSL-FO necesitan un procesador para poder verse los resultados.
El documento XML tiene una estructura de rbol, donde cada etiqueta corresponde a un nodo del rbol. Como todos sabemos, el documento XML tiene que estar bien formado por lo que debe existir una etiqueta raz que contiene al resto de elementos; sin embargo, sta no es la raz del rbol XML, existe otra que las contiene (/).
Ejemplo:
CDIGO XML <catalogo> <crucero estado="disponible"> <precio>870</precio> <descripcion>Crucero en el atlntico.</descripcion> <yate>CARMEN</yate> <puertosalida>AZORES</puertosalida> <puertollegada>GRAN CANARIA</puertollegada> </crucero> <crucero estado="no disponible"> <precio>652</precio> <descripcion>Crucero por el caribe.</descripcion> <yate>AQUIVA</yate> <puertosalida>SANTA LUCIA</puertosalida> <puertollegada>SANTA LUCIA</puertollegada> </crucero> </catalogo>
53 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL RBOL DEL DOCUMENTO XML
A travs de la estructura de rbol del documento XML podemos ir recorriendolo accediendo a los elementos y atributos.
5.2. TEMPLATES.
A travs de templates o plantillas puedo obtener el documento resultante a partir del fuente, para ello selecciona la informacin con patrones de bsqueda (filtro) y aplicando reglas de proceso.
Las reglas template tienen la siguiente estructura general:
Donde patrn es el identificador de los elementos a los que queremos aplicar la template. Es decir, en el recorrido por el rbol del documento cuando encuentre un nodo que coincida con el patrn del template aplica la plantilla.
Como vemos la hoja de estilo est definida entre las etiquetas <xsl:stylesheet> y </xsl:stylesheet>, y debemos indicarle el namespace que se utiliza a travs del atributo xmlns:xsl. Por tanto, lo primero que necesita un fichero XSL es identificar el namespace XML que nos permite validar todos los elementos y mtodos disponibles en la versin XSL que se utiliza. De esta forma, el namespace reconoce los atributos y elementos XSL del documento que le da el formato de salida al XML.
En el esquema anterior hemos utilizado el namespace que utiliza la recomendacin del W3C del 16 de noviembre de 1999. El namespace de la recomendacin del W3C de diciembre de 1998 es http://www.w3.org/XSL/Transform/1.0.
Cuando el procesador identifique al elemento raz hace accion1, cuando identifique el elemento catalogo hace accion2, y as hasta que termina de recorrer el rbol...
55 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
A los templates les puedo dar un nombre y despus llamarlo con <xsl:call-template name=[nombre]>:
<xsl:template name=nombre> accin </xsl:template>
Aunque para esto, hay que tener en cuenta que al llamarlo busca el nombre de los nodos que estn por debajo desde donde se llama (o poner name=//nombre para que lo busque por todo el rbol).
5.3. CREACIN DE UNA HOJA DE ESTILO.
Antes que nada debemos conocer la estructura del rbol, y despus construir la cabecera y el cuerpo HTML incrustndolos en alguna template (normalmente es en el raz):
Con este ejemplo, genera cdigo HTML, incrustando dentro de <body> el resultado de la sentencia <xsl:apply-templates/>. sta procesa todos los nodos de forma recursiva, y si encuentra alguna otra plantilla dentro del documento XSL con <xsl:template match=... emparejada al nodo que se est procesando, le aplica dicha plantilla.
Por ltimo, para la creacin de una hoja de estilo escribiremos una regla template por cada nodo aadiendo las instrucciones de proceso necesarias, sabiendo qu sentencias XSL provocan desplazamiento por el rbol (xsl:template, xsl:for...) y cules no (xsl:if, xsl:value-of...).
<xsl:template match=crucero> El precio es: <B><xsl:value-of select=precio/></B> <BR/> <xsl:apply-templates/> </xsl:template>
.......
En el tercer template voy recorriendo todos los nodos crucero, y en cada uno de ellos con la sentencia <xsl:value-of... voy mostrando el valor del nodo precio, ste lo busca por debajo de crucero, si no existe el elemento precio no muestra nada (si queremos que muestre el contenido de crucero, es decir del nodo en el que nos encontramos tendremos que escribir <xsl:value-of select=./>). La peculiaridad de este tercer template es la incrustacin de cdigo HTML, ya que se le aade las instrucciones necesarias para obtener los resultados como deseemos. As, obtendremos el valor de precio en negrita seguida de un <BR>, que si nos fijamos al tener que ser un documento bien formado debe estar cerrado.
Si estamos situado en un nodo cualquiera, para acceder a los nodos hijos en el rbol se ponen los nombres de stos, si queremos conseguir el contenido del propio nodo en el que nos encontramos lo referenciamos con ., y si queremos retroceder, con ... Para acceder a cualquier otro nodo del rbol, podemos ir movindonos por el rbol con sentencias XSL o ir directamente a travs de rutas (Ej. //descripcion lo busca desde el raz independientemente donde estemos situado, crucero/descripcion accede a descripcion pero debemos estar situado en catalogo que es anterior a crucero...).
Con la hoja de estilo: <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Subrutina para procesar el nodo raz. En ella, le aplica una estructura de pgina HTML. Dentro del BODY aplica la template cada vez que se encuentra una etiqueta LIGA en el documento XML--> <xsl:template match="/"> <html> <head> <title>EQUIPOS</title> </head> <body bgcolor="navy"> <xsl:apply-templates select="liga"/> </body> </html> </xsl:template>
<!-- Plantilla LIGA que genera una tabla en los que aparecern los equipos que posea, es decir cada vez que se encuentre con un tag EQUIPO en XML--> <xsl:template match="liga"> <table border="0" align="center" bgcolor="white" style="font-size:10pt; font-family:verdana;"> <tr> <td align="center" colspan="2" bgcolor="#DFE8EC"><b>EQUIPO</b></td> <td align="center" bgcolor="#DFE8EC"><b>ESTADIO</b></td> </tr> <xsl:apply-templates select="equipo"/> </table> </xsl:template>
<!-- Plantilla EQUIPO que crea una fila en la tabla por cada equipo con la imagen del escudo (con el tag img y generando el atributo src de ste con xsl:attribute que obtiene el valor del atributo file), el nombre del equipo, de la ciudad y del estadio--> <xsl:template match="equipo"> <tr> <td><img height="70" width="60"> <xsl:attribute name="src"><xsl:value-of select="escudo/@file"/></xsl:attribute> </img> </td> <td bgcolor="#DFE8EC"><xsl:value-of select="nombre"/> (<b><xsl:value-of select="nombre/@ciudad"/></b>) </td> <td bgcolor="#DFE8EC" align="center"><xsl:value-of select="estadio"/></td> </tr> </xsl:template>
</xsl:stylesheet>
Obtendremos el documento de salida HTML: <html> <head> <title>EQUIPOS</title> </head>
59 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
5.4. XPATH.
Siempre que nos movemos por el documento utilizamos XPATH, ya que es un indicador de caminos y podemos usar estas expresiones en muchas sentencias del documento:
<xsl:template match=/catalogo/crucero/> Con esta sentencia nos situamos en crucero (dentro de catalogo y dentro de /)
<xsl:value-of select=precio/> Al no ponerle nada delante del nombre del elemento le indicamos que busque por debajo del elemento actual.
<xsl:apply-templates select=ruta/puerto/> Le decimos que plantillas tiene que aplicar (puerto que est dentro de ruta hijo del elemento actual) </xsl:template>
La identificacin del camino pueden ser absoluta o relativa, es decir en base al raz o en base al nodo actual (Es una direccin absoluta si empieza por /, y relativa cuando no sea as).
Identificar el documento
<xsl:template match=/>
Cuando comienzes el documento...
Identificacin por nombre
<xsl:template match=crucero>
<xsl:template match=//crucero>
Cuando encuentres un elemento crucero.... La 1 de forma relativa (dependiendo de la posicin actual) y la 2 de forma absoluta (//crucero es igual que /*/crucero.
Identificacin de varios elementos
<xsl:template match=yate | marinero>
Cuando encuentres un elemento yate o un elemento crucero.... | es un OR pero en realidad es un AND, porque si encuentra el 1 lo hace, y cuando encuentra el 2 tambin.
Identificacin con un ancestro inmediato
<xsl:template match=crucero/precio>
Cuando encuentres un elemento precio que tiene un elemento crucero como padre...
Identificacin con un ancestro
<xsl:template match=catalogo//puerto>
Cuando encuentres un elemento puerto que tiene un elemento catalogo como antecesor.... (Da igual donde est, puede estar inmediatamente debajo o en algn nodo descendiente cualquiera).
Identificacin con comodn <xsl:template match=crucero/*>
Cuando encuentres cualquier elemento hijo inmediato del elemento crucero....
60 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
(Siendo crucero hijo del nodo actual).
Dentro de la jerarqua de un rbol tenemos que saber bien varios conceptos: siblings o nodos hermanos (mismo nivel que un nodo cualquiera), children o hijos inmediatos, descendants o descendientes (todos los hijos, ya sean inmediatos o no) y ancestors o ancestros (desde un nodo hasta el raz, sin contar dicho nodo).
Existen una serie de condiciones que se pueden utilizar para filtrar el contenido:
o Existencia de un hodo hijo: crucero[marinero]/yate (Si existe un crucero que tiene un hijo marinero, y adems un hijo yate... , es decir, yate y marinero son hermanos. Dentro del corchete tambin permite poner un path: crucero[yate/marinero]/yate).
o Valor de un nodo: crucero[precio<1000] (Si existe un crucero que tiene un hijo precio cuyo valor es menor de 1000...).
o Existencia de un atributo: crucero[@estado] (Si existe un crucero con un atributo estado...).
o Valor de un atributo: crucero[@estado=disponible] (Si existe un crucero con un atributo estado con valor disponible...).
o Se pueden hacer combinaciones de las anteriores opciones.
Operadores lgicos:
o And: [@id and @estado] (Si tiene un atributo y otro...).
o Or: [@id or @estado] (Si tiene un atributo u otro...).
o Unin: <xsl:template match=yate | marinero> (Un elemento y otro...).
Operaciones aritmticos:
o count(): <xsl:value-of select=count(crucero)/> <xsl:value-of select=count(//crucero[precio<680])/> (Funcin que nos dice el nmero de nodos que hay respecto al nodo en el que estamos colocado cumpliendo unas condiciones).
o *: precio * 3 (multiplica).
61 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
o +: precio + 1000 (suma).
o -: precio-@descuento (resta).
o Para dividir no se usa / porque sta ya posee una funcin, en su lugar se utiliza la funcin div().
Por lo tanto tambin se puede hacer una identificacin por atributos:
<xsl:template match=crucero>
Cuando encuentre un elemento crucero...
<xsl:template match=crucero[@estado]>
Cuando encuentres un elemento crucero que tiene un atributo llamado estado...
<xsl:template match=crucero[@estado=disponible]>
Cuando encuentres un elemento crucero que tiene un atributo llamado estado y su valor es disponible...
Para la presentacin de valores y atributos se utiliza la sentencia <xsl:value-of select=/>: <xsl:value-of select=@estado/> (si es un atributo) <xsl:value-of select=puertosalida/> (si es un elemento)
Tambin se puede identificar por posiciones (utilizando las funciones position() y last()):
=puerto[position()=1]
Es cierto si: - El nodo puerto existe y es un nodo elemento. - La expresin position()=1 es evaluada y el resultado es true.
=puerto[position()=last()]
Es cierto si: - El nodo puerto existe y es un nodo elemento. - La expresin position()=last() es evaluada y el resultado es true.
62 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Ejemplo: Si tuvisemos elementos puerto que nos indicara todos los puertos en los que se hace escala de un crucero y queremos identificarlos por posiciones:
<xsl:template match=ruta[puerto[position()=1]=PATRAS]> <BR/> La ruta comienza en PATRAS y finaliza en: <xsl:value-of select=puerto[last()]/> </xsl:template>
Con las funciones anteriores se pueden utilizar = y !=, pero no <, ni > entre valores aunque s entre funciones. En su lugar, para nmeros se utilizan < y >:
Hay otras funciones tiles adems de count(), position() o last(), como puede ser not() (para ver ms funciones leer captulo 14 de la Biblia del XML): sta nos devuelve, si es un elemento o un atributo lo que contiene entre parntesis: si existe o no, y si es una sentencia: si se da o no.
Identifica los cruceros que no tienen atributo estado o los cruceros donde el atributo estado tiene el valor disponible.
@precio-@descuento
El valor del atributo precio menos el valor del atributo descuento.
$X+1
Resultado de sumar 1 a la variable $X
@ancho=@alto
Comprueba si el valor del atributo ancho y el valor del atributo alto son iguales.
(//seccion | //subseccion) [titulo=Introduccion]
Una expresin de unin entre parntesis. Selecciona ambos, cualquier elemento que sea seccin y subseccin si tienen un hijo llamado titulo con valor introduccion.
//comment()
Selecciona todos los nodos comments que existan dentro del documento.
63 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
crucero[yate=VENTANA][1]
Selecciona el primer crucero realizado con el yate VENTANA.
crucero[1][yate=VENTANA]
Igual que el anterior ejemplo.
marinero[1]
El primer elemento hijo marinero en el contexto del nodo.
marinero[last]
ltimo elemento hijo marinero en el contexto del nodo.
marinero[position()!=1]
Todos los elementos hijos excepto el primero.
//seccion/subseccion[1]
Todos los elementos subseccion que son el primer hijo donde el padre es seccion.
(//seccion/subseccion)[1]
El primer elemento de un documento que tiene un hijo subseccion con elemento padre seccion.
last()-1
La posicin anterior a la ltima en el contexto actual.
position()<last() div 2 Cierto si la posicin actual es menos de la mitad del contexto.
REGLA APPLY-TEMPLATES
Con esta regla seleccionamos los elementos a los que vamos a aplicar alguna plantilla. Tenemos que tener en cuenta que podemos seleccionar tanto los hijos del nodo en el que nos encontremos o a otros que no son hijos del nodo actual:
La aplica a todos los hijos de ruta con nombre puerto.
<xsl:template match=ruta> <xsl:apply-templates select=puerto/> <xsl:apply-templates select=//catalogo/crucero/marinero/> </xsl:template> La aplica a todos los hijos de ruta con nombre puerto y a todos los nodos marinero que son hijos de crucero y nietos de catalogo que estn en cualquier posicin del rbol.
EJEMPLO: Si tenemos el siguiente documento XML:
<catalogo> <crucero estado="no disponible"> <precio>761</precio> <descripcion>Crucero entre las dos ciudades ms importante de Grecia.</descripcion>
64 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
<yate>HELLAS CRUSSADERS</yate> <ruta> <puerto>SALNICA</puerto> <puerto>VOLOS</puerto> <puerto>ATENAS</puerto> </ruta> </crucero> <crucero> <precio>761</precio> <descripcion>Crucero por las islas griegas.</descripcion> <yate>FLYING GREEKMAN</yate> <ruta> <puerto>KORFU</puerto> <puerto>PATRAS</puerto> <puerto>ZAKYNTHOS</puerto> <puerto>KALAMATA</puerto> <puerto>RHODES</puerto> </ruta> </crucero> <crucero estado="disponible"> <precio>87</precio> <descripcion>Crucero en el atlntico.</descripcion> <yate>CARMEN</yate> <ruta> <puerto>AZORES</puerto> <puerto>GOMERA</puerto> <puerto>LANZEROTE</puerto> <puerto>GRAN CANARIA</puerto> </ruta> </crucero> <crucero estado="no disponible"> <precio>652</precio> <descripcion>Crucero por el caribe.</descripcion> <yate>AQUIVA</yate> <ruta> <puerto>SANTA LUCIA</puerto> <puerto>SANTA LUCIA</puerto> </ruta> </crucero> <crucero> <precio>652</precio> <descripcion>Crucero por el norte de Europa.</descripcion> <yate>ELYSION</yate> <ruta> <puerto>BILBO</puerto> <puerto>PORTSMOUTH</puerto> <puerto>COPENHAGE</puerto> <puerto>OSLO</puerto> </ruta> </crucero> <crucero> <precio>217</precio> <descripcion>Crucero por el mar Adritico.</descripcion> <yate>CRISMADA</yate> <ruta> <puerto>SAN GIORGIO DE NOGARO</puerto> <puerto>DUBROVNIK</puerto> </ruta> </crucero> <crucero> <precio>761</precio> <descripcion>Crucero por oceana.</descripcion> <yate>THE OLD FORT</yate> <ruta> <puerto>SIDNEY</puerto> <puerto>HAWAII</puerto> </ruta> </crucero> </catalogo>
65 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
a) El documento XSL para presentar el contenido del atributo estado: <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>C R U C E R O S</title> </head> <body style="background:navy; font-family:verdana;"> <xsl:apply-templates select="catalogo"/> </body> </html> </xsl:template>
66 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL </xsl:template> </xsl:stylesheet>
b) El documento XSL para presentar los datos de los cruceros donde el atributo estado tenga valor: <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>C R U C E R O S</title> </head> <body style="background:navy; font-family:verdana;"> <xsl:apply-templates select="catalogo"/> </body> </html> </xsl:template> <xsl:template match="catalogo"> <table align="center" bgcolor="#F3EDE0" border="0" style="font-size:10pt;"> <tr> <td align="center" bgcolor="#E6E5E5"> <b>PRECIO</b> </td> <td align="center" bgcolor="#E6E5E5"> <b>DESCRIPCIN DEL CRUCERO</b> </td> <td align="center" bgcolor="#E6E5E5"> <b>NOMBRE DEL YATE</b> </td> <td align="center" bgcolor="#E6E5E5"> <b>RUTA</b> </td> <td align="center" bgcolor="#E6E5E5"> <b>ESTADO</b> </td> </tr> <xsl:apply-templates select="crucero[@estado]"/> </table> </xsl:template>
67 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL <xsl:template match="crucero[@estado]"> <tr> <td align="center" bgcolor="#DFE8EC"> <xsl:value-of select="precio"/>$ </td> <td bgcolor="#DFE8EC"> <xsl:value-of select="descripcion"/> </td> <td align="center" bgcolor="#DFE8EC"> <xsl:value-of select="yate"/> </td> <td bgcolor="#DFE8EC"> <xsl:apply-templates select="ruta"/> </td> <td align="center" bgcolor="#DFE8EC"> <xsl:value-of select="@estado"/> </td> </tr> </xsl:template>
c) El documento XSL para presentar puertos de origen y destino del yate CARMEN: <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>C R U C E R O S</title> </head> <body style="background:navy; font-family:verdana;"> <xsl:apply-templates select="catalogo"/> </body> </html> </xsl:template> <xsl:template match="catalogo"> <table align="center" bgcolor="#F3EDE0" border="0" style="font-size:10pt;"> <tr> <td align="center" bgcolor="#E6E5E5"> <b>PRECIO</b>
68 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
69 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
5.5. ELEMENTOS XSLT.
5.5.1. <xsl:sort>
El XSL ofrece la posibilidad de ordenar los elementos gracias a <xsl:sort> usado con <xsl:apply-templates> o <xsl:for-each>. Esta sentencia tiene los siguientes atributos:
o select: especifica el rea a ordenar; por defecto es .. o order: puede ser ascendente (ascending) que es por defecto y descendente (descending). o lang: idioma de ordenacin. o data-type: tipo de dato de la clave de ordenacin que puede ser no numrico (text) [por defecto] o numerico (number). o case-order: primero maysculas (upper-first) o primero minsculas (lower-first).
Ejemplo:
Aplica la plantilla a todos los nodos crucero pero ordenndolos primero por precio, y estos por nombre de puerto. <xsl:apply-templates select=crucero> <xsl:sort select=precio data-type=number/> <xsl:sort select=ruta/puerto/> </xsl:apply-templates>
5.5.2. <xsl:number>
Nos dice el orden real en el que se procesan los elementos en el documento. Esta funcin no se altera aunque se utilice el <xsl:sort>. Algunos atributos son:
o level: puede ser single (en el mismo nivel), any (los niveles desde donde est hacia abajo) y multiple (se mueve por diferentes niveles). o count: lo que queremos contar.
70 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
o format: el formato en el que se nos presenta los nmeros. Puede tener los valores: i (nmeros romanos en minsculas), I (nmeros romanos en maysculas), a (letras en minsculas), A (letras en maysculas), 1 (formato decimal; est por defecto)...
<xsl:for-each> Al igual que el <xsl:apply-templates> nos sirve para procesar los nodos del rbol, aunque a diferencia de ste, con el <xsl:for-each> es menos clara la programacin, pero es menos autmata ya que lo controlas ms. Debemos tener en cuenta, que el <xsl:for- each> realiza desplazamiento y si vamos a referenciar a otro nodo diferente tenemos que controlarlo. Tiene como atributo select, en donde se coloca la condicin del bucle; si solo se pone el nombre de un elemento ejecuta todos los nodos que se llamen as:
<xsl:if> es una condicin if simple que no admite else. Como atributo se puede utilizar tanto test como match. <xsl:template match=ruta> <xsl:for-each select=puerto> <xsl:if test=position()=1> Puerto de salida: <xsl:value-of select=./> </xsl:if> </xsl:for-each> </xsl:template>
71 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
<xsl:template match="crucero"> <xsl:if test="ruta/puerto[(position()!=1) and (position()!=last())]"> <xsl:apply-templates select="ruta"/> </xsl:if> </xsl:template>
<xsl:choose> nos permite crear bloques de decisin determinados por la clasula <xsl:when>. Posee adems, <xsl:otherwise>, para los casos en que no se ejecuta ninguna de las clasulas <xsl:when> especificadas.
<xsl:template match=ruta> <xsl:for-each select=puerto> <xsl:choose> <xsl:when test=position()=1> Puerto de salida: <xsl:value-of select=./> </xsl:when> <xsl:when test=position()=last()> Puerto de llegada: <xsl:value-of select=./> </xsl:when> <xsl:otherwise> Escala: <xsl:value-of select=./> </xsl:otherwise </xsl:choose> </xsl:for-each> </xsl:template>
5.5.5. Incorporacin de atributos a los elementos.
Nos puede ocurrir por ejemplo que queramos escribir una etiqueta HTML pero los atributos no lo sepamos, sino que nos lo pasen a travs del documento XML. En este caso utilizamos la sentencia <xsl:attribute> que incorpora atributos a los elementos XSL. Usa el atributo name para indicar el nombre del atributo, y su valor ser lo que contenga entre sus etiquetas de inicio y cierre.
Tambin podramos haber creado los elementos con <xsl:element>, as en lugar de poner <a> y </a>, hubiramos puesto: <xsl:element name=a> y </xsl:element>. 5.5.6. <xsl:variable>
La sentencia <xsl:variable> nos permite definir variables. Tiene el atributo name que es el nombre de la variable que creamos, y para darle el valor podemos usar select o asignndole lo que contiene sus etiquetas de inicio y cierre. Para referenciarla despus usamos el nombre de la variable precedido de $.
73 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
<xsl:template match=crucero> <xsl:variable name=precio select=//precio/> <hr/> <xsl:value-of select=yate/> Precio XML: <xsl:value-of select=precio/> Variable precio: <xsl:value-of select=$precio/> Suma: <xsl:value-of select=sum($precio)/> </xsl:template> La funcin sum() realiza el sumatorio de todos los valores de los elementos que se referencian entre parntesis.
Precio XML saca los valores reales de los elementos XML.
Variable precio solo saca el valor del primer elemento precio que se encuentra, y no cambia la variable de valor, aunque internamente lo cambia y lo acumula correctamente en la funcin sum(). Esto lo hace as porque hemos utilizado //precio que coge siempre el primer elemento, para refrescar la variable pondramos <xsl:variable name=precio select=./precio/> o <xsl:variable name=precio select=precio/>.
5.5.7. Comentarios.
Si queremos comentar algo en un documento XSL utilizamos <!-- y -->. Estas etiquetas no se procesan y por tanto no aparecen en el documento de salida. Si se desea que aparezcan los comentarios se utiliza el elemento <xsl:comment>.
<!-- esto es un comentario y no se procesa -->
<xsl:comment> Esto es un comentario que aparece en el documento de salida. </xsl:comment>
5.5.8. <xsl:text>.
Si queremos que en el documento de salida nos aparezca texto podemos optar por utilizar el elemento <xsl:text>, aunque existen otras alternativas mejores, como poner lo que se quiere sin las etiquetas: <xsl:text>hola</xsl:text> <font>hola </font>
Pero sin embargo si el texto del ejemplo anterior contiene caracteres especiales como tildes, , &... nos da un error de documento mal formado. Para ello se utiliza el <xsl:text> en combinacin del CDATA:
<font> <xsl:text disable-output-escaping=yes> <![CDATA[< Qué tal el tiempo en España >]]>
74 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
</xsl:text> </font>
Con el atributo disable-output-escaping deshabilitamos la obtencin en la salida de dichos caracteres. As la salida del ejemplo anterior ser: <Qu tal el tiempo en Espaa>
5.5.9. Scripts.
A travs de las sentencias <xsl:comment> y <![CDATA[ ]]> podremos aadir al documento algn cdigo javascript, vbscript...
<script language=javascript> <xsl:comment> <![CDATA[ function ejecutar() { if(document.comprar.haysize.value==si){ alert (debe seleccionar una talla); } } ]]> </xsl:comment> </script>
Aunque es muy frecuente que dentro del script necesitemos valores que nos lo pasen a travs del XML, en este caso se utiliza <xsl:text> en lugar de <xsl:comment>:
El XML Data Island permite incorporar un documento XML dentro de una pgina HTML. As podemos manejar datos de etiquetas XML en el propio HTML sin ningn tipo de programacin. Esto es propiedad de Microsoft
y slo funciona con Internet Explorer 5.0.
Para reconocer el documento XML usamos: <XML ID= SRC= >, donde ID nos sirve para identificarlo y SRC es el fichero XML. Con el atributo DATASRC dentro de la etiqueta <body> o <table>, le decimos la fuente del documento XML (el ID). Para obtener el valor usamos <SPAN DATAFLD= >, escribiendo el nombre del elemento en el atributo.
<HTML> <HEAD><TITLE>HTML con XML Data Island</TITLE></HEAD> <BODY> <XML ID=xmlDoc SRC=yate.xml></XML> <P>Esta pgina contiene un XML Data Island</P> <TABLE BORDER=1 DATASRC=#xmlDoc> <THEAD> <TH>ID Yate</TH> <TH>Nombre</TH> </THEAD> <TBODY> <TD><SPAN DATAFLD=id></SPAN><TD> <TD><SPAN DATAFLD=yate></SPAN><TD> </TBODY> </TABLE> </BODY> </HTML>
Para tener 2 hojas XML, habra que indicarle la fuente del documento XML antes de jugar con los valores. El incoveniente que tiene el XML Data Island es que incrusta todos los datos sin poder usar programacin.
76 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
5.7. XSL FORMATTING OBJECTS (XSL-FO).
(MS INFORMACIN EN CAPTULO 15 DE LA BIBLIA DE XML: FORMATEANDO OBJETOS http://www.ibiblio.org/xml/books/bible/updates/15.html)
Como su propio nombre indica XSL-FO se utiliza para formatear el contenido de un documento XML. Es decir, se le aplica un formato a los datos seleccionados por el XSL a partir de los datos originales en XML. Por tanto, en el proceso de formateo adems de intervenir patrones de bsqueda y transformacin (hoja de estilo), debe existir un convertidor o FOP, que es un procesador de hojas de estilo capaz de interpretar XSL-FO y generar documentos formateados como PDF.
Uno de los incovenientes del XSL-FO es que est en working-draft, pero es ms fcil que XSLT.
Para utilizar XSL-FO le indicamos el namespace usado en el atributo xmlns:fo, y debemos saber que una hoja XSL-FO posee regiones o reas:
Region: - Contiene reas de tipo block u otras reas de tipo regin. - Es un nivel ms alto en una XSL-FO. - Un objeto formateado contiene las siguientes regiones: fo:region-body, fo:region-before, fo:region-after, fo:region-start y fo:region-end.
Block: - Contiene reas de tipo line, espacios de visualizacin, otras reas de tipo block o reas de tipo regin.
Line: - Representan una lnea de texto dentro de un block. - Contiene reas de tipo inline o reas de espacios en blanco. - Permite asociar atributos de tipo font.
Inline: - Define cada uno de los caracteres o grficos dentro de una lnea.
<?xml version=1.0?>
77 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
78 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
6. PROCESADORES / PARSERS XML.
6.1. PROCESO DE DOCUMENTOS XML.
De alguna forma necesitamos una herramienta para aplicar una hoja de estilo al documento para poder visualizarlo y para validar el documento XML contra la DTD. No todos los parsers son validantes a pesar de manejar DTDs, lo que si hacen todos es que los documentos estn bien formados. Despus de utilizar el parser, podremos enviar el documento de salida a un documento o a pantalla.
Este parser puede generar un rbol DOM o un handler del documento (parser SAX). La diferencia es:
- el parser de DOM genera un rbol y nuestra programacin se basan en los movimientos de ese rbol. Vamos a tener mtodos para movernos, extraer valores, generar hijos, ...
- el API de SAX considera el documento una cadena string, y su incoveniente es que tenemos que programar los mtodos. Es decir, los mtodos ya estn definidos pero hay que programar el funcionamiento de estos.
Desde el punto de vista de recursos, el DOM consume ms ya que ste construye un rbol con todos los elementos del rbol, mientras que el SAX lo va haciendo a medida que ejecuta los eventos, va cargando los elementos en memoria. Pero desde el punto de vista del manejo, navegar por el rbol de DOM es mucho ms sencillo que con el SAX.
Existen muchos parsers: Project X (Sun Microsystems), lfred (Microstar Software), XML4J (IBM), Lark (Tim Bray), MSXML (Microsoft), XJ (Data Channel), Xerces (Apache), XP (James Clark), ...
6.2. Simple Api para Xml (SAX).
El API de SAX es un procesador de documento orientado a eventos, ya que va a ejecutar eventos predefinidos: startDocument, startElement, characters, endElement, endElement. Al DOM no lo llamamos, al SAX s; cuando llamamos al DOM, tenemos todos los mtodos; pero en el SAX, al parser lo llamas t y le decimos lo que queremos al manipulador de documentos, pues estn predeterminados los nombres de los mtodos pero no lo que tienen que hacer.
79 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Existen 2 versiones de SAX actualmente: SAX 1.0 y SAX 2.0. Esta ltima ofrece funciones o eventos que permiten modificar elementos del documento XML, que SAX 1.0 no las tiene.
Los paquetes que necesitamos para utilizarlos dentro de la clase java son org.xml.sax y org.xml.sax.helpers.
Cuando el parser acta sobre el documento XML, se ejecutan los eventos:
startDocument: se ejecuta cuando empieza el documento. startElement: se ejecuta por cada etiqueta de un elemento. characters: permite recuperar el contenido de un elemento. endElement: se ejecuta cuando encuentra la etiqueta de cierre de un elemento. endDocument: sta lo hace al finalizar el documento, cuando ya no encuentra ninguna informacin, no cuando encuentra la ltima etiqueta.
Automticamente con el manipulador de elementos, va llamando a cada uno de ellos pero debemos indicarle qu debe hacer cada uno. Se le llama manipulador porque determina lo que queremos hacer en cada elemento.
(Ms informacin en http://www.megginson.com/SAX/index.html)
6.3. Document Object Model (DOM).
El DOM proporciona un interface estndar para acceder y manipular estructuras XML (dentro de lo que es la jerarqua hay que moverse hasta el valor del elemento). Manipula documentos en forma de jerarqua de nodos, es independiente de la plataforma y del lenguaje de programacin, es una recomendacin W3C y adems est incorporado en muchos parsers. Para el DOM utilizamos el paquete org.w3.dom.
(Ms informacin en http://www.w3.org/DOM/)
80 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
ANEXO 1: RECOMENDACIN W3C febrero de 1998 (castellano).
EXTENSIBLE MARKUP LANGUAGE (XML) 1.0 RECOMENDACIN W3C 10 DE FEBRERO DE 1998 Esta versin: http://www.w3.org/TR/1998/REC-xml-19980210 http://www.w3.org/TR/1998/REC-xml-19980210.xml http://www.w3.org/TR/1998/REC-xml-19980210.html http://www.w3.org/TR/1998/REC-xml-19980210.pdf http://www.w3.org/TR/1998/REC-xml-19980210.ps ltima versin: http://www.w3.org/TR/REC-xml Versin previa: http://www.w3.org/TR/PR-xml-971208 Editores: Tim Bray (Textuality y Netscape) <tbray@textuality.com> Jean Paoli (Microsoft) <jeanpa@microsoft.com> C. M. Sperberg-McQueen (University of Illinois at Chicago) <cmsmcq@uic.edu>
ABSTRACTO El Lenguaje Extensible de Marcas (XML) es un subconjunto de SGML, que se describe completamente en este documento. Sus objetivos son habilitar el SGML genrico para que pueda ser servido, recibido y procesado en la Web de la manera que no es posible con HTML. XML ha sido diseado para facilitar la implementacin e interoperatividad con SGML y HTML.
ESTADO DE ESTE DOCUMENTO Este documento ha sido revisado por los miembros del W3C y otras partes interesadas, y ha sido refrendada por el Director como una Recomendacin W3C. Es un documento estable y puede ser utilizado como referencia o citado como referencia normativa desde otros documentos. El papel del W3C al realizar la Recomendacin es el de potenciar a la especificacin y promover su amplio despliegue. Este contribuye al incremento de la funcionalidad y la interoperatividad de la Web. Este documento especifica una sintaxis creada a partir de un estndar internacional de procesamiento de texto existente, el Lenguaje Generalizado Estndar de Marcas (Standard Generalized Markup Language, ISO 8879:1986(E)) para su uso en la World Wide Web. Es producto de la Actividad XML del W3C, de la que se pueden obtener detalles en http://www.w3.org/XML. As mismo, puede obtenerse una lista de las actuales recomendaciones y otros documentos tcnicos en http://www.w3.org/TR. Esta especificacin utiliza el trmino URI, que es definido por [Berners-Lee et al.], en un trabajo en proceso denominado [IETF RFC1738] as como en [IETF RFC1808]. La lista de erratas de esta especificacin est disponible en http://www.w3.org/XML/xml-19980210-errata (ingls). EXTENSIBLE MARKUP LANGUAGE (XML) 1.0 NDICE DE CONTENIDOS 1. Introduccin 1.1 Origen y Objetivos 1.2 Terminologa 2. Documentos 2.1 Documentos XML Bien-Formados 2.2 Caracteres 2.3 Construcciones Sintcticas Comunes 2.4 Datos Carcter y Marcas 2.5 Comentarios 2.6 Instrucciones de Procesamiento 2.7 Secciones CDATA 2.8 Prolog y Declaracin de Tipo de Documento 2.9 Declaracin de Documento Standalone 2.10 Manejo de "Espacios en Blanco" 2.11 Manejo de "Fines de Lnea"
81 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL 2.12 Identificacin del Lenguaje 3. Estructuras Lgicas 3.1 Etiquetas de Comienzo, Etiquetas de Fin, y Etiquetas de "Elementos-Vacos" 3.2 Declaraciones de Tipo de Elemento 3.2.1 Contenido del Elemento 3.2.2 "Contenido Mezclado" 3.3 Declaraciones de Listas de Atributos 3.3.1 Tipos de Atributos 3.3.2 Atributos por Defecto 3.3.3 Normalizacin de Atributos-Valor 3.4 Secciones Condicionales 4. Estructuras Fsicas 4.1 Referencias a Caracteres y Entidades 4.2 Declaraciones de Entidades 4.2.1 Entidades Internas 4.2.2 Entidades Externas 4.3 Entidades Analizadas 4.3.1 Declaracin de Texto 4.3.2 Entidades Analizadas Bien-Formadas 4.3.3 Codificacin de Caracteres en Entidades 4.4 Tratamiento de Entidades y Referencias por el Procesador XML 4.4.1 No Reconocidas 4.4.2 Incluidas 4.4.3 Incluidas si Validadas 4.4.4 Prohibidas 4.4.5 Incluidas en Literal 4.4.6 Notificar 4.4.7 Obviadas 4.4.8 Incluidas como PEs 4.5 Construccin de Texto de Reemplazo de Entidad Interna 4.6 Entidades Predefinidas 4.7 Declaraciones de Notacin 4.8 Entidad Documento 5. Conformancia 5.1 Procesadores Validadores y No Validadores 5.2 Utilizacin de Procesadores XML 6. Notacin
APNDICES A. Referencias A.1 Referencias Normativas A.2 Otras Referencias B. Clases de Caracteres C. XML y SGML (No Normativo) D. Expansin de Referencias a Entidades y Caracteres (No Normativo) E. Modelos de Contenido Deterministas (No Normativo) F. Autodeteccin de la Codificacin (No Normativo) G. Grupo de Trabajo XML del W3C (No Normativo)
1. INTRODUCCIN El Lenguaje Extensible de Marcas, abreviado XML, describe una clase de objetos de datos llamados documentos XML y describe parcialmente el comportamiento de los programas de computadora que los procesan. XML es un "perfil de aplicacin" o una forma restringida de SGML, el Lenguaje Estndar Generalizado de Marcacin [ISO 8879]. Por construccin, los documentos XML son documentos SGML conformados. Los documentos XML estn compuestos por unidades de almacenamiento llamadas entidades, que contienen tanto datos analizados como no analizados. Los datos analizados estn compuestos de caracteres, algunos de los cuales, de la forma datos carcter, y otros de la forma marca. Las marcas codifican una descripcin de la estructura de almacenamiento del documento y su estructura lgica. XML proporciona un mecanismo para imponer restricciones al almacenamiento y a la estructura lgica. Se utiliza un mdulo software llamado procesador XML para leer documentos XML y proporcionar acceso a su contenido y estructura. Se asume que un procesador XML hace su trabajo dentro de otro mdulo, llamado aplicacin. Esta especificacin describe el comportamiento requerido de un procesador XML en trminos de cmo leer datos XML y la informacin que debe proporcionar a la aplicacin.
82 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
1.1 ORIGEN Y OBJETIVOS XML fue desarrollado por un Grupo de Trabajo XML (originalmente conocido como "SGML Editorial Review Board") formado bajo los auspicios del Consorcio World Wide Web (W3C), en 1996. Fue presidido por Jon Bosak de Sun Microsystems con la participacin activa de un Grupo Especial de Inters en XML (previamente conocido como Grupo de Trabajo SGML) tambin organizado en el W3C. Los miembros del Grupo de Trabajo XML se especifican en un apndice. Dan Connolly sirvi como contacto entre el GT y el W3C. Los objetivos de diseo de XML son: 1. XML debe ser directamente utilizable sobre Internet. 2. XML debe soportar una amplia variedad de aplicaciones. 3. XML debe ser compatible con SGML. 4. Debe ser fcil la escritura de programas que procesen documentos XML. 5. El nmero de caractersticas opcionales en XML debe ser absolutamente mnima, idealmente cero. 6. Los documentos XML deben ser legibles por humanos y razonablemente claros. 7. El diseo de XML debe ser preparado rpidamente. 8. El diseo de XML debe ser formal y conciso. 9. Los documentos XML deben ser fcilmente creables. 10. La concisin en las marcas XML es de mnima importancia. Esta especificacin, junto con los estndares asociados (Unicode e ISO/IEC 10646 para caracteres, Internet RFC 1766 para identificacin de lenguajes, ISO 639 para cdigos de nombres de lenguajes, e ISO 3166 para cdigos de nombres de pases), proporciona toda la informacin necesaria para entender la Versin 1.0 de XML y construir programas de computador que los procesen. Esta versin de la especificacin puede ser distribuida libremente, siempre y cuando se mantengan intactos todos los textos y trminos legales.
1.2 TERMINOLOGA La terminologa utilizada para describir los documentos XML esta definida en el cuerpo de esta especificacin. Los trminos definidos en la siguiente lista son utilizados en la construccin de esas definiciones y en la descripcin de las acciones del procesador XML: poder La conformacin de documentos y los procesadores de XML pueden permitirlo, pero no requieren ser soportados tal y como se describen. deber La conformacin de documentos y los procesadores de XML deben soportarlo tal y como se describe, de otro modo son errneos. error Una violacin de las reglas de esta especificacin, los resultados estn indefinidos. Los programas conformadores deberan detectar e informar acerca de los errores y recuperarse de ellos. error fatal Un error que debe detectar un procesador XML e informar acerca de l a la aplicacin. Tras encontrar un error fatal, el procesador tiene que continuar procesando los datos para buscar otros posibles errores y debera de informar de los errores a la aplicacin. Para soportar la correccin de errores, el procesador debera hacer que los datos no procesados del documento (con datos carcter y marcas) sean accesibles a la aplicacin. Una vez que se detecta un error fatal, el procesador debe continuar el procesado normalmente (p.e. no debe continuar pasando los datos carcter e informacin acerca de la estructura lgica del documento a la aplicacin). opcin de usuario Los programas conformadores pueden o deben (dependiendo del tiempo verbal de la frase) comportarse como se describe. Si lo hacen, deben proporcionar mecanismos para deshabilitar el comportamiento descrito. restriccin de validez Una regla que se aplica a todo documento XML vlido. Las violaciones de la restriccin de validez son errores, y los procesadores validadores de XML deben, por opcin de usuario, informar de ellas. restriccin de buena-formacin
83 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Una regla que se aplica a todo documento XML bien-formado. Las violaciones de la restriccin buena-formacin son errores fatales. igualdad (de cadenas de caracteres o nombres:) Dos cadenas de caracteres o nombres a comparar deben ser idnticos. Los caracteres con mltiples representaciones posibles en la norma ISO/IEC 10646 (p.e. los caracteres con formas precompuestas y los "base+diacritic") slo son comparables si tienen la misma representacin en ambas cadenas. Por opcin de usuario, los procesadores pueden normalizar estos caracteres a alguna forma cannica (de cadenas de caracteres y reglas en la gramtica:) Una cadena de caracteres es igual a una produccin gramatical si pertenece al lenguaje generado por esa produccin. (de contenido y modelos de contenido:) Un elemento es igual a su declaracin cuando conforma las reglas descritas en la restriccin de "Validez de Elemento". por compatibilidad Una caracterstica de XML incluida nicamente para asegurar que XML permanece compatible con SGML. por interoperatividad Una recomendacin no obligatoria incluida para incrementar las funcionalidades de los documentos XML que pueden ser procesados por la base instalada existente de procesador SGML que aadan las adaptaciones WebSGML al ISO 8879.
2. DOCUMENTOS Un objeto de datos es un documento XML si esta bien-formado, tal y como se define en esta especificacin. Un documento XML bien-formado puede adems ser vlido si cumple una serie de restricciones. Todo documento XML posee una estructura lgica y una fsica. Fsicamente, el documento est compuesto de unidades llamadas entidades. Una entidad puede hacer referencia a otras entidades para que stas sean incluidas en el documento. Un documento comienza en una "raz" o entidad documento. Lgicamente, el documento est compuesto de declaraciones, elementos, comentarios, referencias a caracteres e instrucciones de procesamiento, todos los cuales se indican en el documento mediante marcas explcitas. Las estructuras lgica y fsica deben anidarse de manera correcta, como se describe en el punto "4.3.2 Entidades Analizadas Bien-Formadas".
2.1 DOCUMENTOS XML BIEN-FORMADOS Un objeto de texto es un documento XML bien-formado si: 1. Tomado como un todo, cumple la regla denominada document. 2. Respeta todas las restricciones de buena-formacin dadas en esta especificacin. 3. Cada una de las entidades analizadas que se referencia directa o indirectamente en el documento est bien- formada. Documento [1] document ::= prolog element Misc* Cumplir la produccin document implica que: 1. Contiene uno o ms elementos. 2. Hay exactamente un elemento, llamado raz, o elemento documento, del cual ninguna parte aparece en el contenido de ningn otro elemento. Para el resto de elementos, si la etiqueta de comienzo est en el contenido de algn otro elemento, la etiqueta de fin est en el contenido del mismo elemento. Es decir, los elementos delimitados por etiquetas de comienzo y final, de anidan adecuadamente mutuamente. Como consecuencia de esto, para cada elemento no raz H en el documento, existe otro elemento P tal que H est contenido en P, pero no es el contenido de ningn otro elemento que est en el contenido de P. P es denominado padre de H, y H es hijo de P.
2.2 CARACTERES Una entidad analizada contiene texto, una secuencia de caracteres, que pueden representar marcas o datos carcter. Un carcter es una unidad atmica de texto como se especifica en la norma ISO/IEC 10646 [ISO/IEC 10646]. Los caracteres legales son los tabuladores, retornos de carro, finales de lnea y los caracteres grficos legales del estndar
84 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Unicode y de la norma ISO/IEC 10646. La utilizacin de "compatibilidad de caracteres", como se define en la seccin 6.8 de [Unicode], no est contemplada. Rango de Caracteres [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000- #xFFFD] | [#x10000-#x10FFFF] /* cualquier carcter Unicode, excluyendo los bloques subrogados FFFE y FFFF. */ Los mecanismos para codificar los cdigos de caracteres en patrones de bits pueden variar de una entidad a otra. Todos los procesadores XML deben aceptar las codificaciones UTF-8 y UTF-16 de la norma ISO/IEC 10646. El mecanismo para sealar cual de las dos est en uso, o para definir otras codificaciones, se discutir ms abajo en la seccin "4.3.3 Codificacin de Caracteres en Entidades".
2.3 CONSTRUCCIONES SINTCTICAS COMUNES Esta seccin define algunos smbolos utilizados en la gramtica. El smbolo S (espacio en blanco) est compuesto de uno o ms caracteres espacio (#x20), retornos de carro, finales de lnea o tabuladores. Espacios en Blanco [3] S ::= (#x20 | #x9 | #xD | #xA)+ Los caracteres se clasifican, por conveniencia, en letras, dgitos u otros caracteres. Las letras se componen de caracteres de base alfabtica o silbica, seguidos de uno o ms caracteres combinatorios, o caracteres ideogrficos. Las declaraciones completas de cada clase de caracteres se da en "B. Clases de Caracteres". Un Nombre es un "token" que comienza con una letra o uno o ms caracteres de puntuacin, y que continua con letras, dgitos, guiones, subrayados, comas y/o puntos. Los Nombres que comienzan por la cadena "xml", o cualquiera que cumpla la regla (('X'|'x') ('M'|'m') ('L'|'l')), quedan reservados para estandarizacin en esta o futuras versiones de esta especificacin. Nota: El carcter dos puntos en los nombres XML est reservado para la experimentacin con espacios de nombres. Se prev que se estandarizar su significado en un futuro, en el que los documentos que utilicen este carcter con propsitos experimentales debern ser actualizados. (No existe garanta de que se adopte el mecanismo de espacios de nombres para XML). En la prctica, esto significa que los autores no deberan utilizar los dos puntos en XML, excepto como parte de espacios de nombres experimentales. Sin embargo los procesadores XML deben aceptar este carcter en los Nombres. Un "Nmtoken" (name token) es cualquier combinacin de caracteres de nombre. Nombres y "Tokens" [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (S Name)* [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (S Nmtoken)* Los datos literales consisten en cualquier cadena entrecomillada que no contenga el tipo de comillas utilizadas como delimitadores en la propia cadena. Los literales se utilizan para especificar el contenido de entidades internas ("EntityValue"), los valores de los atributos ("AttValue") y los identificadores externos ("SystemLiteral"). Hay que tener en cuenta que el smbolo "SystemLiteral" puede ser analizado sin tomar en cuenta la presencia de marcas. Literales [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' |"'" ([^%&'] | PEReference | Reference)* "'" [10] AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'" [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")
85 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
2.4 DATOS CARCTER Y MARCAS El Texto consiste en datos carcter y marcas entremezcladas. Las Marcas toman la forma de etiquetas de comienzo, etiquetas de fin, etiquetas de elementos vacos, referencias a entidades, referencias a caracteres, comentarios, secciones CDATA delimitadores, declaraciones de tipo de documento e instrucciones de procesamiento. Todo texto que no sea una marca constituye los denominados datos carcter del documento. El carcter "ampersand" (&) y el parntesis angular de apertura (<) pueden aparecer de forma literal slo cuando se utilicen como delimitadores de marcas, o dentro de los comentarios, en instrucciones de procesamiento, o en secciones CDATA. Tambin pueden utilizarse en los valores literales de entidad de una declaracin de entidad interna; ver "4.3.2 Entidades Analizadas Bien-Formadas". Si son necesarios en cualquier otro punto, deben ser "escapados" mediante la utilizacin de referencias numricas a caracteres, o mediante las cadenas "&" y "<" respectivamente. El parntesis angular de cierre (>) puede ser representado utilizando la cadena ">", y debe, por compatibilidad, ser "escapado" utilizando ">" o la referencia a carcter cuando aparece como contenido de la cadena "]]>", siempre y cuando la cadena no marque el final de una seccin CDATA. En el contenido de los elementos, los datos carcter son cualquier cadena de caracteres que no contenga el delimitador de comienzo de marca. En las secciones CDATA, los datos carcter son aquellos que no se incluyan en el delimitador de fin de seccin CDATA, "]]>". Para permitir que los valores de los atributos puedan contener tanto las comillas simples como las dobles, el carcter apstrofe o comilla simple (') puede ser representado como "'", y el comilla doble (") como """. Datos Carcter [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
2.5 COMENTARIOS Los Comentarios pueden aparecer en cualquier punto del documento, fuera del resto de marcas; adems, pueden aparecer en la declaracin de tipo de documento, en los lugares permitidos por la gramtica. No son parte de los datos carcter del documento. Un procesador XML puede, pero no debe, permitir a la aplicacin obtener el texto de los comentarios. Por compatibilidad, la cadena "--" (dos guiones) no puede aparecer dentro de un comentario. Comentarios [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->' Un ejemplo de comentario: <!-- declaraciones de <head> y <body> -->
2.6 INSTRUCCIONES DE PROCESAMIENTO Las Instrucciones de Procesamiento (PIs) permiten a los documentos contener instrucciones para las aplicaciones. Instrucciones de Procesamiento [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) Las PIs no son parte de los datos carcter del documento, pero deben ser pasadas a la aplicacin. Las PIs empiezan con un destino (PITarget) utilizado para identificar a la aplicacin a la que est dirigida dicha instruccin. Los nombres de
86 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
destino "XML", "xml", y las combinaciones de maysculas y minsculas a partir de stas, estn reservados para estandarizacin en esta o futuras versiones de esta especificacin. El mecanismo de Notacin XML puede ser utilizado para la declaracin formal de destinos de PIs.
2.7 SECCIONES CDATA Las secciones CDATA pueden aparecer all donde pueden aparecer los datos carcter. Se utilizan para "escapar" bloques de texto que contengan caracteres que de otra forma se reconoceran como marcas. Las secciones CDATA comienzan por la cadena "<![CDATA[" y terminan con la cadena "]]>": Secciones CDATA [18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= '<![CDATA[' [20] CData ::= (Char* - (Char* ']]>' Char*)) [21] CDEnd ::= ']]>' En una seccin CDATA slo la cadena CDEnd se reconoce como marca, por lo tanto, el parntesis angular de apertura y el carcter "ampersand" pueden aparecer de forma literal, es decir, no necesitan (y no pueden) ser "escapados" mediante "<" ni "&". No se pueden anidar las secciones CDATA. Veamos un ejemplo de seccin CDATA, en el cual "<saludo>" y "</saludo>" son reconocidos como datos carcter, y no como marcas: <![CDATA[<saludo>Hola, mundo!</saludo>]]>
2.8 PROLOG Y DECLARACIN DE TIPO DE DOCUMENTO Los documentos XML pueden, y deberan, comenzar con una declaracin XML que especifica la versin de XML utilizada. Por ejemplo, el siguiente es un documento XML completo, bien-formado pero no vlido: <?xml version="1.0"?> <saludo>Hola, mundo!</saludo> y tambin lo es: <saludo>Hola, mundo!</saludo> El nmero de versin "1.0" debera utilizarse para indicar la conformancia a esta versin de la especificacin. Se produce un error si un documento utiliza el valor "1.0" y ste no conforma la especificacin de esta versin. Es intencin del Grupo de Trabajo XML el proveer de nuevos nmeros versiones de esta especificacin, pero no se asegura que habrn futuras versiones de XML. Dado que no se han regulado futuras versiones, esta construccin se ha permitido para posibilitar el reconocimiento automticamente de la versin, si fuese necesario. Los procesadores deben indicar que existe un error si reciben un documento etiquetado con una versin que no soportan. La funcin de las marcas en los documentos XML reside en describir su almacenamiento y estructura lgica, as como asociar pares atributo-valor con dicha estructura lgica. XML proporciona un mecanismo, la declaracin de tipo de documento, para definir restricciones sobre las estructuras lgicas y para contemplar el uso de unidades de almacenamiento predefinidas. Un documento XML es vlido si tiene asociada una declaracin de tipo de documento y si el documento cumple las restricciones que all se expresan. La declaracin de tipo documento debe aparecer antes que el primer elemento en el documento. Prolog [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ") [25] Eq ::= S? '=' S? [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+
87 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
[27] Misc ::= Comment | PI | S La declaracin de tipo de documento XML, contiene o describe declaraciones de marcas que proporcionan una gramtica para una clase de documentos. Esta gramtica se conoce como definicin de tipo de documento o DTD. La declaracin de tipo de documento puede referirse a un subconjunto externo (un tipo especial de entidad externa) que contiene declaraciones, o puede contener las declaraciones de marcas directamente en un subconjunto interno, o puede hacer ambos. Una DTD para un documento consiste en la unin de ambos subconjuntos. Una declaracin de marcacin es una declaracin de tipo de elemento, una declaracin de lista de atributos, una declaracin de entidad, o una declaracin de notacin. Estas declaraciones pueden estar contenidas en su totalidad o en parte en las entidades parmetro, como se describe en las restricciones de buena-formacin y validez. Para ms informacin al respecto, ver la seccin "4. Estructuras Fsicas". Definicin de Tipo de Documento [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>' [ RV: Tipo de Elemento Raz ] [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment [ RV: Declaracin Apropiada/Anidamiento de PEs ] [ RBF: PEs en Subconj Interno ] La declaracin de marcas puede estar constituida totalmente o en parte de texto de reemplazo de entidades parmetro. Las reglas de produccin que aparecern en esta especificacin para los no terminales individuales (elementdecl, AttlistDecl, etc.) describen las declaraciones despus de que todas las entidades parmetro hayan sido incluidas. Restriccin de Validez: Tipo de Elemento Raz El Nombre (Name) en la declaracin de tipo de documento debe ser igual al tipo de elemento del elemento raz. Restriccin de Validez: Declaracin Apropiada/Anidamiento de PEs El texto de reemplazo de la entidad parmetro debe estar anidado apropiadamente dentro de la declaracin de marcas. Es decir, si el primer o el ltimo carcter en la declaracin de una marca (markupdecl arriba) est contenido en el texto de reemplazo para una referencia a entidad parmetro, ambos deben estar contenidos en el mismo texto de reemplazo. Restriccin de Buena-Formacin: PEs en el Subconjunto Interno En el subconjunto del DTD interno, las referencias a entidades parmetro slo pueden aparecer donde puedan aparecer las declaraciones de marcas, nunca dentro de las declaraciones de marcas. (Esto no se aplica a las referencias que aparecen en entidades parmetro externas o en el subconjunto externo.) Como en el subconjunto interno, el subconjunto externo y cualquier entidad parmetro externa referenciada en el DTD debe consistir de una serie de declaraciones completas de marcas de los tipos permitidos por el smbolo no-terminal markupdecl, intercaladas con espacios en blanco o referencias a entidades parmetro. Sin embargo, porciones de los contenidos del subconjunto externo o de las entidades parmetro externas pueden ser ignoradas condicionalmente mediante la utilizacin de la construccin seccin condicional; esto no est permitido en el subconjunto interno. Subconjunto Externo [30] extSubset ::= TextDecl? extSubsetDecl [31] extSubsetDecl ::= ( markupdecl | conditionalSect | PEReference | S )* El subconjunto externo y las entidades parmetro externas tambin difieren del subconjunto interno en que en ellos, las referencias a entidades parmetro son permitidas dentro de las declaraciones de marcas, no slo entre de ellas. Un ejemplo de un documento XML con una declaracin de tipo de documento: <?xml version="1.0"?> <!DOCTYPE saludo SYSTEM "hola.dtd"> <saludo>Hola, mundo!</saludo> El identificador de sistema "hola.dtd" proporciona el URI de una DTD para el documento. Las declaraciones pueden tambin darse localmente, como es este ejemplo: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE saludo [ <!ELEMENT saludo (#PCDATA)> ]>
88 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
<saludo>Hola, mundo!</saludo> En ambos se utilizan tanto en el subconjunto interno, como en el externo. El interno se considera que aparezca antes que el externo. Esto indica que las declaraciones de entidades y de listas de atributos en el subconjunto interno toman precedencia sobre las de externo.
2.9 DECLARACIN DE DOCUMENTO STANDALONE Las declaraciones de marcas pueden afectar al contenido de un documento, como cuando se pasan de un procesador XML a una aplicacin; un ejemplo de esto son los valores por defecto de los atributos y las declaraciones de entidades. La declaracin de documento standalone, que puede aparecer como componente de la declaracin XML, seala si existen o no dichas declaraciones que aparecen externamente a la entidad documento. Declaracin de Documento Standalone [32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) [ RV: Declaracin de Documento Standalone ] En la declaracin de documento standalone, el valor "yes" indica que no existen declaraciones de marcas externas a la entidad documento (ni en el subconjunto externo del DTD, ni en una entidad parmetro externa referenciada desde el subconjunto interno) que afecte a la informacin pasada desde el procesador XML a la aplicacin. El valor "no" indica que existe o que pueden haber dichas declaraciones externas de marcas. La declaracin de documento standalone slo denota la presencia de declaraciones externas; la presencia, en un documento, de referencias a entidades externas, cuando esas entidades son declaradas internamente, no cambia el estado standalone del documento. Si no existen declaraciones externas de marcas, la declaracin de documento standalone no tiene sentido. Si, por el contrario, existiesen, pero no hay ninguna declaracin de documento standalone, se asume el valor "no". Cualquier documento XML para el cual standalone="no" puede convertirse algortmicamente en un documento standalone, el cual puede ser necesario para algunas aplicaciones de envo en un entorno de redes. Restriccin de Validez: Declaracin de Documento Standalone La declaracin de documento standalone debe tener el valor "no" si cualquier declaracin externa de marcas contiene: atributos con valores por defecto, si los elementos a los que se aplican esos atributos aparecen en el documento sin especificaciones de valores para esos atributos, o entidades (que no sean amp, lt, gt, apos, quot), si las referencias a esas entidades aparecen en el documento, o atributos con valores sujetos a normalizacin, donde el atributo aparece en el documento con un valor que cambiar como resultado de la normalizacin, o tipos de elementos con contenido de elemento, si aparecen espacios en blanco directamente dentro de cualquier instancia de esos tipos. Un ejemplo de declaracin XML con una declaracin de documento standalone: <?xml version="1.0" standalone='yes'?>
2.10 MANEJO DE "ESPACIOS EN BLANCO" En la edicin de documentos XML, suele ser conveniente utilizar "espacios en blanco" (espacios, tabuladores y lneas en blanco, denotadas por el no terminal S en esta especificacin) para mantener la legibilidad de las marcas. Generalmente estos caracteres no deben incluirse en una posible versin distribuible del documento a travs de una red. Por otro lado, existen ocasiones en las que es deseable la existencia de esos "espacios", por ejemplo en poesa y en la representacin de cdigo fuente. Un procesador XML debe pasar siempre todos los caracteres de un documento, que no sean marcas, a la aplicacin. Un procesador XML validador debe informar tambin a la aplicacin acerca de los caracteres que constituyen los "espacios en blanco" contenidos en el contenido del elemento.
89 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Un atributo especial denominado xml:space puede ser adjuntado a un elemento para sealar la necesidad de mantener los caracteres "espacio" en dicho elemento. Los "espacios" deben ser preservados por las aplicaciones. En los documentos vlidos, este atributo, como cualquier otro, debe ser declarado si se utiliza. Cuando se declara, debe darse como un tipo enumerado cuyo nico valor posible es "default" y "preserve". Por ejemplo: <!ATTLIST poema xml:space (default|preserve) 'preserve'> El valor "default" indica que el procesamiento por defecto por parte de las aplicaciones de los "espacios en blanco" es aceptable para este elemento. El valor "preserve" indica que las aplicaciones deben preservar todos los "espacios en blanco". Esta declaracin se considera aplicable a todos los elementos dentro del contenido del elemento donde esta especificada, salvo que se anule con otra instancia del atributo xml:space. Se considera que el elemento raz de los documento, por defecto, no requiere el manejo especial de "espacios" de la aplicacin, si no tiene declarado este atributo.
2.11 MANEJO "FINES DE LNEA" Las entidades analizadas XML son frecuentemente almacenadas en archivos de ordenador, y por conveniencia de edicin, estn organizados en lneas. Estas lneas estn tpicamente separadas por una combinaciones de caracteres formada por "retorno de carro" (#xD) y "fin de lnea" (#xA). Para simplificar las tareas de las aplicaciones, bien sea una entidad analizada externa o una entidad valor literal de una entidad analizada interna, ambas contienen la secuencia literal de dos caracteres "#xD#xA" o un nico literal #xD. Un procesador XML debe pasar nicamente a la aplicacin el carcter #xA. (Este comportamiento puede ser producido mediante la normalizacin de todos los "fines de lnea" a caracteres #xA antes de ser analizados).
2.12 IDENTIFICACIN DEL LENGUAJE En el procesado de documentos, suele ser til la identificacin entre el lenguaje natural o el lenguaje formal, en el que est escrito el contenido. Un atributo especial denominado xml:lang puede ser insertado en los documentos para especificar el lenguaje utilizado en los contenidos y los valores de atributos de cualquier elemento en un documento XML. En los documentos vlidos, este atributo, como cualquier otro, debe ser declarado si se utiliza. Los valores de este atributo son identificadores de lenguajes como los definidos en el documento [IETF RFC 1766], "Etiquetas para la Identificacin de Lenguajes": Identificacin de Lenguaje [33] LanguageID ::= Langcode ('-' Subcode)* [34] Langcode ::= ISO639Code | IanaCode | UserCode [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+ [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+ La produccin Langcode puede ser cualquiera de las siguientes: un cdigo de dos letras como se define en la norma [ISO 639], "Cdigos para la representacin de nombres de lenguajes" un identificador de lenguaje registrado con la Internet Assigned Numbers Authority [IANA]; stos comienzan con el prefijo "i-" (o "I-") un identificador de lenguaje asignado por el usuario, o convenido entre las partes en uso privado; stos deben comenzar con el prefijo "x-" o "X-", de manera que se asegure que no entran en conflicto con nombres que puedan ser estandarizados o registrados por la IANA Puede haber cualquier nmero de segmentos Subcode. Si el primer segmento de subcdigo existe y ese subcdigo consiste en dos letras, ste debe pertenecer al cdigo de un pas de la norma [ISO 3166], "Cdigos para la representacin de nombres de pases". Si el primer subcdigo contiene ms de dos letras, ste debe ser un subcdigo para el lenguaje en cuestin, registrado por la IANA, a no ser que Langcode comience por el prefijo "x-" o "X-".
90 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Se suele acordar dar el cdigo del lenguaje en minsculas, y el cdigo del pas (si tuviese) en maysculas. Hay que resaltar que estos valores, a diferencia del resto de nombres en XML, son representables indistintamente en minsculas o en maysculas. Por ejemplo: <p xml:lang="en">The quick brown fox jumps over the lazy dog.</p> <p xml:lang="en-GB">What colour is it?</p> <p xml:lang="en-US">What color is it?</p> <sp who="Faust" desc='leise' xml:lang="de"> <l>Habe nun, ach! Philosophie,</l> <l>Juristerei, und Medizin</l> <l>und leider auch Theologie</l> <l>durchaus studiert mit heiem Bemh'n.</l> </sp> El atributo xml:lang declarado se considera que debe aplicarse a todos los atributos y al contenido de los elementos donde esta especificado, a no ser que sea anulado por otra instancia de xml:lang en otro elemento de ese contenido. Una simple declaracin para xml:lang puede tomar la forma: xml:lang NMTOKEN #IMPLIED pero tambin pueden darse los valores por defecto especficos. En una coleccin de poemas franceses para estudiantes ingleses, con notas en ingls, el atributo xml:lang puede ser declarado de la siguiente manera: <!ATTLIST poema xml:lang NMTOKEN 'fr'> <!ATTLIST anotacin xml:lang NMTOKEN 'en'>
3. ESTRUCTURAS LGICAS Cada documento XML contiene uno o ms elementos, cuyos lmites estn delimitados por etiquetas de comienzo y etiquetas de fin, o en los elementos vacos, por una etiqueta de elemento vaco. Cada elemento tiene un tipo, identificado por un nombre, a veces denominado "identificador genrico" (GI: Generic Identifier), y puede tener un conjunto de especificaciones de atributos. Cada una de stas tiene un nombre y un valor. Elemento [39] element ::= EmptyElemTag | STag content ETag [ RBF: Igualdad de Tipo de Elemento ] [ RV: Elemento Vlido ] Esta especificacin no restringe la semntica, la utilizacin, o (ms all de la sintaxis) los nombres de los tipos de elementos y de los atributos, excepto los nombres que comiencen por (('X'|'x')('M'|'m')('L'|'l')) que estn reservados para estandarizacin en esta o en futuras versiones de esta especificacin. Restriccin de Buena-Formacin: Igual de Tipo de Elemento El Nombre en la etiqueta de fin de un elemento debe ser igual al de la etiqueta de comienzo. Restriccin de Validez: Elemento Vlido Un elemento es vlido si existe una declaracin que cumpla con la regla elementdecl donde el Nombre sea igual al tipo de elemento, y uno se mantenga uno de los siguientes: 1. La declaracin cumple la regla EMPTY y el elemento no tiene contenido. 2. La declaracin cumple la regla 'children' y la secuencia 'elementos child' pertenece al lenguaje generado por la expresin regular en el modelo de contenido, con espacios en blanco opcionales (caracteres que cumplan la regla S) entre todo par de elementos 'child'. 3. La declaracin cumple la regla 'Mixed' y el contenido de la misma consiste en datos carcter y 'elementos child' cuyos tipos sean iguales a los nombres del modelo de contenido. 4. La declaracin cumple la regla ANY, y los tipos de cualquier 'elemento child' han sido declarados.
91 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
3.1 ETIQUETAS DE COMIENZO, ETIQUETAS DE FIN Y ETIQUETAS DE "ELEMENTOS-VACOS" El comienzo de todo elemento XML no vaco est marcado por una etiqueta de comienzo. Etiqueta de Comienzo [40] STag ::= '<' Name (S Attribute)* S? '>' [ RBF: Espec Atrib nico ] [41] Attribute ::= Name Eq AttValue [ RV: Tipo de Valor Atributo ] [ RBF: No Referencia a Entidad Externa ] [ RBF: No < en Valores Atributo ] El Nombre en las etiquetas de comienzo y de fin proporciona el tipo del elemento. Los pares Name-AttValue son referidos como las especificaciones de atributos del elemento, con el Name en cada par referido como el nombre de atributo y el contenido del AttValue (el texto entre los delimitadores ' o ") como el valor del atributo. Restriccin de Buena-Formacin: Especificacin de Atributo nico ningn nombre de atributo puede aparecer ms de una vez en la misma etiqueta de comienzo o de "elemento-vaco". Restriccin de Validez: Tipo de Valor de los Atributos El atributo debe haber sido declarado, el valor debe ser del tipo declarado para l. (Para tipos de atributos, ver "3.3 Declaraciones de Listas de Atributos"). Restriccin de Buena-Formacin: No Referencia a Entidades Externas Los valores de los atributos no pueden contener entidades referencia directas o indirectas a entidades externas. Restriccin de Validez: No < en Valores de Atributos El texto de reemplazo de cualquier entidad referenciada directa o indirectamente en un valor de atributo (cualquiera salvo "<") no debe contener el carcter <. Un ejemplo de etiqueta de comienzo podra ser: <defterm id="dt-perro" term="perro"> El final de todo elemento que comience con una etiqueta de comienzo debe ser marcado con una etiqueta de fin que contenga un nombre que responda al tipo de elemento dado en la etiqueta de comienzo: Etiqueta de Fin [42] ETag ::= '</' Name S? '>' Un ejemplo de etiqueta de fin: </defterm> El texto entre las etiquetas de comienzo y de fin se denomina contenido: Contenido de los Elementos [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)* Si un elemento est vaco, debe ser representado por una etiqueta de comienzo seguida de una etiqueta de fin, o por una etiqueta de "elemento-vaco". Una etiqueta de "elemento-vaco" tiene la siguiente forma: Etiquetas para Elementos Vacos [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>' [ RBF: nico Atrib. Especif. ] Las etiquetas de "elemento-vaco" pueden ser utilizadas por cualquier elemento que no tenga contenido, sea o no declarado mediante la utilizacin de la palabra clave EMPTY. Por interoperatividad, la etiqueta de "elemento-vaco" debe ser utilizada, y slo puede ser utilizada, en elementos que estn declarados como EMPTY. Ejemplos de "elementos-vacos": <IMG align="left"
92 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
3.2 DECLARACIONES DE TIPO DE ELEMENTO La estructura elemento de un documento XML puede, a efectos de validacin, estar restringida mediante la utilizacin de declaraciones de tipos de elementos y de listas de atributos. Una declaracin de tipo de elemento restringe el contenido del propio elemento. Las declaraciones de tipo de elemento suelen restringir el tipo de elementos que pueden aparecer como 'children' del citado elemento. Un procesador XML puede indicar una advertencia cuando una declaracin menciona un tipo de elemento para el que no se ha dado una declaracin, como opcin del usuario, dado que esto no supone ser un error. Una declaracin de tipo de elemento es de la forma: Declaracin de Tipo de Elemento [45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>' [ RV: Declaracin de Tipo de Elemento nico ] [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children donde la produccin Name proporciona el tipo de elemento que se est declarando. Restriccin de Validez: Declaracin nica de Tipo de Elemento Ningn tipo de elemento debe ser declarado ms de una vez. Ejemplos de declaraciones de tipo de elemento: <!ELEMENT br EMPTY> <!ELEMENT p (#PCDATA|emph)* > <!ELEMENT %name.para; %content.para; > <!ELEMENT contenedor ANY>
3.2.1 CONTENIDO DEL ELEMENTO Un tipo de elemento tiene contenido del elemento cuando los elementos de ese tipo deben contener slo elementos hijos (no datos carcter), opcionalmente separados por "espacios en blanco" (caracteres que cumplan la regla S). En este caso, la restriccin incluye un modelo de contenido, una gramtica simple que gobierna los tipos de 'elementos hijo' permitidos y el orden en que pueden aparecer. La gramtica est constituida por partculas de contenido (cps), que consisten en nombres, 'listas de seleccin' de partculas de contenido o 'listas secuencia' de partculas de contenido: Modelos de Contenido de Elemento [47] children ::= (choice | seq) ('?' | '*' | '+')? [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')? [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')' [ RV: Grupo Apropiado/Anidamiento de PEs ] [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')' [ RV: Grupo Apropiado/Anidamiento de PEs ] donde cada 'Name' es el tipo de un elemento que puede aparecer como un 'child'. Cualquier partcula de contenido en una lista de seleccin puede aparecer en el contenido del elemento donde la lista de seleccin aparece en la gramtica. Las partculas de contenido que aparecen en las listas de secuencias deben aparecer cada una en el contenido del elemento en el orden dado en la lista. El carcter opcional que sigue a un nombre o una lista gobierna si el elemento o las partculas de contenido en la lista pueden aparecer una o ms veces (+), cero o ms (*), o cero o una vez (?). La ausencia de dicho operador significa que el elemento o partcula de contenido debe aparecer exactamente una vez. Esta sintaxis y su significado son idnticos a los utilizados en las reglas de produccin de esta especificacin. El contenido de una elemento es igual al modelo de contenido si y slo si es posible trazar una ruta a travs del modelo de contenido, obedeciendo la secuencia, opcin y operadores de repeticin e igualando cada elemento en el contenido contra un tipo de elemento en el modelo de contenido. Por compatibilidad, se produce un error si un elemento del
93 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
documento puede ser igual a ms de una ocurrencia de un tipo de elemento en el modelo de contenido. Para ms informacin, ver "E. Modelos de Contenido Deterministas". Restriccin de Validez: Grupo apropiado/Anidamiento de PEs Las entidades parmetro texto de reemplazo deben ser anidadas apropiadamente con grupos de parntesis. Es decir, si cualquiera de los parntesis de apertura o de cierre de una construccin choice, seq o Mixed est contenida en el texto de reemplazo para una entidad parmetro, ambas deben estar contenidas en el mismo texto de reemplazo. Por interoperatividad, si una entidad parmetro aparece en una construccin choice, seq o Mixed, su texto de reemplazo no tendra que estar vaco, y ni el primero ni el ltimo carcter 'no-blanco' del texto de reemplazo debe ser un 'conector'. (| o ,). Ejemplos de modelos de contenido de elemento: <!ELEMENT especif (frente, cuerpo, epilogo?)> <!ELEMENT div1 (cabecera, (p | lista | nota)*, div2*)> <!ELEMENT cuerpo-diccionario (%div.mix; | %dict.mix;)*>
3.2.2 "CONTENIDO MEZCLADO" Un tipo de elemento tiene "contenido mezclado" cuando los elementos de ese tipo pueden contener datos carcter, opcionalmente entremezclados con elementos child. En este caso, los tipos de los elementos 'child' pueden ser restringidos, pero no su orden o su nmero de apariciones: Declaracin de "Contenido Mezclado" [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')' [ RV: Grupo Apropiado/Anidam. PEs ] [ RV: No Tipos Duplicados ] donde las construcciones Name dan los tipos de los elementos que pueden aparecer como hijos. Restriccin de Validez: No Duplicacin de Tipos El mismo nombre no debe aparecer ms de una vez en una sola declaracin de "contenido mezclado". Ejemplos de declaraciones de contenido mezclado: <!ELEMENT p (#PCDATA|a|ul|b|i|em)*> <!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* > <!ELEMENT b (#PCDATA)>
3.3 DECLARACIONES DE LISTAS DE ATRIBUTOS Los atributos se utilizan para asociar pares nombre-valor con elementos. Las especificaciones de atributos pueden aparecer slo dentro de las etiquetas de comienzo y en las etiquetas de elemento vaco. Las reglas de produccin utilizadas para reconocer su aparicin en "3.1 Etiquetas de Comienzo, Etiquetas de Fin y Etiquetas de Elementos-Vacos". Las declaraciones de Listas de Atributos pueden utilizarse para: Definir el conjunto de atributos pertenecientes a un tipo de elemento dado. Establecer restricciones de tipo para dichos atributos. Proporcionar valores por defecto para los atributos. Las declaraciones de Listas de Atributos especifican el nombre, tipo de datos y valores por defecto (si tuvieran) para cada atributo asociado con un tipo de elemento dado: Declaraciones de Listas de Atributos [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>' [53] AttDef ::= S Name S AttType S DefaultDecl
94 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
La expresin Name en la regla AttlistDecl es tipo del elemento. Como opcin de usuario, los procesadores XML pueden indicar si los atributos estn declarados para un tipo de elemento que no est declarado, hecho que no constituye un error. La expresin Name en la regla AttDef es el nombre del atributo. Cuando se proporciona ms de una AttlistDecl para un tipo de elemento dado, los contenidos de todos esas declaraciones se entremezclan. Cuando se proporciona ms de una definicin para el mismo atributo de un tipo de elemento dado, se mantiene la primera declaracin y se ignora el resto. Por interoperatividad, los creadores de DTDs deben proporcionar, al menos, una declaracin de lista de atributos para un tipo de elemento dado, una definicin de atributo para un nombre de atributo dado, y por lo menos una definicin de atributo en cada declaracin de lista de atributos Por interoperatividad, los procesadores XML pueden indicar una alerta cuando se proporciona ms de una declaracin de lista de atributos para un tipo de elemento dado, o ms de una definicin de atributo para una atributo dado. Esta es una opcin de usuario y no supone ningn tipo de error.
3.3.1 TIPOS DE ATRIBUTOS Los tipos de atributos de XML son de tres tipos: el tipo cadena, el conjunto de los tipos 'tokenizados' y los tipos enumerados. El tipo cadena puede tomar cualquier cadena literal como valor. Los tipos 'tokenizados' poseen restricciones lxicas y semnticas variantes, como se describe a continuacin: Tipos de Atributos [54] AttType ::= StringType | TokenizedType | EnumeratedType [55] StringType ::= 'CDATA' [56] TokenizedType ::= 'ID' [ RV: ID ] [ RV: Un ID por Tipo de Elemento ] [ RV: Atributo por Defecto ID ] | 'IDREF' [ RV: IDREF ] | 'IDREFS' [ RV: IDREF ] | 'ENTITY' [ RV: Nombre de Entidad ] | 'ENTITIES' [ RV: Nombre de Entidad ] | 'NMTOKEN' [ RV: Nombre de Token ] | 'NMTOKENS' [ RV: Nombre de Token ] Restriccin de Validez: ID Los valores de tipo ID deben ser iguales a la regla de produccin Name. Un nombre no puede aparecer ms de una vez de un documento XML como valor de este tipo. P.e.: los valores de ID slo deben identificar a los elementos que los producen. Restriccin de Validez: Un ID por Tipo de Elemento Ningn tipo de elemento puede tener ms de un atributo ID especificado. Restriccin de Validez: Atributo por Defecto ID Un atributo ID debe tener declarado por defecto el valor #IMPLIED o #REQUIRED. Restriccin de Validez: IDREF Los valores del tipo IDREF deben ser iguales a la regla de produccin Name, y los valores del tipo IDREFS deben ser iguales a Names. Cada Name debe ser igual al valor de un atributo ID de alguno de los elementos del documento XML. P.e. los valores de IDREF deben ser iguales a los valores de algn atributo ID. Restriccin de Validez: Nombre de Entidad Los valores del tipo ENTITY deben ser iguales a la regla de produccin Name, los valores del tipo ENTITIES deben ser iguales a Names. Cada Name debe ser igual al nombre de una entidad no analizada declarada en la DTD. Restriccin de Validez: Nombre de Token Los valores del tipo NMTOKEN deben ser iguales a la regla de produccin Nmtoken, los valores del tipo NMTOKENS deben ser iguales a Nmtokens. Los atributos enumerados pueden tomar una de las listas de valores proporcionadas en la declaracin. Existen dos tipos de tipos enumerados: Tipos de Atributos Enumerados
95 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
[57] EnumeratedType ::= NotationType | Enumeration [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' [ RV: Atributos de Notacin ] [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' [ RV: Enumeracin ] Un atributo NOTATION identifica una notacin, declarada en la DTD con su sistema asociado y/o identificadores pblicos, para ser utilizados en la interpretacin del elemento al cual est unido el atributo. Restriccin de Validez: Atributos de Notacin Los valores de este tipo deben ser iguales a los del nombre de notacin incluidos en la declaracin. Todos los nombres de notacin de la declaracin deben ser declarados. Restriccin de Validez: Enumeracin Los valores de este tipo deben ser iguales a los de los tokens Nmtoken de la declaracin. Por interoperatividad, no puede aparecer el mismo Nmtoken ms de una vez en los tipos de atributos enumerados de un nico tipo de elemento.
3.3.2 ATRIBUTOS POR DEFECTO Una declaracin de atributos proporciona informacin sobre si la presencia de los atributos es requerida, o sino, como debe reaccionar un procesador XML si un atributo declarado est ausente en un documento. Atributos por Defecto [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue) [ RV: Atributo Requerido ] [ RV: Atributo por Defecto Legal ] [ RBF: No < en Valores de Atributos ] [ RV: Atributo por Defecto Fijado ] En una declaracin de atributo, #REQUIRED significa que ese atributo debe ser dado siempre, #IMPLIED que no se da un valor por defecto. Si la declaracin no es ni #REQUIRED ni #IMPLIED, entonces el valor AttValue contiene el valor por defecto declarado. La palabra clave #FIXED indica que el atributo debe siempre tener el valor por defecto. Si se declara el valor por defecto, cuando un procesador XML encuentra un atributo omitido, debe comportarse como si el atributo estuviese presente, con el valor por defecto declarado. Restriccin de Validez: Atributo Requerido Si la declaracin por defecto es la palabra clave #REQUIRED, el atributo debe ser especificado para todos los elementos del tipo de la declaracin de la lista de atributos. Restriccin de Validez: Atributo por Defecto Legal El valor por defecto declarado debe cumplir las restricciones lxicas del tipo de atributo declarado. Restriccin de Validez: Atributo por Defecto Fijado Si un atributo tiene un valor por defecto declarado con la palabra clave #FIXED, las instancias de ese atributo deben ser iguales al valor por defecto. Ejemplos de declaraciones de listas de atributos: <!ATTLIST defterm id ID #REQUIRED nombre CDATA #IMPLIED> <!ATTLIST lista tipo (ordenada|glosario) "ordenada"> <!ATTLIST formulario metodo CDATA #FIXED "POST">
3.3.3 NORMALIZACIN DE ATRIBUTOS-VALOR Antes de que el valor de un atributo se pase a la aplicacin o se compruebe su validez, el procesador XML debe normalizarlo como se indica a continuacin:
96 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
una referencia a carcter es procesada mediante la adicin del carcter referenciado al valor del atributo una referencia a entidad es procesada por procesamiento recursivo del texto de reemplazo de la entidad un carcter "espacio en blanco" (#x20, #xD, #xA, #x9) es procesado mediante la adicin del valor normalizado #x20, excepto en la secuencia "#xD#xA" que slo se aade un nico #x20, que es parte de una entidad externa analizada o el valor literal de entidad de una entidad interna analizada el resto de caracteres son procesados mediante la adicin del valor normalizado Si el valor declarado no es de tipo CDATA, el procesador XML debe procesar el valor de atributo normalizado, mediante el descartado de cualquier carcter espacio (#x20) por delante o por detrs, y mediante el reemplazo de secuencias de caracteres espacio (#x20) por un nico carcter espacio (#x20). Todos los atributos para los que no se ha ledo la declaracin deben ser tratado por un analizador no validador como se declara en CDATA.
3.4 SECCIONES CONDICIONALES Las secciones condicionales son porciones del subconjunto externo de la declaracin de tipo de documento que estn incluidas en, o excluidas de, la estructura lgica de la DTD basada en la palabra clave que las gobierna. Seccin Condicionales [61] conditionalSect ::= includeSect | ignoreSect [62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>' [63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>' [64] ignoreSectContents ::= Ignore ('<![' ignoreSectContents ']]>' Ignore)* [65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*) Como ocurre con los subconjuntos de la DTD internos y externos, una seccin condicional puede contener una o ms declaraciones completas, comentarios, instrucciones de procesamiento o secciones condicionales anidadas, entremezcladas con espacios en blanco. Si la palabra clave de la seccin condicional es INCLUDE, los contenidos de la seccin condicional son parte de la DTD. Si la palabra clave es por el contrario IGNORE, los contenidos de la seccin condicional no son parte lgica de la DTD. Hay que subrayar que para poder realizar un anlisis con confianza, incluso los contenidos de la secciones condicionales ignoradas debe ser ledo para poder detectar secciones condicionales anidadas y asegurar que el final de la seccin ignorada ms extrema se detecta de manera adecuada. Si una seccin condicional con la palabra clave INCLUDE aparece dentro de una seccin condicional ms grande con la palabra clave IGNORE, ambas, la ms exterior y la interior son ignoradas. Si la palabra clave de la seccin condicional es una referencia a entidad parmetro, la entidad parmetro debe ser reemplazada por su contenido antes de que el procesador decida si incluye o ignora la seccin condicional. Un ejemplo: <!ENTITY % borrador 'INCLUDE' > <!ENTITY % final 'IGNORE' >
<![%borrador;[ <!ELEMENT libro (comentarios*, titulo, cuerpo, suplementos?)> ]]> <![%final;[ <!ELEMENT libro (titulo, cuerpo, suplementos?)> ]]>
4. ESTRUCTURAS FSICAS Un documento XML puede consistir de una o ms unidades de almacenamiento. Estas se denominan entidades, y todas ellas poseen contenidos y todas son (excepto la entidad documento, ver ms abajo, y el subconjunto externo de la
97 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
DTD) identificadas por su nombre. Cada documento XML posee una entidad denominada entidad documento, la cual sirve de punto de comienzo al procesador XML y que puede contener a todo el documento. Las entidades pueden ser analizadas o no analizadas. Los contenidos de una entidad analizada son referenciados como su texto de reemplazo. Este texto es considerado parte integral del documento. Una entidad no analizada es un recurso cuyo contenido puede o no ser texto, y si lo es, puede que no sea XML. Cada entidad no analizada tiene notacin asociada, identificada por su nombre. A parte de la necesidad de que los procesadores XML hagan accesibles los identificadores de la entidad y la notacin a la aplicacin, XML no impone ningn otro tipo de restricciones a los contenidos de las entidades no analizadas. Las entidades analizadas son invocadas por su nombre mediante la utilizacin de referencias a entidades, las no analizadas lo hacen por su nombre, dado en el valor de los atributos ENTITY o ENTITIES. Las Entidades Generales son entidades que se utilizan dentro del contenido del documento. En esta especificacin, las entidades generales son referenciadas, a veces, simplemente con el trmino entidad, siempre y cuando no se produzcan ambigedades. Las entidades parmetro son entidades analizadas que se utilizan en las DTDs. Estos dos tipos de entidades utilizan diferentes formas y referencias y son reconocidas en contextos diferentes, es ms, ocupan diferentes espacios de nombres. Pueden existir una entidad parmetro y una entidad general con el mismo nombre, dado que son entidades diferentes.
4.1 REFERENCIAS A CARACTERES Y ENTIDADES Una referencia a carcter hace referencia a un carcter especifico del conjunto de caracteres de la norma ISO/IEC 10646. Un ejemplo puede ser un carcter no accesible directamente a travs de los dispositivos de introduccin de datos. Referencia a Carcter [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';' [ RBF: Carcter Legal ] Restriccin de Buena-Formacin: Carcter Legal Los caracteres referenciados mediante la utilizacin de referencias a caracteres deben cumplir los requisitos de la regla de produccin Char. Si la referencia a carcter comienza por "&#x", los dgitos y las letras que le siguen hasta la aparicin de ; proporcionan una representacin hexadecimal del punto cdigo del carcter en la norma ISO/IEC 10646. Si comienza por "&#", los dgitos que aparecen hasta la aparicin de ; indican una representacin decimal del punto cdigo de carcter. Una referencia a entidad referencia al contenido de una entidad con nombre. Las referencias a entidades generales analizadas utilizan el carcter ampersand (&) y, el punto y coma (;) como delimitadores. Las referencias a entidades parmetro utilizan el signo de porcentaje (%) y el punto y coma (;) como delimitadores. Referencia a Entidad [67] Reference ::= EntityRef | CharRef [68] EntityRef ::= '&' Name ';' [ RBF: Entidad Declarada ] [ RV: Entidad Declarada ] [ RBF: Entidad Analizada ] [ RBF: No Recursin ] [69] PEReference ::= '%' Name ';' [ RV: Entidad Declarada ] [ RBF: No Recursin ] [ RBF: En DTD ] Restriccin de Buena-Formacin: Entidad Declarada En los documentos sin ningn DTD, un documento con slo un subconjunto de DTD interno que no contiene referencias a entidades parmetro, o un documento con la clusula "standalone='yes'", el smbolo Name dado en la referencia a entidad debe ser igual al dado en una declaracin de entidad/A>, excepto en los documentos bien-formados que utilicen las entidades predeclaradas: amp, lt, gt, apos, quot. La declaracin de las entidades parmetro deben preceder a cualquier referencia a ellas. De igual manera, las declaracin de las entidades generales debe preceder a cualquier referencia a ellas que aparezca en la declaracin de los valores por defecto de una lista de atributos. Si las entidades se declaran en el subconjunto externo o en las entidades parmetro externas, los procesadores no validadores no estn obligados a leer y procesar sus declaraciones. Para esos documentos, la regla que dice que una entidad debe ser declarada es una restriccin de buena-formacin slo si se da lo siguiente: standalone='yes'.
98 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Restriccin de Validez: Entidad Declarada En los documentos con un subconjunto externo o entidades parmetro externas con la expresin "standalone='no'", el Name dado en la referencia a entidad debe ser igual al dado en una declaracin de entidad. Por interoperatividad, los documentos vlidos deberan declarar las entidades amp, lt, gt, apos, quot, de la manera especificada en la seccin "4.6 Entidades Predefinidas". La declaracin de una entidad parmetro debe preceder a cualquier referencia a ella. De manera similar, la declaracin de una entidad general debe preceder a cualquier referencia a ella que aparezca en la declaracin de los valores por defecto de una lista de atributos. Restriccin de Buena-Formacin: Entidad Analizada Una referencia a entidad no debe contener el nombre de una entidad no analizada. Las entidades no analizadas slo pueden ser referenciadas en valores de atributos declarados para ser del tipo ENTITY o ENTITIES. Restriccin de Buena-Formacin: No Recursin Una entidad analizada no debe contener una referencia recursiva a s misma, ni directa ni indirectamente. Buena-Formacin Restriccin: En DTD Las referencias a entidades parmetro slo pueden aparecer en la DTD. Ejemplos de referencias a caracteres y entidades: Pulse <tecla>menor</tecla> (<) para guardar las opciones. Este documento fue creado el &fechadoc; y su clasificacin &nivel-seguridad;. Ejemplos de referencias a entidades parmetro: <!-- declarar la entidad parmetro "ISOLat2"... --> <!ENTITY % ISOLat2 SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" > <!-- ... ahora hacerle referencia. --> %ISOLat2;
4.2 DECLARACIONES DE ENTIDAD Las entidades son declaradas de este modo: Declaracin de Entidades [70] EntityDecl ::= GEDecl | PEDecl [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>' [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>' [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) [74] PEDef ::= EntityValue | ExternalID El smbolo Name identifica la entidad en una referencia a entidad o, en el caso de una entidad no analizada, en el valor de los atributos ENTITY o ENTITIES. Si se declara la misma entidad ms de una vez, se le vincula la primera declaracin encontrada. Como opcin de usuario, los procesadores XML pueden indicar si las entidades pueden ser declaradas mltiples veces.
4.2.1 ENTIDADES INTERNAS Si la definicin de entidad es un EntityValue, la entidad definida se denomina entidad interna. No existe ningn objeto fsico de almacenamiento separado, y el contenido de la entidad se da en la declaracin. Algunos procesados de entidades y referencias a caracteres en el valor de la entidad literal pueden ser requeridos para producir el texto de reemplazo correcto: vase "4.5 Construccin de Texto de Reemplazo de Entidad Interna". Una entidad interna es una entidad analizada. Un ejemplo de una declaracin de entidad interna: <!ENTITY Estado-Pub "Esta es una pre-edicin de la Especificacin.">
99 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
4.2.2 ENTIDADES EXTERNAS Si la entidad no es interna, es una entidad externa, declarada como sigue: Declaracin de Entidad Externa [75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral [76] NDataDecl ::= S 'NDATA' S Name [ RV: Notacin Declarada ] Si NDataDecl est presente, sta es una entidad no analizada general, sino, es una entidad analizada. Restriccin de Validez: Notacin Declarada El Name debe ser igual al nombre declarado de una notacin. A SystemLiteral se le denomina identificador de sistema de la entidad. Es un URI que puede ser utilizado para obtener la entidad. El smbolo de 'sostenido' (#) y el identificador de fragmento frecuentemente utilizados con URIs no son, formalmente, parte del propio URI. Los procesadores XML podran sealar un error si es dado un identificador de fragmento como parte de un identificador de sistema. Si no se proporciona otra informacin fuera del mbito de esta especificacin (e.g. un tipo especial de elemento XML definido por una DTD particular, o una instruccin de procesamiento definida por la especificacin de una aplicacin particular), los URIs relativos son relativos a la localizacin del recurso dentro del que ocurre la declaracin de entidad. Un URI podra ser relativo a la entidad documento, a la entidad que contenga el subconjunto de DTD externa, o a alguna otra entidad parmetro externa. Los procesadores XML deberan manejar los caracteres no ASCII en un URI mediante la representacin del carcter en UTF-8 como uno o ms de bytes, y despus 'escapar' estos bytes con el 'mecanismo de escapado' de los URIs (e.g., convirtiendo cada byte a %HH, donde HH es la notacin hexadecimal del valor del byte). Adicionalmente al identificador de sistema, un identificador externo puede incluir un identificador pblico. Los procesadores XML que traten de obtener el contenido de la entidad pueden utilizar el identificador pblico para intentar generar un URI alternativo. Si el procesador no es capaz de hacer esto, debe utilizar el URI especificado en el literal de sistema. Antes de aceptar una igualdad, todas las cadenas de espacios en blanco del identificador pblico deben ser normalizadas a caracteres espacio nicos (#x20), y deben eliminarse los espacios en blanco del comienzo y del final. Un ejemplo de declaracin de entidad externa: <!ENTITY abrir-trampa SYSTEM "http://www.textuality.com/boilerplate/AbrirTrampa.xml"> <!ENTITY abrir-trampa PUBLIC "-//Textuality//TEXT Standard abrir-trampa boilerplate//EN" "http://www.textuality.com/boilerplate/AbrirTrampa.xml"> <!ENTITY img-trampa SYSTEM "../grafix/AbrirTrampa.gif" NDATA gif >
4.3 ENTIDADES ANALIZADAS 4.3.1 DECLARACIN DE TEXTO Las entidades analizadas externas pueden empezar, cada una de ellas, con una declaracin de texto. Declaracin de Texto [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' La declaracin de texto debe ser proporcionada literalmente, no por referencia a una entidad analizada. Ninguna declaracin de texto puede aparecer en cualquier posicin que no sea el comienzo de una entidad analizada externa.
4.3.2 ENTIDADES ANALIZADAS BIEN-FORMADAS
100 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
La entidad documento est bien-formada si cumple la produccin denominada document. Una entidad analizada general externa est bien-formada si cumple la produccin denominada extParsedEnt. Una entidad parmetro externa est bien- formada si cumple la produccin denominada extPE. Entidad Analizada Externa Bien-Formada [78] extParsedEnt ::= TextDecl? content [79] extPE ::= TextDecl? extSubsetDecl Una entidad analizada general interna est bien-formada si su texto de reemplazo cumple la produccin denominada content. Todas las entidades parmetro internas estn bien-formadas por definicin. Una consecuencia de la buena-formacin en entidades es que las estructuras lgica y fsica en los documentos XML estn anidadas apropiadamente. Ninguna etiqueta de comienzo, etiqueta de fin, etiqueta de elemento vaco, elemento, comentario, instruccin de procesamiento, referencia a carcter o referencia a entidad puede comenzar en una entidad y terminar en otra.
4.3.3 CODIFICACIN DE CARACTERES EN ENTIDADES Cada entidad analizada externa en un documento XML puede utilizar una codificacin diferente para sus caracteres. Todos los procesadores XML deben ser capaces de leer entidades tanto UTF-8 como en UTF-16. Las entidades codificadas en UTF-16 deben comenzar con la 'Byte Order Mark' descrita por la norma ISO/IEC 10646 Anexo E y Apndice B de Unicode (el carcter 'ZERO WIDTH NO-BREAK SPACE', #xFEFF). Esta es una seal de codificacin, no parte de la marcacin o de los datos carcter del documento XML. Los procesadores XML deben ser capaces de utilizar este carcter para diferenciar entre documentos codificados en UTF-8 o en UTF-16. Aunque slo se requiere que los procesadores XML lean entidades en las codificaciones UTF-8 y UTF-16, se reconoce que se utilizan otras codificaciones en el mundo, y puede ser deseable que un procesador XML pueda leer entidades que las utilicen. Las entidades analizadas que se almacenan en una codificacin que no sea UTF-8 o UTF-16 deben comenzar con una declaracin de texto que contenga una declaracin de codificacin: Declaracin de Codificacin [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'" ) [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* /* El nombre de la codificacin slo contiene caracteres latinos */ en la entidad documento, la declaracin de codificacin es parte de la declaracin XML. La regla EncName es el nombre de la codificacin utilizada. En las declaraciones de codificacin, los valores "UTF-8", "UTF-16", "ISO-10646-UCS-2" y "ISO-10646-UCS-4" deben ser utilizados para las diferentes codificaciones y transformaciones de Unicode / ISO/IEC 10646, los valores "ISO-8859-1", "ISO-8859-2", ... "ISO-8859-9" deben ser utilizados para las partes de la ISO 8859, y los valores "ISO-2022-JP", "Shift_JIS" y "EUC-JP" deben ser utilizados para las diferentes formas de codificacin de JIS X-0208-1997. Los procesadores XML deberan reconocer otras codificaciones, se recomienda que sean las codificaciones de caracteres registradas (como charsets) por la Internet Assigned Numbers Authority [IANA], otras codificaciones slo sern referenciadas mediante la utilizacin de sus nombres registrados. Estos nombres registrados estn definidos para no ser sensibles al tipo, por lo que los procesadores que quieran contemplarlos debern tratarlos de ese modo. En la ausencia de informacin proporcionada por un protocolo de transporte externo (e.g. HTTP o MIME), es un error que una entidad incluya una declaracin de codificacin para ser presentada al procesador XML en una codificacin diferente a la nombrada en la declaracin, que una declaracin de codificacin aparezca en un lugar que no sea el comienzo de una entidad externa, o que una entidad que no comience una 'Byte Order Mark' o una declaracin de codificacin utilice una codificacin que no sea UTF-8. Dado que ASCII es un subconjunto de UTF-8, no es estrictamente necesaria una declaracin de codificacin para las entidades ordinarias ASCII. Se produce un error fatal si un procesador XML encuentra una entidad con una codificacin que es incapaz de procesar. Ejemplos de declaraciones de codificacin: <?xml encoding='UTF-8'?> <?xml encoding='EUC-JP'?>
101 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
4.4 TRATAMIENTO DE ENTIDADES Y REFERENCIAS POR EL PROCESADOR XML La tabla de abajo resume el contexto en el que pueden aparecer las referencias a caracteres, las referencias a entidades y las invocaciones de entidades no analizadas y el comportamiento requerido de los procesadores XML en cada caso. Las etiquetas de la columna de la izquierda describen el contexto de reconocimiento: Referencia en Contenido como una referencia en cualquier lugar despus de la etiqueta de comienzo y antes de la etiqueta de fin de un elemento, corresponde al no-terminal content. Referencia en Valor de Atributo como una referencia dentro del valor de un atributo en una etiqueta de comienzo, o un valor por defecto en una declaracin de atributo; corresponde al no-terminal AttValue. Aparece como Valor de Atributo como un Name, no una referencia, apareciendo tanto como el valor de un atributo que haya sido declarado con tipo ENTITY, o como uno de los 'tokens' separados por espacios en el valor de un atributo que ha sido declarado con tipo ENTITIES. Referencia en Valor de Entidad como una referencia dentro del valor literal de una entidad parmetro o una entidad interna en la declaracin de la entidad; corresponde al no-terminal EntityValue. Referencia en DTD como una referencia dentro de los subconjuntos interno o externo de la DTD, pero fuera de EntityValue o de AttValue. Tipo Entidad
Parmetro Interna General Externa Analizada General No Analizada Carcter Referencia en Contenido No reconocida Incluida Incluida si validada Prohibida Incluida Referencia en Valor de Atributo No reconocida Incluida en literal Prohibida Prohibida Incluida Aparece como Valor de Atributo No reconocida Prohibida Prohibida Notificar No reconocida Referencia en EntityValue Incluida en literal Obviada Obviada Prohibida Incluida Referencia en DTD Incluida como PE Prohibida Prohibida Prohibida Prohibida 4.4.1 NO RECONOCIDAS Fuera de la DTD, el carcter % no tiene un significado especial; de este modo, lo que sera una referencia a una entidad parmetro en una DTD no es reconocido como marcacin en el contenido. De igual manera, los nombres de las entidades no analizadas no son reconocidos excepto cuando aparecen en el valor de un atributo declarado apropiadamente.
4.4.2 INCLUIDAS Una entidad es incluida cuando su texto de reemplazo es obtenido y procesado, en lugar de la propia referencia, como si fuese parte del documento en el lugar donde fue reconocida la referencia. El texto de reemplazo puede contener datos carcter y marcaciones (excepto para entidades parmetro), que deben ser reconocidos de la forma habitual, a no ser que el texto de reemplazo de las entidades utilizado para 'escapar' delimitadores de marcacin (las entidades amp, lt, gt, apos, quot) siempre se tratan como datos. (La cadena "AT&T;" se expande como "AT&T;" y el 'ampersand' restante no es reconocido como un delimitador de referencia-entidad). Una referencia a carcter es incluida cuando el carcter indicado es procesado en lugar de la referencia propiamente dicha.
4.4.3 INCLUIDAS SI VALIDADAS Cuando un procesador XML reconoce una referencia a una entidad analizada, en vez de validar el documento, el procesador debe incluir su texto de reemplazo. Si la entidad es externa y el procesador no intenta validar el documento
102 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
XML, el procesador puede, pero no necesita, incluir el texto de reemplazo de la entidad. Si un analizador no validador no incluye el texto de reemplazo, debe informar a la aplicacin que reconoci, pero que no ley, la entidad. Esta regla se basa en el reconocimiento que la inclusin automtica proporcionada por SGML y el mecanismo de entidad XML, principalmente diseada para soportar la modularidad en la creacin. No es necesariamente apropiada para otras aplicaciones, en particular para visualizacin de documentos. Los visualizadores, por ejemplo, cuando encuentran una referencia a entidad externa analizada, pueden elegir entre proporcionar una indicacin visual de la presencia de la entidad y obtenerla para su visualizacin bajo demanda.
4.4.4 PROHIBIDAS Los siguientes estn prohibidos y constituyen errores fatales: la apariencia de una referencia a una entidad no analizada. la apariencia de cualquier carcter o referencia a entidad general en la DTD excepto dentro de un EntityValue o de un AttValue. una referencia a una entidad externa en un valor de atributo.
4.4.5 INCLUIDAS EN LITERAL Cuando una referencia a entidad aparece en un valor de atributo, o una referencia a entidad parmetro aparece en un valor de entidad literal, su texto de reemplazo es procesado en lugar de la propia referencia, en la que parte documento donde es reconocida la referencia, excepto el carcter comilla simple o doble en el texto de reemplazo que siempre es tratado como un dato carcter normal y no terminar el literal. Por ejemplo, esto est bien-formado: <!ENTITY % SN '"S"' > <!ENTITY LoQueDijo "El dijo &SN;" > mientras que esto no lo est: <!ENTITY FinAtrib "27'" > <elemento atributo='a-&FinAtrib;>
4.4.6 NOTIFICAR Cuando el nombre de una entidad no analizada aparece como un 'token' en el valor de un atributo de los tipos declarados ENTITY o ENTITIES, un procesador validador debe informar a la aplicacin sobre los identificadores de sistema y pblicos (si hubiese alguno) para ambas entidades y su notacin asociada.
4.4.7 OBVIADAS Cuando aparece una referencia a entidad general en EntityValue en una declaracin de entidad, es obviado y dejado como est.
4.4.8 INCLUIDAS COMO PES Tal como ocurre con las entidades externas analizadas, las entidades parmetro slo necesitan ser incluidas si se valida. Cuando una referencia a entidad parmetro es reconocida en la DTD e incluida, su texto de reemplazo es alargado mediante la adicin de carcter de comienzo y un carcter espacio (#x20). La intencin es restringir el texto de reemplazo a entidades parmetro para contener un nmero integral de 'tokens' gramaticales en la DTD.
4.5 CONSTRUCCIN DE TEXTO DE REEMPLAZO DE ENTIDAD INTERNA
103 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
En la discusin del tratamiento de entidades internas, es til distinguir dos formas de valores de entidad. El valor de entidad literal es la cadena de caracteres entrecomillada actualmente presente en la declaracin de la entidad, correspondiente al no terminal EntityValue. El texto de reemplazo es el contenido de la entidad, despus del reemplazo de las referencias a caracteres y a entidades parmetro. El valor literal de la entidad como se da en una declaracin de entidad interna (EntityValue) puede contener caracteres, entidades parmetro y referencias a entidades generales. Dichas referencias deben ser contenidas completamente dentro del valor literal de la entidad. El texto de reemplazo actual que est incluido como se describe arriba debe contener el texto de reemplazo de cualesquiera entidades parmetro referenciadas, y debe contener el carcter referenciado, en lugar de cualquier referencia a carcter en el valor literal de la entidad. Sin embargo, las referencias a entidades generales deben ser dejadas como estn, sin expandir. Por ejemplo, dadas las siguientes declaraciones: <!ENTITY % editorial "Éditions Gallimard" > <!ENTITY derechos "Todos los derechos reservados" > <!ENTITY libro "La Peste: Albert Camus, © 1947 %editorial;. &derechos;" > luego el texto de reemplazo para la entidad "libro" es: La Peste: Albert Camus, 1947 ditions Gallimard. &derechos; La referencia a entidad general "&derechos;" sera expandida si la referencia "&libro;" apareciera en el contenido del documento o en el valor de un atributo. Estas simples reglas pueden crear complejas interacciones. Para una discusin detallada de un ejemplo difcil, vase "D. Expansin de Referencias a Entidades y Caracteres".
4.6 ENTIDADES PREDEFINIDAS Las referencias a entidades y a caracteres pueden ser utilizadas para 'escapar' el parntesis angular de apertura, el ampersand y otros delimitadores. Se especifica un conjunto de entidades generales para (amp, lt, gt, apos, quot) este propsito. Tambin se pueden utilizar referencias a caracteres numricos, que se expanden inmediatamente cuando son reconocidas y deben ser tratadas como datos carcter, por lo que las referencias a caracteres numricos "<" y "&" pueden ser utilizadas para 'escapar' < y & cuando aparecen en los datos carcter. Todos los procesadores XML deben reconocer estas entidades bien si son declaradas o no. Por interoperatividad, los documentos XML vlidos deberan declarar estas entidades, como cualesquiera otras, antes de utilizarlas. Si las entidades en cuestin son declaradas, deben ser declaradas como entidades internas cuyo texto de reemplazo sea nicamente el carcter 'escapado' o una referencia a carcter a dicho carcter en s, como se muestra abajo. <!ENTITY lt "&#60;"> <!ENTITY gt ">"> <!ENTITY amp "&#38;"> <!ENTITY apos "'"> <!ENTITY quot """> Los caracteres < y & en las declaraciones de "lt" y "amp" son 'escapados' doblemente para satisfacer los requerimientos de la buena-formacin de entidades de reemplazo.
4.7 DECLARACIONES DE NOTACIN Las notaciones identifican por su nombre el formato de las entidades no analizadas, el formato de los elementos que dependen de un atributo de notacin, o la aplicacin a la que instruccin de procesamiento est destinada. Las declaraciones de notacin proporcionan un nombre para la notacin, para ser utilizado en la entidad, en las declaraciones de listas de atributos y en las especificaciones de atributos, y un identificador externo para la notacin que pueda permitir que los procesadores XML o sus aplicaciones clientes localicen aplicaciones auxiliadora capaz de procesar datos en la notacin dada. Declaraciones de Notacin [82] NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S? '>'
104 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
[83] PublicID ::= 'PUBLIC' S PubidLiteral los procesadores XML deben proporcionar a las aplicaciones el nombre y el/los identificador/es externos de cualquier notacin declarada y referenciada en los valores de atributos, definiciones de atributos o declaraciones de entidades. Adicionalmente pueden convertir los identificadores externos en identificadores de sistema, nombres de archivos u otras informaciones necesarias para permitir a la aplicacin pedir al procesador los datos en la notacin descrita. (No es un error, sin embargo, que los documentos XML declaren y referencien a notaciones para las cuales no hay disponibles aplicaciones de notacin especfica en sistemas donde est ejecutndose el procesador XML o la aplicacin).
4.8 ENTIDAD DOCUMENTO La entidad documento sirve como raz del rbol de entidades y de punto de comienzo para los procesadores XML. Esta especificacin no especifica cmo localizar la entidad documento el procesador XML. A diferencia de otras entidades, la entidad documento no tiene nombre y puede aparecer en la corriente de entrada de un procesador sin ningn tipo de identificacin.
5. CONFORMANCIA 5.1 PROCESADORES VALIDADORES Y NO VALIDADORES Los procesadores XML conformantes son de dos clases: validadores y no validadores. Los procesadores validadores y los no validadores deben informar sobre las violaciones de las restricciones de buena- formacin de esta especificacin, en el contenido de la entidad documento y cualesquiera otras entidades analizadas que lean. Los procesadores validadores deben informar de las violaciones de las restricciones expresadas por las declaraciones en la DTD, y de fallos para completar las restricciones de validez dadas en esta especificacin. Para llevar a cabo esto, los procesadores XML validadores deben leer y procesar la DTD completa y todas entidades externas analizadas referenciadas en el documento. Los procesadores no validadores slo tienen que leer la entidad documento, incluyendo el subconjunto de DTD interno completo, para determinar la buena-formacin. Aunque no se requiera la comprobacin de la validez del documento, stos tienen que procesar todas las declaraciones que lean en el subconjunto de la DTD interna y en cualquier entidad parmetro que lean, a partir de la primera referencia a entidades parmetro que no lean, es decir, deben utilizar la informacin en esas declaraciones para normalizar los valores de atributos, incluir el texto de reemplazo de las entidades internas y proporcionar valores de atributos por defecto. No deben procesar declaraciones de entidades o declaraciones de listas de atributos encontradas despus de una referencia a una entidad parmetro que no es leda, dado que la entidad puede contener declaraciones anulantes.
5.2 UTILIZACIN DE PROCESADORES XML El comportamiento de los procesadores XML validadores es altamente predecible. Deben leer todos los trozos de documento e informar sobre todas las violaciones de buena-formacin y validez. Se requiere menos para un procesador no validador, no necesita leer ninguna parte del documento que no sea la entidad documento. Este genera dos efectos que pueden ser importantes para los usuarios de los procesadores XML: Ciertos errores de buena-formacin, especficamente esos en los que se requiere leer las entidades externas, no sern detectados por un procesador no validador. Los ejemplos incluyen las restricciones denominadas Entidad Declarada, Entidad Analizada y No Recursin, as como algunos de los casos descritos como prohibidos en "4.4 Tratamiento de Entidades y Referencias por el Procesador XML ". La informacin pasada del procesador a la aplicacin puede variar, dependiendo de si el procesador lee entidades parmetro y externas. Por ejemplo, un procesador no validador no puede normalizar valores de atributos, incluir el texto de reemplazo de las entidades internas, o proporcionar valores de atributos por defecto, donde hacerlo depende de si se han ledo las declaraciones en entidades externas o en entidades parmetro. Para una mxima fiabilidad en la interoperatividad entre los diferentes procesadores, las aplicaciones que utilicen procesadores no validadores deberan fiarse de los comportamientos no requeridos de esos procesadores. Las aplicaciones que requieran facilidades como el uso de atributos por defecto o entidades internas que sean declaradas en entidades externas deberan utilizar procesadores XML validadores.
105 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
6. NOTACIN La gramtica formal de XML se da en esta especificacin utilizando una notacin 'Backus-Naur Extendida' (EBNF) muy simple. cada regla de la gramtica define un smbolo, de la forma smbolo ::= expresin Los smbolos se escriben con una letra mayscula inicial si son definidos por una expresin regular o sino, con una letra minscula inicial. Las cadenas literales se entrecomillan. En la expresin de la parte derecha de una regla, las siguientes expresiones se utilizan para contener a cadenas de uno a ms caracteres: #xN donde N es un entero hexadecimal. Esta expresin se refiere a un carcter de la norma ISO/IEC 10646 cuyo valor cannico (UCS-4), se interpreta como un nmero binario sin signo, con el valor indicado. El nmero de ceros por la izquierda en la expresin #xN es insignificante. stos son gobernados por el correspondiente valor de la codificacin utilizada y no son significativos para XML. [a-zA-Z], [#xN-#xN] cualquier carcter con una valor en el(los) rango(s) indicado(s) (inclusive). [^a-z], [^#xN-#xN] cualquier carcter con un valor fuera del rango indicado. [^abc], [^#xN#xN#xN] cualquier carcter con una valor diferente a los caracteres dados. "cadena" una cadena literal exactamente igual a la contenida entre las comillas dobles. 'cadena' una cadena literal exactamente igual a la contenida entre las comillas simples. Estos smbolos pueden ser combinados para construir patrones ms complejos como sigue. Donde A y B representan expresiones simples: (expresin) la expresin es tratada como una unidad y puede ser combinada como se describe en esta lista. A? contiene una A o nada; A opcional. A B aparece una A seguida de una B. A | B contiene A o B pero no ambas. A - B cualquier cadena que contenga A pero que no contenga B. A+ una o ms apariciones de A. A* cero o ms apariciones de A. Otras notaciones utilizadas en las reglas de produccin son: /* ... */ comentario. [ rbf: ... ] restriccin de buena formacin: identifica una restriccin sobre la buena formacin de documentos asociados con una regla de produccin. [ rv: ... ] restriccin de validez: identifica una restriccin de validez sobre los documentos asociados con una regla de produccin.
APNDICES A. REFERENCIAS A.1 REFERENCIAS NORMATIVAS IANA (Internet Assigned Numbers Authority) Official Names for Character Sets, ed. Keld Simonsen et al. Vase ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets. IETF RFC 1766 IETF (Internet Engineering Task Force). RFC 1766: Tags for the Identification of Languages, ed. H. Alvestrand. 1995. ISO 639
106 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
(International Organization for Standardization). ISO 639:1988 (E). CODE for the representation of names of languages. [Geneva]: International Organization for Standardization, 1988. ISO 3166 (International Organization for Standardization). ISO 3166-1:1997 (E). Codes for the representation of names of countries and their subdivisions -- Part 1: Country codes [Geneva]: International Organization for Standardization, 1997. ISO/IEC 10646 ISO (International Organization for Standardization). ISO/IEC 10646-1993 (E). Information technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 1993 (plus amendments AM 1 through AM 7). Unicode The Unicode Consortium. The Unicode Standard, Version 2.0. Reading, Mass.: Addison-Wesley Developers Press, 1996.
A.2 OTRAS REFERENCIAS Aho/Ullman Aho, Alfred V., Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Reading: Addison-Wesley, 1986, rpt. corr. 1988. Berners-Lee et al. Berners-Lee, T., R. Fielding, and L. Masinter. Uniform Resource Identifiers (URI): Generic Syntax and Semantics. 1997. (En progreso; ver actualizaciones en RFC1738.) Brggemann-Klein Brggemann-Klein, Anne. Regular Expressions into Finite Automata. Extended abstract in I. Simon, Hrsg., LATIN 1992, S. 97-98. Springer-Verlag, Berlin 1992. Full Version in Theoretical Computer Science 120: 197-213, 1993. Brggemann-Klein and Wood Brggemann-Klein, Anne, and Derick Wood. Deterministic Regular Languages. Universitt Freiburg, Institut fr Informatik, Bericht 38, Oktober 1991. Clark James Clark. Comparison of SGML and XML. Ver http://www.w3.org/TR/NOTE-sgml-xml-971215. IETF RFC1738 IETF (Internet Engineering Task Force).RFC 1738: Uniform Resource Locators (URL), ed. T. Berners-Lee, L. Masinter, M. McCahill.1994. IETF RFC1808 IETF (Internet Engineering Task Force). RFC 1808: Relative Uniform Resource Locators, ed. R. Fielding. 1995. IETF RFC2141 IETF (Internet Engineering Task Force). RFC 2141: URN Syntax, ed. R. Moats. 1997. ISO 8879 ISO (International Organization for Standardization). ISO 8879:1986(E). Information processing -- Text and Office Systems -- Standard Generalized Markup Language (SGML). First edition -- 1986-10-15. [Geneva]: International Organization for Standardization, 1986. ISO/IEC 10744 ISO (International Organization for Standardization). ISO/IEC 10744-1992 (E). Information technology -- Hypermedia/Time-based Structuring Language (HyTime). [Geneva]: International Organization for Standardization, 1992. Extended Facilities Annexe. [Geneva]: International Organization for Standardization, 1996.
B. CLASES DE CARACTERES Siguiendo con las caractersticas definidas en el estndar Unicode, los caracteres se clasifican en caracteres base (estos contienen los caracteres alfabticos de alfabeto latino, sin smbolos diacrticos), caracteres ideogrficos y caracteres combinatorios (que contienen a la mayora de caracteres diacrticos). Estas clases se combinan para formar la clase de las letras (letters). Los dgitos y los 'extensores' tambin se distinguen. Caracteres [84] Letter ::= BaseChar | Ideographic [85] BaseChar ::= [#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8- #x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | [#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | [#x01FA-#x0217] | [#x0250- #x02A8] | [#x02BB-#x02C1] | #x0386 | [#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | [#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2- #x03F3] | [#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | [#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | [#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | [#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | [#x0641-#x064A] | [#x0671- #x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | [#x06D0-#x06D3] | #x06D5 | [#x06E5- #x06E6] | [#x0905-#x0939] | #x093D | [#x0958-#x0961] | [#x0985-#x098C] | [#x098F-
107 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
108 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Los caracteres que tengan fuentes o compatibilidades de descomposicin (p.e. los que tengan la "etiqueta de formato de compatibilidad" en el quinto campo de la base de datos -- indicado por el campo 5 que comienza con un "<") no estn permitidos. Los siguientes caracteres son tratados como caracteres de comienzo de nombre ms que como caracteres de nombre, porque el fichero de propiedades los clasifica como alfabticos: [#x02BB-#x02C1], #x0559, #x06E5, #x06E6. Los caracteres #x20DD-#x20E0 son excluidos (de acuerdo con Unicode, seccin 5.14). El carcter #x00B7 se clasifica como 'extensor', porque la as lo identifica la lista de propiedades. El carcter #x0387 se aade como un carcter de nombre, porque #x00B7 es su equivalente cannico. Los caracteres ':' y '_' estn permitidos como caracteres de comienzo de nombre. Los caracteres '-' y '.' estn permitidos como caracteres de nombre.
C. XML Y SGML (NO NORMATIVO) XML est diseado para ser un subconjunto de SGML, por lo tanto todo documento XML vlido tambin debe ser un documento SGML "conformado". Para una comparacin detallada de las restricciones adicionales que XML impone a los documentos SGML, ver [Clark].
D. EXPANSIN DE REFERENCIAS A ENTIDADES Y CARACTERES (NO NORMATIVO) Este apndice contiene algunos ejemplos que ilustran la secuencia de reconocimiento de referencias a entidades y caracteres y su expansin, como se especifica en la seccin "4.4 Tratamiento de Entidades y Referencias por el Procesador XML". Si la DTD contiene la declaracin <!ENTITY ejemplo "<p>Un ampersand (&#38;) puede ser "escapado" numricamente (&#38;#38;) o con una entidad general (&amp;).</p>" > entonces el procesador XML reconocer las referencias a caracteres cuando analice la declaracin de entidad, y las resolver antes de almacenar la siguiente cadena como el valor de la entidad "ejemplo": <p>Un ampersand (&) puede ser "escapado" numricamente (&#38;) o con una entidad general (&amp;).</p> Una referencia en el documento a "&ejemplo;" causar que se reanalice el texto, al tiempo que las etiquetas de comienzo y de fin del elemento "p" sern reconocidas y las tres referencias sern reconocidas y expandidas, resultando un elemento "p" con el siguiente contenido (todos los datos, sin delimitadores ni marcas): Un ampersand (&) puede ser "escapado" numricamente (&) o con una entidad general (&). Un ejemplo algo ms complejo puede ilustrar las reglas y sus todos sus efectos. En el siguiente ejemplo, los nmeros de lnea slo son una referencia. 1 <?xml version='1.0'?> 2 <!DOCTYPE prueba [ 3 <!ELEMENT prueba (#PCDATA) > 4 <!ENTITY % xx '%zz;'> 5 <!ENTITY % zz '<!ENTITY falso "error" >' > 6 %xx; 7 ]> 8 <prueba>Este ejemplo muestra un mtodo &falso;.</prueba>
109 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Esto produce lo siguiente: en la lnea 4, la referencia al carcter 37 se expande inmediatamente y la entidad parmetro "xx" se almacena en el tabla de smbolos con el valor "%zz;". Dado que el texto de reemplazo no es reledo, la referencia a la entidad parmetro "zz" no es reconocida. (y se producir un error si "zz" no estuviese declarado todava.) en la lnea 5, la referencia a carcter "<" se expande inmediatamente y la entidad parmetro "zz" se almacena con el texto de reemplazo "<!ENTITY falso "error" >", que es una declaracin de entidad bien- formada. en la lnea 6, la referencia a "xx" se reconoce, y se analiza el texto reemplazo de "xx" (llamado "%zz;"). La referencia a "zz" se reconoce en su turno, y se analiza el texto de reemplazo ("<!ENTITY falso "error" >"). La entidad general "falso" ha sido declara en este momento, con el texto de reemplazo "error". en la lnea 8, la referencia a la entidad general "falso" es reconocida, y se expande, por lo que el contenido completo del elemento "prueba" es la cadena autodescrita Este ejemplo muestra un mtodo error.
E. MODELOS DE CONTENIDO DETERMINISTAS (NO NORMATIVO) Por compatibilidad, se requiere que los modelos de contenido en las declaraciones de tipo de elemento sean determinsticas. SGML requiere modelos de contenido determinsticos (se denominan "no ambiguos"). Los procesadores XML construidos utilizando sistemas SGML pueden indicar modelos de contenido no determinsticos como errores. Por ejemplo, el modelo de contenido ((b, c) | (b, d)) no es determinstico porque dada una b inicial, el 'parser' no puede saber que b del modelo se est tomando sin "mirar adelante" para ver que elemento sigue a esa b. En este caso, las dos referencias a b pueden ser reducidas a una haciendo que el modelo lea (b, (c | d)). Una b inicial, ahora, slo se iguala a un nico modelo de contenido. El 'parser' no necesita "mirar adelante" para ver que sigue, si una c o una d, las dos se aceptarn. Ms formalmente: se puede construir un autmata de estados finitos partiendo del modelo de contenido, mediante la utilizacin de algoritmos estndares (p.e. el algoritmo 3.5 de la seccin 3.9 de Aho, Sethi y Ullman [Aho/Ullman]). En muchos otros algoritmos, se construye un conjunto para cada posicin de una expresin regular (p.e. cada nodo hoja en el rbol sintctico de una expresin regular). Si cualquier posicin tiene un conjunto en el cual ms de una posicin est etiquetada con el mismo nombre de tipo de elemento, el modelo de contenido es errneo y hay que informar de su existencia. Existen algoritmos que permiten reducir automticamente muchos, pero no todos los modelos de contenido no determinsticos a determinsticos. Ver Brggemann-Klein 1991 [Brggemann-Klein].
F. AUTODETECCIN DE LA CODIFICACIN (NO NORMATIVO) La declaracin de codificacin XML funciona como una etiqueta interna en cada entidad, indicando que codificacin de caracteres se est utilizando. Antes de que un procesador XML pueda leer la etiqueta interna, sin embargo, ste debe aparentemente, conocer que codificacin de caracteres se est utilizando - que es lo que est intentando indicar la etiqueta interna -. En XML esto se limita de dos maneras: se asume que cada implementacin debe soportar slo un conjunto finito de codificaciones de caracteres, y la declaracin de codificacin de XML est restringida en posicin y contenido, para hacerla ms sencilla para la autodeteccin de la codificacin que se est utilizando en cada entidad. Adems, en muchos casos, tambin estn disponibles adicionalmente otras fuentes de informacin, a parte de las cadenas de datos XML. Los dos casos pueden ser distinguidos, dependiendo de si la entidad XML est presente en el procesador sin, o con, alguna informacin externa. Siempre consideramos la primera opcin primero. Dado que cada entidad XML que no pertenezca a los formatos UTF-8 o UTF-16 debe comenzar con una declaracin de codificacin XML, donde los primeros caracteres deben ser '<?xml', cualquier 'procesador conformador' puede detectar, despus de dos a cuatro octetos de entrada, cual de los siguientes casos a aplicar. Al leer esta lista, puede ayudar el conocer que en UCS-4, '<' es "#x0000003C" y '?' es "#x0000003F", y el 'Byte Order Mark' requerido de las cadenas de datos UTF-16 es "#xFEFF". 00 00 00 3C: UCS-4, big-endian machine (1234 order) 3C 00 00 00: UCS-4, little-endian machine (4321 order) 00 00 3C 00: UCS-4, unusual octet order (2143)
110 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
00 3C 00 00: UCS-4, unusual octet order (3412) FE FF: UTF-16, big-endian FF FE: UTF-16, little-endian 00 3C 00 3F: UTF-16, big-endian, no Byte Order Mark 3C 00 3F 00: UTF-16, little-endian, no Byte Order Mark 3C 3F 78 6D: UTF-8, ISO 646, ASCII, alguna parte de ISO 8859, Shift-JIS, EUC, o cualquier otra codificacin en 7-bit, 8-bit hbrida, que asegure que los caracteres ASCII tienen su posicin, anchura y valores normales. La declaracin de codificacin actual debe ser leda para detectar cual de estas aplicar, pero dado que todas estas codificaciones utilizan los mismos patrones de bits para los caracteres ASCII, la declaracin de codificacin debe ser leda de manera exacta 4C 6F A7 94: EBCDIC (toda la declaracin de codificacin debe ser leda para indicar que pgina de cdigo se est utilizando) otra: UTF-8 sin una declaracin de codificacin, o la cadena de datos est corrupta, fragmentada o con errores Este nivel de autodeteccin es suficiente para leer la declaracin de codificacin XML y para analizar el identificador de codificacin de caracteres, que sigue siendo necesario para distinguir los miembros individuales de cada familia de codificaciones (p.e. para indicar desde UTF-8 a 8859, y las partes de 8859 entre ellas, o para distinguir la pgina del cdigo EBCDIC especifica en uso, etc). Dado que los contenidos de la declaracin de codificacin estn restringidos a caracteres ASCII, los procesadores pueden leer con exactitud toda la declaracin de codificacin tan pronto como hayan detectado que familia de codificaciones est en uso. En la prctica, todas las codificaciones ampliamente utilizadas entran en alguna de las categoras descritas arriba. La declaracin de codificacin XML permite un razonable aseguramiento del etiquetado de codificacin de caracteres, incluso cuando fuentes externas de informacin en el sistema operativo o el nivel de protocolo de transporte no lo aseguren. Una vez que el procesador ha detectado la codificacin en uso, puede actuar apropiadamente, bien invocando a una rutina de entrada externa para cada caso, o bien llamando a la funcin de conversin apropiada para cada carcter de entrada. Como cualquier sistema de 'auto-etiquetado', la declaracin de codificacin de XML no funcionar si cualquier software cambia el conjunto de caracteres o la codificacin de la entidad sin actualizar dicha declaracin. Los implementadores de rutinas de codificacin de caracteres deberan ser cuidadosos para asegurar exactitud de la informacin interna y externa utilizada para etiquetar la entidad. El segundo caso posible ocurre cuando la entidad XML est acompaada de informacin de codificacin, como en algunos sistemas de archivos y algunos protocolos de red. Cuando mltiples fuentes de informacin estn disponibles, su prioridad relativa y el mtodo preferido para el manejo de conflictos debe ser especificado como parte de un protocolo de mayor nivel utilizado para enviar XML. Las reglas para la prioridad relativa de la etiqueta interna y la etiqueta de tipo MIME en una cabecera externa, por ejemplo, deberan ser parte del documento RFC que definira los tipos MIME "text/xml" y "application/xml". Por razones de interoperatividad, sin embargo, se recomiendan las siguientes reglas. Si una entidad XML est en un archivo, la 'Byte-Order Mark' y la PI de declaracin de codificacin se utilizan (si estn presentes) para determinar la codificacin de los caracteres. El resto de heursticas y fuentes de informacin slo se utilizan para recuperacin de errores. Si una entidad XML se enva con un tipo MIME de "text/xml", el parmetro 'conjunto de caracteres (charset)' del tipo MIME determina el mtodo de codificacin de caracteres. El resto de heursticas y fuentes de informacin slo se utilizan para recuperacin de errores. Si una entidad XML se enva con un tipo MIME de "application/xml", la 'Byte-Order Mark' y la PI de declaracin de codificacin (si est presente) se utilizan para determinar la codificacin de los caracteres. El resto de heursticas y fuentes de informacin slo se utilizan para recuperacin de errores. Estas reglas se aplican slo en la ausencia de documentacin de nivel de protocolo, en particular, cuando los tipos MIME "text/xml" y "application/xml" son definidos. Las recomendaciones de los RFC relevantes invalidan estas reglas.
G. GRUPO DE TRABAJO XML DEL W3C (NO NORMATIVO)
111 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL Esta especificacin ha sido preparada y aprobada para su publicacin por el Grupo de Trabajo (GT) XML del W3C. La aprobacin de esta especificacin por parte del GT no implica necesariamente que todos los miembros del GT hayan votado su aprobacin. Los miembros actuales del GT XML son: Jon Bosak, Sun (Presidente); James Clark (Direccin Tcnica); Tim Bray, Textuality y Netscape (Co-editor XML); Jean Paoli, Microsoft (Co-editor XML); C. M. Sperberg-McQueen, U. of Illinois (Co-editor XML); Dan Connolly, W3C (Enlace con el W3C); Paula Angerstein, Texcel; Steve DeRose, INSO; Dave Hollander, HP; Eliot Kimber, ISOGEN; Eve Maler, ArborText; Tom Magliery, NCSA; Murray Maloney, Muzmo y Grif; Makoto Murata, Fuji Xerox Information Systems; Joel Nava, Adobe; Conleth O'Connell, Vignette; Peter Sharpe, SoftQuad; John Tigue, DataChannel
ANEXO 2: XML SCHEMA W3C Working Draft Mayo 1999 (ingls).
112 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL XML SCHEMA PART 2: DATATYPES World Wide Web Consortium Working Draft 06-May-1999
THI S VERSI ON http://www.w3.org/1999/05/06-xmlschema-2/ (with accompanying schema and DTD)
LATEST VERSI ON: http://www.w3.org/TR/xmlschema-2/
EDI TORS: Paul V. Biron (Kaiser Permanente, for Health Level Seven) <Paul.V.Biron@kp.org> Ashok Malhotra (IBM) <petsa@us.ibm.com> Copyright 1999 W3C (MIT, INRIA, Keio ), All Rights Reserved. W3C liability,trademark, document use and software licensing rules apply.
STATUS OF THI S DOCUMENT This is a W3C Working Draft for review by members of the W3C and other interested parties in the general public. It has been reviewed by the XML Schema Working Group and the Working Group has agreed to its publication. Note that not that all sections of the draft represent the current consensus of the WG. Different sections of the specification may well command different levels of consensus in the WG. Public comments on this draft will be instrumental in the WG's deliberations. Please review and send comments to www-xml-schema-comments@w3.org ( archive). The facilities described herein are in a preliminary state of design. The Working Group anticipates substantial changes, both in the mechanisms described herein, and in additional functions yet to be described. The present version should not be implemented except as a check on the design and to allow experimentation with alternative designs. The Schema WG will not allow early implementation to constrain its ability to make changes to this specification prior to final release. A list of current W3C working drafts can be found at http://www.w3.org/TR. They may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress". Ed. Note: Several "note types" are used throughout this draft: issue [Issue (issue-name): ] something on which the editors are seeking comment editorial note [Ed. Note: ] something the editors wish to call to the attention of the reader. To be removed prior to the recommendation becoming final. note [Note: ] something the editors wish to call to the attention of the reader. To remain in the final recommendation.
ABSTRACT This document specifies a language for defining datatypes to be used in XML Schemas and, possibly, elsewhere.
TABLE OF CONTENTS 1. Introduction 1.1 Purpose
113 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
1.2 Requirements 1.3 Scope 1.4 Terminology 1.5 Organization 2. Type System 2.1 Datatype 2.2 Value space 2.3 Lexical Space 2.4 Characterizing operations 2.4.1 Equal 2.5 Facets 2.5.1 Fundamental facets 2.5.2 Constraining or Non-fundamental facets 2.6 Datatype dichotomies 2.6.1 Atomic vs. aggregate datatypes 2.6.2 Primitive vs. generated datatypes 2.6.3 Built-in vs. user-generated datatypes 3. Built-in datatypes 3.1 Namespace considerations 3.2 Primitive datatypes 3.2.1 ID 3.2.2 IDREF 3.2.3 IDREFS 3.2.4 ENTITY 3.2.5 ENTITIES 3.2.6 NMTOKEN 3.2.7 NMTOKENS 3.2.8 NOTATION 3.2.9 string 3.2.10 boolean 3.2.11 number 3.2.12 dateTime 3.2.13 binary 3.2.14 uri 3.3 Generated datatypes 3.3.1 integer 3.3.2 decimal 3.3.3 real 3.3.4 date 3.3.5 time 3.3.6 timePeriod 4. User-generated datatypes 5. Conformance
APPENDI CES A. Schema for Datatype Definitions (normative) B. DTD for Datatype Definitions (normative) C. Built-in Generated Datatype Definitions (normative) D. Pictures E. Regular Expressions F. References G. Open Issues
1. I NTRODUCTI ON
1.1 PURPOSE The [XML] specification defines a limited array of facilities for applying datatypes to document content in that documents may contain or refer to DTDs that assign types to elements and attributes. However, document authors, including authors of traditional documents and those transporting data in XML, often require a high degree of type checking to ensure robustness in document understanding and data interchange. The table below offers two typical examples of XML instances in which datatypes are implicit: the instance on the left represents a billing invoice, the instance on the right a memo or perhaps an email message in XML. Data oriented Document oriented <invoice> <memo importance="high"
114 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
date="03/23/1999"> <from>Paul V. Biron</from> <to>Ashok Malhotra</to> <subject>Latest draft</subject> <body> We need to discuss the latest draft <emph>immediately</emph>. Either email me at <email> mailto:paul.v.biron@kp.org</email> or call <phone>555-9876</phone> </body> </memo>
The invoice contains several dates and telephone numbers, a state (which comes from an enumerated list of values), and a zip code (which has a definable regularity of expression). The memo contains many of the same types of information: a date, a telephone number, an email address and an "importance" value (which undoubtedly comes from an enumerated list, such as "low", "medium" or "high"). Applications which process invoices and memos need to raise exceptions if something that was supposed to be a date or a telephone number does not conform to the rules for valid dates or telephone numbers. In both cases, validity constraints exist on the content of the instances that are not expressible in XML DTDs. The limited datatyping facilities in XML have prevented validating XML processors from supplying the rigorous type checking required in these situations. The result has been that application writers have had to implement type checking in an ad hoc manner. This specification addresses the needs of both document authors and applications writers for a robust, extensible datatype system for XML which could be incorporated into XML processors. As discussed below, these datatypes can be used in other XML-related standards as well.
1.2 REQUI REMENTS The [XML Schema Requirements] document spells out concrete requirements to be fulfilled by this specification. This states that the XML Schema Language must: 1. provide for primitive data typing, including byte, date, integer, sequence, SQL & Java primitive data types, etc.; 2. define a type system that is adequate for import/export from database systems (e.g., relational, object, OLAP); 3. distinguish requirements relating to lexical data representation vs. those governing an underlying information set; 4. allow creation of user-defined datatypes, such as datatypes that are derived from existing datatypes and which may constrain certain of its properties (e.g., range, precision, length, mask).
1.3 SCOPE This portion of the XML Schema Language discusses datatypes that can be used in a XML Schema. These datatypes can be specified for element content that would be specified as #PCDATA and attribute values of various types in a DTD. It is the intension of this specification that it be usable outside of the context of XML Schemas for a wide range of other XML-related activities such as [XSL] and [RDF Schema]. For the most part, this specification discusses what are sometimes referred to as scalar datatypes in that they constrain the lexical representation of a single literal. In some cases, as for example in [IDREFS], [ENTITIES] and [NMTOKENS], the value may consist of a list or set of literals separated by spaces. This is an example of what is called an aggregate datatype. Future versions of this specification will contain a more general mechanism for defining and using aggregate (collection) datatypes such as sets, bags and records.
1.4 TERMI NOLOGY Ed. Note: if necessary, insert a terminology list (e.g., may, must, datatype valid, etc.)
115 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
1.5 ORGANI ZATI ON Following this introduction, the remainder of this specification is organized into three main sections: [Type System] describes the conceptual framework upon which the datatype system is constructed; [Built-in datatypes] details the complete list of datatypes which all conforming processors must implement; [User- generated datatypes] discusses how to define specialized types from the built-in types and [Conformance] specifies the general rules concerning conforming processors.
2. TYPE SYSTEM This section describes the conceptual framework behind the type system defined in this specification. The framework has been influenced by the [ISO 11404] standard on language-independent datatypes as well as the datatypes for [SQL] and for programming languages such as Java. The datatypes discussed in this specification are computer representations of well known abstract concepts such as integer and date. It is not the place of this specification to define these concepts. Many other publications provide excellent definitions. Two concepts are essential for an understanding of datatypes as they are discussed here: a value space is an abstract collection of permitted values for the datatype. Each datatype also has a space of valid lexical representations or literals. A single value in the value space may map to several valid literals.
2.1 DATATYPE [Definition: ] In this specification, a datatype has a set of distinct values, called its value space, and is characterized by facets and/or properties of those values and by operations on or resulting in those values. Further, each datatype is characterized by a space consisting of valid lexical representations for each value in the value space.
2.2 VALUE SPACE A value space is a abstract collection of permitted values for the datatype. Value spaces have certain properties. For example, they always have the concept of cardinality and equality and may have the concept of order by which individual values within the value space can be compared to one another. Value spaces may also support operations on values such as addition. [Definition: ] A value space is the collection of permitted values for a given datatype. The value space of a given datatype can be defined in one of the following ways: enumerated outright, sometimes referred to as an extensional definition defined axiomatically from fundamental notions, sometimes referred to as an intensional definition defined as the subset of values from an already defined value space with a given set of properties defined as a combination of values from some already defined value space by a specific construction procedure
2.3 LEXI CAL SPACE In addition to its value space, each datatype has a lexical representation space. [Definition: ] The lexical space for a datatype consists of a set of valid literals. Each value in the datatype's value space maps to one or more valid literals in its lexical space. For example, "100.0" and "1.0E2" are two different representations for the same value. Depending on the situation, either or both of these representations might be acceptable. The type system defined in this specification provides a mechanism for schema designers to control the value set as well as the acceptable lexical representations of the values in the value space of a datatype. Each [Primitive datatypes] definition includes a detailed description of the default lexical space.
2.4 CHARACTERI ZI NG OPERATI ONS
116 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Many different datatypes may share the same value space. As a result, a datatype is only partially defined by its value space. [Definition: ] The characterizing operations for a datatype are those operations (such as "add" or "append") on or resulting in values of the datatype which distinguish this datatype from other datatypes having value spaces which are identical except possibly for substitution of literals. Characterizing operations can be useful in choosing the appropriate datatype for particular purposes, such as mapping to or from common programming languages or database environments. Ed. Note: Currently, no characterizing operations are defined on the built-in datatypes provided by this specification; additionally, there is no means to specify characterizing operations on user-generated datatypes. This will be addressed in a future draft. This discussion of characterizing operations in the definition of datatype is for pedagogical purposes only and does not imply that conforming processors must implement those operations, nor does it imply that expressions (containing operators) which evaluate to a given datatype will be accepted by conforming XML processors.
2.4.1 EQUAL Every value space supports the notion of equality, with the following rules: for any two instances of values from the value space (a, b), either a is equal to b, denoted a = b, or a is not equal to b, denoted a b; there is no pair of instances (a, b) of values from the value space such that both a = b and a b; for every value a from the value space, a = a; for any two instances (a, b) of values from the value space, a = b if and only if b = a; for any three instances (a, b, c) of values from the value space, if a = b and b = c, then a = c. On every datatype, the operation Equal is defined in terms of the equality property of the value space: for any values a, b drawn from the value space, Equal(a,b) is true if a = b, and false otherwise.
2.5 FACETS [Definition: ] A facet is a single defining aspect of a concept or an object. Generally speaking, each facet of an item characterizes that item along independent aspects or dimensions. The facets of a datatype serve to distinguish those aspects of one datatype which differ from other datatypes. Rather than being defined solely in terms of a prose description the datatypes in this specification are defined in terms of the synthesis of facet values which together determine the value space and properties of the datatype. Facets are of two types: fundamental facets that define the datatype and non-fundamental or constraining facets that constrain the permitted values of a datatype.
2.5.1 FUNDAMENTAL FACETS Datatypes are characterized by properties of their value spaces. These optional properties are discussed in this section. Each of these properties give rise to a facet that serves to characterize the datatype.
2.5.1.1 ORDER [Definition: ] A value space, and hence a datatype, is said to be ordered if there exists an order relation defined for that value space. Order relations have the following rules: for every pair (a, b) from the value space, either a b or b a, or a = b; for every triple (a, b, c) from the value space, if a b and b c, then a c.
117 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
If a value space is ordered, then the datatype will have a corresponding [Characterizing operations], called InOrder(a, b), defined by: for every (a, b) from the value space, InOrder(a, b) is true if a b, and false otherwise. There may exist several possible order relations for a given value space. Additionally, there may exist multiple datatypes with the same value space. In such cases, each datatype will define a different order relation on the value space. Ed. Note: Currently, no order relations are defined on the built-in datatypes provided by this specification; additionally, there is no means to specify an order relation on user- generated datatypes. This will be addressed in a future draft.
2.5.1.2 BOUNDS Some ordered value spaces, and hence some datatypes, are said to be bounded. [Definition: ] A value space is bounded above if there exists a unique value U in the value space such that, for all values v in the value space, v U. The value U is said to be an upper bound of the value space. [Definition: ] A value space is bounded below if there exists a unique value L in the space such that, for all values v in the value space, L v. The value L is then said to be a lower bound of the value space. [Definition: ] A datatype is bounded if its value space has both an upper and a lower bound.
2.5.1.3 CARDI NALI TY [Definition: ] Every value space has associated with it the concept of cardinality. Some value spaces are finite, some are countably infinite while still others are uncountably infinite. A datatype is said to have the cardinality of its value space. It is sometimes useful to categorize value spaces ( and hence, datatypes) as to their cardinality. There are three significant cases: value spaces that are finite value spaces that are countably infinite and exact (see [Exact and Approximate]) value spaces that are countably infinite and approximate (see [Exact and Approximate]) Every conceptually finite value space is necessarily exact. No computational datatype is uncountably infinite. Ed. Note: Currently, cardinality is not specified for the built-in datatypes provided by this specification; additionally, there is no means to specify a cardinality on user-generated datatypes. This will be addressed in a future draft.
2.5.1.4 EXACT AND APPROXI MATE The computational model of a datatype may limit the degree to which values of the datatype can be distinguished. If every value in the value space of the conceptual datatype is distinguishable in the computational model from every other value in the value space, then the datatype is said to be exact. Certain mathematical datatypes having values which do not have finite representations are said to be approximate, in the following sense: Let M be the mathematical datatype and C be the corresponding computational datatype, and let P be the mapping from the value space of M to the value space of C. Then for every value v' in C, there is a corresponding value v in M and a real value h such that P(x) = v' for all X in M such that |v - x| < h. That is, v' is the approximation in C to all values in M which are "within distance h of value v". Furthermore, for at least one value v' in C, there is more than one value y in M such that P(y) = v' And thus C is not an exact model of M. In this specification, all approximate datatypes have computational models which specify, via parametric values, a degree of approximation, that is, they require a certain minimum set of values of the mathematical datatype to be distinguishable in the computational datatype.
118 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Ed. Note: Currently, exactness is not specified for the built-in datatypes provided by this specification; additionally, there is no means to specify a exactness for user-generated datatypes. This will be addressed in a future draft.
2.5.1.5 NUMERI C A datatype is said to be numeric if its values are conceptually quantities (in some mathematical number system). A datatype whose values do not have this property is said to be non-numeric.
2.5.2 CONSTRAI NI NG OR NON- FUNDAMENTAL FACETS Constraining facets are optional properties that can be applied to a datatype to (further) constrain its value space. Constraining the value space consequently constrains the allowed lexical representations. Adding constraining facets to a [Base type] is used to define [User-generated datatypes]. Ed. Note: should we consider units/dimensionality now? or wait for a further draft? Note that [timePeriod] implicitly has units.
2.5.2.1 LENGTH [Definition: ] For the [string] datatype, length specifies the maximum number of allowable characters in the string. For the [binary] datatype it specifies the maximum length in bytes. Ed. Note: We need to ultimately reconcile the notion of string length with the resolution of the i18n issues around character, indexing, etc.
2.5.2.2 MAXI MUM LENGTH [Definition: ] The maxlength facet indicates the maximum length, in bytes, of a [string] datatype for which the length facet is not specified.
2.5.2.3 LEXI CAL REPRESENTATI ON The datatypes defined in this specification are defined in terms of abstract value spaces and their properties as opposed to how values are lexically represented in XML instances. However, the lexical representation of values is of prime importance in many applications. Because of this importance, each [Primitive datatypes] definition includes a detailed description of its default [Lexical Space]. [Definition: ] The lexical representation facet can be used to constrain the allowable representations, or literals, for values of a datatype. The meaning of the lexical representation facet depends on the datatype to which it is applied. For example, for [string], values for the lexical representation facet are either [Pictures] or [Regular Expressions], while for [dateTime], values are derived from [ISO 8601] and [SQL].
2.5.2.4 ENUMERATI ON [Definition: ] Presence of an enumeration facet constrains the value space of the datatype to one of the specified list. The enumeration facet can be applied to any datatype. No order or any other relationship is implied between the elements of the enumeration list.
2.5.2.5 MAXI NCLUSI VE [Definition: ] The maxInclusive facet determines the upper bound of the value space for a datatype with the [Order] property. The maximum value specified with this facet is inclusive in the sense that the value specified for the facet is itself included in the value space for the datatype.
2.5.2.6 MAXEXCLUSI VE
119 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
[Definition: ] The maxExclusive facet determines the upper bound of the value space for a datatype with the [Order] property. The maximum value specified with this facet is exclusive in the sense that the value specified for the facet is itself excluded from the value space for the datatype.
2.5.2.7 MI NI NCLUSI VE [Definition: ] The minInclusive facet determines the lower bound of the value space for a datatype with the [Order] property. The minimum value specified with this facet is inclusive in the sense that the value specified for the facet is itself included in the value space for the datatype.
2.5.2.8 MI NEXCLUSI VE [Definition: ] The minExclusive facet determines the lower bound of the value space for a datatype with the [Order] property. The minimum value specified with this facet is exclusive in the sense that the value specified for the facet is itself excluded from the value space for the datatype.
2.6 DATATYPE DI CHOTOMI ES It is useful to categorize the datatypes defined in this specification along various dimensions, forming a set of characterization dichotomies.
2.6.1 ATOMI C VS. AGGREGATE DATATYPES The first distinction to be made is that between atomic and aggregate datatypes. [Definition: ] Atomic datatypes are those having values which are intrinsically indivisible. [Definition: ] Aggregate datatypes are those having values which can be decomposed into two or more component values. For example, a date that is represented as a single character string could be the value of an atomic date datatype; while another date represented as separate "month", "day" and "year" elements would be the value of an aggregate date datatype. Not surprisingly, the distinction is analogous to that between an XML element whose content model is #PCDATA and one with element content. As discussed above, this specification focuses mainly on atomic datatypes. Later versions will address aggregate datatypes in more detail. Note that the XML attribute types [IDREFS], [ENTITIES] and [NMTOKENS] can be thought of as aggregate (list) types. A datatype which is atomic in this specification need not be an "atomic" datatype in any programming language used to implement this specification.
2.6.2 PRI MI TI VE VS. GENERATED DATATYPES [Definition: ] Primitive datatypes are those that are not defined in terms of other datatypes; they exist ab initio. [Definition: ] Generated datatypes are those that are defined in terms of other datatypes. For example, a [number] is a well defined mathematical concept that cannot be defined in terms of other datatypes while a [date] is a special case of the more general datatype [dateTime]. The datatypes defined by this specification fall into both the primitive and the generated categories. It is felt that a judiciously chosen set of primitive datatypes will serve the widest possible audience by providing a set of convenient datatypes that can be used as is, as well as providing a rich enough base from which the variety of datatypes needed by schema designers can be generated. A datatype which is primitive in this specification need not be a "primitive" datatype in any programming language used to implement this specification.
120 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
2.6.2.1 BASE TYPE [Definition: ] Every generated datatype is defined in terms of an existing datatype, referred to as the base type. Base types may be either primitive or generated. In the example above, [date] is referred to as a subtype of the base type [dateTime]. The value space of a subtype is a subset of the value space of the base type.
2.6.3 BUI LT- I N VS. USER- GENERATED DATATYPES [Definition: ] Built-in datatypes are those which are entirely defined in this specification, and may be either primitive or generated; [Definition: ] User-generated datatypes are those generated datatypes whose base types are built- in datatypes or user-generated datatypes and are defined by individual schema designers by giving values to constraining facets. Conceptually there is no difference between the built-in generated datatypes included in this specification and the user-generated datatypes which will be created by individual schema designers. The built-in generated datatypes are those which are believed to be so common that if they were not defined in this specification many schema designers would end up reinventing them. Furthermore, including these generated datatypes in this specification serves to demonstrate the mechanics and utility of the datatype generation facilities of this specification. A datatype which is built-in in this specification need not be a "built-in" datatype in any programming language used to implement this specification.
3. BUI LT- I N DATATYPES Issue (nulls): A future revision of this specification will provide a general mechanism for specifying the difference between "null" and "not present" for all datatypes. Exactly what that mechanism will be is an open issue at this point.
3.1 NAMESPACE CONSI DERATI ONS The built-in datatypes defined by this specification are designed so that systems other than XML Schema may be able to use them. To facilitate such usage, the built-in datatypes in this specification come from the XML Datatype namespace, the namespace defined by this specification. This applies to both built-in primitive and built-in generated datatypes. NOTE: The exact URLs for the namespace(s) defined by this W3C specification is still an open issue. This issue has been raised with the XML Coordination Group (issue 1999-0201- 07 Standardizing W3C namespace URIs) for general coordination and resolution. Each user-generated datatype is also associated with a unique namespace. However, user-generated datatypes do not come from the XML Datatype namespace; rather, they come from the namespace of the schema in which they are defined. Note that associating a namespace with a user-generated datatype is not a general purpose extensibility mechanism and does not apply to primitive datatypes. Suppose a schema author wanted to introduce a new set of primitive datatypes, say a core set of mathematical datatypes not based on the Number datatype defined as a built-in primitive by this specification. Such a schema author might try to define those datatypes, associate a unique namespace with them and expect schema processors to understand them. Unfortunately, such a scenario would not work. Each such datatype would need specialized validation code and there are still many unresolved issues regarding standard mechanisms for sharing such code. As described in more detail in [User-generated datatypes], each user-generated datatype must be defined in terms of a base type included in this specification or a user-generated datatype by assigning facets which serve to constrain the value set of the user-generated datatype to a subset of the base type. Such a mechanism works because all schema processors are required to be able to validate datatypes defined by subsetting the value space of a datatype included in this specification.
121 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
3.2 PRI MI TI VE DATATYPES The primitive datatypes are described below. For each primitive datatype we discuss the fundamental facets, if any, and the constraining facets, if any.
3.2.1 I D This is the ID datatype from [XML]. It applies only to attribute values. ID has no fundamental or constraining facets. Validity Constraint: ID Values of type [ID] must match the Name production. A name must not appear more than once in an XML document as a value of this type; i.e., ID values must uniquely identify the elements which bear them. Ed. Note: There are several situations in which we need better reference mechanisms than those provided by ID and IDREF/IDREFS. For example, it would be desirable to extend IDs and IDREFs to be typed and scoped to better represent primary key/foreign key relationships in a database. XSL has recently introduced the concept of xsl:key and xsl:keyref whereby a single property of an element can be used as a key. We need such a mechanism for XML as a whole and it would be nice if this were extended to support multi- part keys.
3.2.2 I DREF This is the IDREF datatype from [XML]. It applies only to attribute values. IDREF has no fundamental or constraining facets. Validity Constraint: IDREF Values of type IDREF must match the Name production; each Name must match the value of an ID attribute on some element in the XML document; i.e. IDREF values must match the value of some ID attribute.
3.2.3 I DREFS This is the IDREFS datatype from [XML]. It applies only to attribute values. IDREFS has no fundamental or constraining facets. Validity Constraint: IDREFS Values of type IDREFS must match Names; each Name must match the value of an ID attribute on some element in the XML document; i.e. IDREF values must match the value of some ID attribute.
3.2.4 ENTI TY This is the ENTITY datatype from [XML]. It applies only to attribute values. ENTITY has no fundamental or constraining facets. Validity Constraint: Entity Name Values of type ENTITY must match the Name production; each Name must match the name of an unparsed entity declared in the schema.
3.2.5 ENTI TI ES This is the ENTITIES datatype from [XML]. It applies only to attribute values. ENTITIES has no fundamental or constraining facets. Validity Constraint: Entity Names
122 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Values of type ENTITIES must match the Names production; each Name must match the name of an unparsed entity declared in the schema.
3.2.6 NMTOKEN This is the NMTOKEN datatype from [XML]. It restricts the contents to a valid XML name. NMTOKEN applies only to attribute values and has no fundamental or constraining facets. Validity Constraint: Name Token Values of type NMTOKEN must match the Nmtoken production; values of type NMTOKENS must match Nmtokens. Issue (nmtoken-primitive-or-generated): should NMTOKEN be defined as a primitive (as above) or as a subtype of [string] with a regular expression facet such as "[a-zA-Z0- 9_-]+" (or whatever the regular expression actually should be to match the Nmtoken production)? A similar issue also applies to all of the XML attribute types, [ID], [IDREF], [IDREFS], [ENTITY], [ENTITIES] and [NOTATION].
3.2.7 NMTOKENS This is the NMTOKENS datatype from [XML]. It restricts the contents to a list of valid XML names. NMTOKENS applies only to attribute values and has no fundamental or constraining facets. Validity Constraint: Name Tokens Values of type NMTOKENS must match the Nmtokens production.
3.2.8 NOTATI ON This is the NOTATION datatype from [XML]. NOTATION has no fundamental or constraining facets. Validity Constraint: Notation Attributes Values of this type must match one of the notation names included in the declaration; all notation names in the declaration must be declared.
3.2.9 STRI NG [Definition: ] The string datatype represents character strings in XML. The value space of the string datatype is the set of finite sequences of UCS characters ([ISO 10646] and [Unicode]). A UCS character (or just character, for short) is an atomic unit of communication; it is not further specified except to note that every UCS character has a corresponding UCS code point, which is an integer.
3.2.9.1 LEXI CAL REPRESENTATI ON The string datatype has an optional constraining facet called [Lexical representation] The value of this facet is either a picture or a regular expression. Picture types are discussed in Appendix [Pictures] and regular expression constraints are discussed in Appendix [Regular Expressions]. If this facet is not present, there is no restriction on the lexical representation. Issue (picture-or-regex): Should the values of the [Lexical representation] facet be pictures, regexs, both or some other mechanism?
3.2.9.2 LENGTH The string datatype has an optional constraining facet called length. If length is specified we have a fixed length character string. If length is not specified we have a variable length character string.
123 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
3.2.9.3 MAXI MUM LENGTH The string datatype has an optional constraining facet called maxlength. If maxlength is specified for a variable length string it represents an upper bound of the length of the string. Both length and maxlength cannot be defined for the same datatype. The absolute maximum length of variable length character string depends on the XML parser implementation.
3.2.9.4 MAXI MUM AND MI NI MUM VALUES The string datatype also has the following constraining facets: maxInclusive maxExclusive minInclusive minExclusive Clearly, the effect of these constraining facets depends on the collating sequence used to define the order property for strings. Ed. Note: The issue of collating sequences for strings is complex. It will be discussed in detail in a subsequent version of this specification.
3.2.10 BOOLEAN [Definition: ] The boolean datatype has the value space required to support the mathematical concept of binary-valued logic: {true, false}. Issue (three-valued-logic): Do we need to add a third value "unknown" to the value space to support three-valued logic? SQL supports this. Will the general mechanism for "nulls" to be defined in a future revision handle this case?
3.2.10.1 LEXI CAL REPRESENTATI ON An instance of a datatype that is defined as boolean can have the following legal lexical values {0, 1, true, false, yes, no}. If a lexical representation facet is not present in the datatype definition then all these lexical values are allowed. A lexical representation facet can be added to the datatype definition to restrict the lexical values to a subset of the above.
3.2.11 NUMBER [Definition: ] The number datatype is the standard mathematical concept of number, including the integers, reals, rationals, etc. Number has the following constraining facets: maxInclusive maxExclusive minInclusive minExclusive Ed. Note: The motivation for the number datatype was to allow the user to specify a value that could take any legal lexical representation for a numeric quantity. This turns out to be problematic, however, due to the large number of extant representations some of which
124 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
cannot be distinguished without extra information. Having to define a lexical representation facet for number seems to defeat its purpose and, thus, the number datatype may be removed from this specification.
3.2.12 DATETI ME [Definition: ] The dateTime datatype represents a combination of date and time values as defined [SQL] and in [ISO 8601] encoded as a single string. An optional facet specifies the lexical representation. If this is not specified, all lexical representation formats conforming to [ISO 8601] Section 5 and [SQL] are acceptable. Issue (non-gregorian-dates): Both standards are limited to Gregorian dates. As an internalization issue, do we want support for non-gregorian dates? This issue also applies to [date], [time] and [timePeriod].
3.2.12.1 LEXI CAL REPRESENTATI ON If this facet is specified its value must correspond to a legal representation for combinations of dates and times as defined in [SQL] and sections 5.1 and 5.4 of [ISO 8601]. Issue (dateTime-lexical-representation): We need to spell out the various SQL and ISO 8601 representations (e.g., CCYYMMDD and CCYY-MM-DD, etc.) in detail here, or in a (non- normative) appendix. We may also want to support additional formats e.g. neither SQL or ISO 8601 seems to support the 12/25/1999 format for date. A lexical representation for dateTime as a collection of elements may also be desirable. This issue also applies to [date], [time] and [timePeriod].
3.2.13 BI NARY [Definition: ] The binary datatype represents strings (blobs) of binary data. It has two fundamental facets. The optional length facet specifies the length of the data. If the length is not specified the default is unlimited length. The optional "encoding" facet specifies the encoding which may be "hex" for hexadecimal digits or "base64" for MIME style Base64 data.
3.2.14 URI [Definition: ] The uri datatype represents a Universal Resource Identifier (URI) Reference as defined in [RFC 2396]. It has no fundamental or constraining facets. Issue (uri-scheme-facet): should we have a facet to allow a limitation to a specific scheme? It might be useful to able to say that something was not only a URI, but that it was a "mailto" and not a "http://...".
3.3 GENERATED DATATYPES This section gives conceptual definitions for all built-in generated datatypes defined by this specification, including a description of the facets which apply to each datatype. The concrete syntax used to define generated datatypes (whether built-in or user-generated) is given in section [User-generated datatypes] and the complete definitions of the built-in generated datatypes (written in that concrete syntax) are provided in Appendix [Built-in Generated Datatype Definitions (normative)].
3.3.1 I NTEGER [Definition: ] The integer datatype corresponds to the standard mathematical concept of integer numbers. The value space of the integer datatype is the infinite set {-,...,-2,-1,0,1,2,...,} although computer implementations restrict this to a finite set. The basetype of integer is [number]. Integer has the following constraining facets: maxInclusive
125 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
maxExclusive minInclusive minExclusive
3.3.1.1 LEXI CAL REPRESENTATI ON If this optional required facet is not specified, standard integer representations are acceptable. These consist of a string of digits with an optional sign or optional parentheses to indicate a negative number. Optional commas may appear after every three digits. For example: -1, 12678967543233, (100,000). This facet must be specified if other lexical representations are desired such as the European format that allows periods after every three digits.
3.3.2 DECI MAL [Definition: ] The decimal datatype restricts allowable values to numbers with an exact fractional part. The basetype of decimal is [number]. Decimal has the following required fundamental facets: precision: the total number of digits in the number. scale: the number of digits after the decimal point. Must be less than or equal to precision. Decimal has the following constraining facets: maxInclusive maxExclusive minInclusive minExclusive
3.3.2.1 LEXI CAL REPRESENTATI ON If this optional required facet is not specified, standard decimal representations are acceptable. These consist of a string of digits separated by a period as a decimal indicator, in accordance with the scale and precision facets, with an optional sign or optional parentheses to indicate a negative number. Optional commas may appear after every three digits. For example: -1.23, 12678967.543233, (100,000.00). This facet must be specified if other lexical representations are desired such as the European format that uses a comma instead of a period as the decimal indicator. 3.3.3 REAL [Definition: ] The real datatype is a computational approximation to the standard mathematical concept of real numbers. These are often called floating point numbers. The basetype of real is [number]. Real has the following constraining facets: maxInclusive maxExclusive minInclusive minExclusive
126 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
3.3.3.1 LEXI CAL REPRESENTATI ON Real values have a single standard lexical representation consisting of a mantissa followed by the character "E" followed by an exponent. The exponent must be an integer with optional sign without parentheses or commas. The mantissa must be a decimal number with optional sign without parentheses or commas. For example: -1E4, 1267.43233E12, 12.78E-2.
3.3.4 DATE [Definition: ] The date datatype represents a date value as defined in [ISO 8601] encoded as a single string. The basetype of date is [dateTime]. An optional fundamental facet specifies the lexical format. If this is not specified, all lexical representation formats conforming to [ISO 8601] Section 5.2 and [SQL] are acceptable. For example, 1985-04-12, 19850412. Issue (other-date-representations): Both ISO and SQL allow only the minus sign, "-", as separator? Do we want to allow other separators such as the solidus, "/" or colon, ":" ? We also need to discuss the aggregate representation for dates.
3.3.4.1 LEXI CAL REPRESENTATI ON This optional facet can be used to restrict the allowed lexical representations. Its value must correspond to a legal representation for dates as defined Section 5.2 of [ISO 8601] or [SQL].
3.3.5 TI ME [Definition: ] The time datatype represents a time value as defined in [ISO 8601] encoded as a single string. The basetype of date is [dateTime]. An optional fundamental facet specifies the lexical format. If this is not specified, all lexical representation formats conforming to [ISO 8601] Section 5.3 and [SQL] are acceptable. For example, 23:20:50, 232050.
3.3.5.1 LEXI CAL REPRESENTATI ON This optional facet can be used to restrict the allowed lexical representations. Its value must correspond to a legal representation for time as defined Section 5.3 of [ISO 8601] or [SQL]. 3.3.6 TI MEPERI OD [Definition: ] The timePeriod datatype represents a period of time as defined in [ISO 8601] encoded as a single string. The basetype of date is [dateTime]. A timePeriod is one of: a duration of time with a specific start and end. For example, 19990412T232050/19990415T021000, in [ISO 8601] syntax, where the start and end are separated by the solidus, "/", and the date and time by the letter "T". a duration of time without a specified start and end (e.g., 1 second, 3 months) This corresponds to the [SQL] datatype "interval". For example, 2001-01-05-12.00.00.0000 in SQL syntax. a duration of time with a specific start but not a specific end. For example,19990412T232050/P1Y3M15D12H30M in [ISO 8601] syntax. a duration of time with a specific end but not a specific start, For example, P1Y3M15D12H30M/19990415T021000 in [ISO 8601] syntax. The [ISO 8601] formats need to be extended to support: A minus sign immediately following the "P" to indicate negative periods. An optional fundamental facet specifies the lexical format. If this is not specified, all lexical representation formats conforming to [ISO 8601] Section 5.5 and [SQL] are acceptable.
3.3.6.1 LEXI CAL REPRESENTATI ON
127 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
If this facet is specified its value must correspond to a legal representation for time periods as defined in section 5.5 of [ISO 8601] or [SQL].
4. USER- GENERATED DATATYPES A user-generated datatype can be defined from a built-in datatype by adding optional constraining facets. For example, someone may want to define a datatype called heightInInches from the built-in datatype integer by supplying maxInclusive and minInclusive facets. In this case, heightInInches is the name of the new user- generated datatype, integer is its base type and maxInclusive and minInclusive are the constraining facets. <datatype name="heightInInches"> <basetype name="real" URI="http://www.w3.org/xmlschemas/datatypes" /> <minInclusive> 0.0 </minInclusive> <maxInclusive> 120.0 </maxInclusive> </datatype> Ed. Note: The abstract syntax proposed here (and the productions) are preliminary as they allow datatype definitions which are logically inconsistent (e.g., they allow numeric facets on non-numeric datatypes). This will be corrected in future drafts, as the XML Schema language comes to allow the specification of tighter constraints. Ed. Note: This section needs more explanatory text describing the productions and their relationship to the conceptual framework described in sections [Type System] and [Built- in datatypes]. Datatype definitions [1] datatypeDefn ::= NCName basetype facets* [ Constraint: Unique datatype definitions ] [2] basetype ::= datatypename [3] facets ::= ordered | unordered [ Constraint: Appropriate facets ] The following is the definition for a possible built-in generated datatype "currency". Such a datatype definition could appear in the schema which defines datatypes for XML Schemas and shows that a generated datatype can have the same value space as its basetype, which might mean that it is just an alias or renaming of the basetype. In this case, the specification would probably also define some "semantics" for currency which went beyond those of decimal. <datatype name="currency"> <basetype name="dt:decimal"/> </datatype> Constraint: Unique datatype definitions The name of the datatype being defined must be unique among the datatypes defined in the containing schema. Constraint: Appropriate facets If the value space of the basetype is ordered, then only ordered facets may appear in a datatype definition. Datatype names [4] datatypename ::= builtinname | usergenname [5] builtinname ::= ID | IDREF | IDREFS | NMTOKEN | NMTOKENS | ENTITY | ENTITIES | string | uri | binary | number | integer | real | decimal | dateTime | date | time | timePeriod
128 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
[6] usergenname ::= NCName schemaRef [ Constraint: Datatype name ] NOTE: The production labeled datatypename above is not to be confused with that labeled datatypeName in Section 3.3.1 of [Structural Schemas]. Constraint: Datatype name The name specified must be the name of a datatype defined in the schema in which the user-generated datatype is defined. Facets [7] ordered ::= bounds | numeric [8] unordered ::= lexicalRepresentation | enumeration | length | maxLength Ordered facets [9] bounds ::= (minInclusive | maxInclusive)? (minExclusive | maxExclusive)? [10] maxInclusive ::= literalValue [ Constraint: Literal type ] [11] minInclusive ::= literalValue [ Constraint: Literal type ] [12] minExclusive ::= literalValue [ Constraint: Literal type ] [13] maxExclusive ::= literalValue [ Constraint: Literal type ] Constraint: Literal type The literal value specified must be of the same type as the basetype in the datatype definition in which this facet appears. Numeric facets [14] numeric ::= precision | scale [15] precision ::= integerLiteral [16] scale ::= integerLiteral The following is the definition for a user-generated datatype which could be used to represent monetary amounts for use in a financial management application which does not allow figures above $1M and allows only whole cents. This definition would appear in a schema authored by an end-user (i.e., not in the schema for schemas) and shows how to define a datatype by specifying facet values which constrain the range of the basetype in a manner specific to the basetype. This is different than specifying max/min values as discussed before. This type could just as well have been defined with the potential built-in generated type "currency", defined above, as its basetype, <datatype name="amount"> <basetype name="decimal" URI="http://www.w3.org/xmlschemas/datatypes" /> <precision> 8 </precision> <scale> 2 </scale> </datatype> Unordered facets [17] length ::= integerLiteral [18] maxLength ::= integerLiteral [19] enumeration ::= literal+ [20] lexicalRepresentation ::= lexical+ [21] lexical ::= lexicalSpec [ Constraint: Lexical specification ]
129 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
Constraint: Lexical specification The lexical specification must be of the "correct" kind, i.e., a dateTime lexical representation for datatypes generated from [dateTime] etc. The following example is a definition for a user-generated datatype which limits the possible lexical representations of dates to the two main forms found in [ISO 8601] section 5.2.1.1. This datatype definition would appear in a schema authored by an end-user and shows how to define a datatype by restricting the lexical form of its literals. The example also shows how this datatype would be used in an element definition. <datatype name="myDate"> <basetype name="date" URI="http://www.w3.org/xmlschemas/datatypes" /> <lexicalRepresenation> <lexical> CCYYMMDD </lexical> <lexical> CCYY-MM-DD </lexical> </lexicalRepresenation> </datatype>
<elementType name="shippingDate"> <datatypeRef name="myDate"> </elementType> Given the definitions above, the following might occur in an instance document. ... <shippingDate>19990510</shippingDate> ... <shippingDate>1999-05-10</shippingDate> Both of the above shipping dates refer to "abstract" date of May 10, 1999 The following example is a datatype definition for a user-generated datatype which limits the possible literal values of dates to the four US holidays enumerated. This datatype definition would appear in a schema authored by an end-user and shows how to define a datatype by enumerating the values in its value space. The enumerated values must be type-valid literals for the basetype. <datatype name="holidays"> <basetype name="date" URI="http://www.w3.org/xmlschemas/datatypes" /> <enumeration> <literal> -0101 <!-- New Year's day --> </literal> <literal> -0704 <!-- 4th of july --> </literal> <literal> -1125 <!-- Thanksgiving --> </literal> <literal> -1225 <!-- Christmas --> </literal> </enumeration> </datatype> Literals [22] literal ::= literalValue [23] literalValue ::= stringLiteral | numericLiteral | dateTimeLiteral | uriLiteral [24] stringLiteral ::= (see [string]) [25] numericLiteral ::= integerLiteral | realLiteral | decimalLiteral [26] integerLiteral ::= (see [integer]) [27] realLiteral ::= see [real] [28] decimalLiteral ::= see [decimal]
130 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL [29] dateTimeLiteral ::= (see [dateTime]) [30] uriLiteral ::= (see [uri]) Issue (definition-overriding): should it be possible to specify a value for a non- fundamental facet on an element or attribute of a given datatype in an instance document or in an element or attribute definition in a schema (see Section 3.4.4 of [Structural Schemas])? If so, what syntax should be used? This needs to be coordinated with the structural schema editorial team. 5. CONFORMANCE The XML specification [XML] defines two levels of conformance. Well-formed documents conform to valid XML syntax but may or may not obey the constraints defined by a DTD. Valid XML documents conform to the structure laid down in a DTD. Thus, if a DTD defines an attribute as an ID, instances of XML documents conforming to the DTD can only be valid if the values of such attributes are valid XML names and are unique in the document. By introducing additional datatypes to XML, this specification extends the notion of validity in the sense that values defined to have a certain datatype in the schema must conform to the lexical representations allowed for that datatype. It also needs to be said that that is all that is expected of an XML processor. There are no expressions on datatypes. Neither are there operations on datatypes. In some cases, datatypes will not be specified in the schema but will be specified in XML documents. In other cases, datatypes in the documents will be specialized versions of datatypes specified for the same component in the schema. Validating XML processors should be able to validate the format of values in XML documents in these cases as well.
APPENDICES
A. SCHEMA FOR DATATYPE DEFI NI TI ONS ( NORMATI VE)
<?xml version='1.0'?> <!DOCTYPE schema PUBLIC '-//W3C//DTD XSDL 19990506//EN' 'http://www.w3.org/1999/05/06-xsdl/WD-xsdl.dtd'>
C. BUILT-IN GENERATED DATATYPE DEFINITIONS (NORMATIVE) This section gives the datatype definitions for all built-in generated datatypes. These definitions are to appear in the "schema for schemas" and not in schema instances written by end-users. Ed. Note: this section needs to be expanded to include all built-in generated datatypes defined in [Generated datatypes] <datatype name="date"> <basetype name="dateTime" URI="http://www.w3.org/xmlschemas/datatypes" /> <lexicalRepresentation> <!--ISO 8601 section 5.2.1.1 and SQL--> <lexical> CCYYMMDD <!-- 19850412 ==> April 12, 1985--> </lexical> <lexical> CCYY-MM-DD<!-- 1985-04-12 ==> April 12, 1985--> </lexical> <!--ISO 8601 section 5.2.1.2--> <lexical> CCYY-MM <!-- 1985-04 ==> April, 1985--> </lexical> <lexical> CCYY <!-- 1985 ==> 1985--> </lexical>
133 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
<lexical> CC <!-- 19 ==> the 1900's--> </lexical> <!--ISO 8601 section 5.2.1.3--> <lexical> YYMMDD <!-- 850412 ==> April 12, '85 (in the current century)--> </lexical> <lexical> YY-MM-DD <!-- 85-04-12 ==> April 12, '85 (in the current century)--> </lexical> <lexical> -YYMM <!-- -8504 ==> April, '85 (in the current century)--> </lexical> <lexical> -YY-MM <!-- -85-04 ==> April, '85 (in the current century)--> </lexical> <lexical> -YY <!-- -85 ==> '85 (in the current century)--> </lexical> <lexical> --MMDD <!-- --0412 ==> April 12--> </lexical> <lexical> --MM-DD <!-- --04-12 ==> April 12--> </lexical> <lexical> --MM <!-- --04 ==> April--> </lexical> <lexical> ---DD <!-- ---12 ==> the 12th--> </lexical> <!--ISO 8601 section 5.2.2.1--> <lexical> CCYYDDD <!-- 1985102 ==> April 12, 1985 (i.e., the 102nd day of 1985)--> </lexical> <lexical> CCYY-DDD <!-- 1985-102 ==> April 12, 1985 (i.e., the 102nd day of 1985)--> </lexical> <!--ISO 8601 section 5.2.2.2--> <lexical> YYDDD <!-- 85102 ==> April 12, '85 (in the current century) (i.e., the 102nd day of '85)--> </lexical> <lexical> YY-DDD <!-- 85-102 ==> April 12, '85 (in the current century) (i.e., the 102nd day of '85)--> </lexical> <lexical> -DDD <!-- -102 ==> April 12 (i.e., the 102nd day of the year)--> </lexical> <!--ISO 8601 section 5.2.3.1--> <lexical> CCYYWwwD <!-- 1985W155 ==> April 12, 1985 (i.e., the 5th day of the 15th week of 1985)--> </lexical> <lexical> CCYY-Www-D<!-- 1985-W15-5 ==> April 12, 1985 (i.e., the 5th day of the 15th week of 1985)--> </lexical> <!--ISO 8601 section 5.2.3.2--> <lexical> CCYYWww <!-- 1985W15 ==> the 15th week of 1985--> </lexical> <lexical> CCYY-Www <!-- 1985-W15 ==> the 15th week of 1985--> </lexical> <!--ISO 8601 section 5.2.3.3--> <lexical> YYWwwD <!-- 85W155 ==> April 12, '85 (in the current century) (i.e., the 5th day of the 15th week of '85)--> </lexical> <lexical> YY-Www-D <!-- 85-W15-5 ==> April 12, '85 (in the current century) (i.e., the 5th day of the 15th week of '85)-->
134 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
</lexical> <lexical> YYWww <!-- 85W15 ==> the 15th week in the current century--> </lexical> <lexical> YY-Www <!-- 85-W15 ==> the 15th week in the current century--> </lexical> <lexical> -YWwwD <!-- -5W155 ==> April 12, ''5 (in the current decade)--> </lexical> <lexical> -Y-Www-D <!-- -5W15-5 ==> April 12, ''5 (in the current decade)--> </lexical> <lexical> -WwwD <!-- -W155 ==> April 12 (in the current year)--> </lexical> <lexical> -Www-D <!-- -W15-5 ==> April 12 (in the current year)--> </lexical> <lexical> -Www <!-- -W15 ==> 15th week in the current year--> </lexical> <lexical> -W-D <!-- -W-5 ==> Friday (of the current week) (i.e., the 5th day)--> </lexical> <lexical> ---D <!-- ---5 ==> Friday (of any week in any year)--> </lexical> </lexicalRepresentation> </datatype>
D. PICTURES "Pictures", similar to those in [COBOL] picture clauses, can be used to constrain the format of strings and in some cases control their conversion to numbers. A picture is an alphanumeric string consisting of character symbols. Each symbol, which is usually one character but may be two characters, is a placeholder that stands for a set of characters. For example, the picture "A" stands for a single alphabetic character. The following is a list of picture symbols and their meanings. A A single alphabetic character. B A single blank character. E The character E, used to indicate floating point numbers. S The leftmost character of a picture indicating a signed number. The characters "+" or "-" may appear in the S position. V An implied decimal sign. The input 1234 validated by a picture 99V99 is converted into 12.34. X Any character. Z The leftmost leading numeric character that can be replaced by a space character when the content of that content position is a zero. 9 Any numeric character. 1 Any boolean character (0 or 1). 0,/,-,., and , represent themselves. cs A placeholder for an appropriate currency symbol. Here are some examples of picture constraints $123,45.90 satisfies picture $999,99.99 $123,45.90 satisfies picture XXXX,XX.XX
135 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
E. REGULAR EXPRESSIONS Ed. Note: The following description of regular expressions is copied (with slight modification) by permission from the documentation of the [Perl] programming language. Issue (perl-regex): Should the final recommendation use Perl's regular expression "extensions"? [Definition: ] Regular expressions, similar to those in [Perl], can be used to constrain the format of strings. A regular expression is an alphanumeric string consisting of character symbols. Each symbol, which is usually one character but may be two characters, is a placeholder that stands for a set of characters. Any single character matches itself, unless it is a metacharacter with a special meaning described here or above. You can cause characters that normally function as metacharacters to be interpreted literally by prefixing them with a "\" (e.g., "\." matches a ".", not any character; "\\" matches a "\"). A series of characters matches that series of characters in the target string, so the pattern blurfl would match "blurfl" in the target string. You can specify a character class, by enclosing a list of characters in [], which will match any one character from the list. If the first character after the "[" is "^", the class matches any character not in the list. Within a list, the "-" character is used to specify a range, so that a-z represents all characters between "a" and "z", inclusive. If you want "-" itself to be a member of a class, put it at the start or end of the list, or escape it with a backslash. (The following all specify the same class of three characters: [-az], [az-], and [a\-z]. All are different from [a-z], which specifies a class containing twenty-six characters.) Certain characters as used as metacharacters. The following list contains all of the metacharacters and their meanings. \ Quote the next metacharacter ^ Match the beginning of the line . Match any character (except newline) $ Match the end of the line (or before newline at the end) | Alternation () Grouping [] Character class Within a regular expression, the following standard quantifiers are recognized: * Match 0 or more times + Match 1 or more times ? Match 1 or 0 times {n} Match exactly n times {n,} Match at least n times {n,m} Match at least n but not more than m times The following character sequences also have special meaning within a regular expression. \t tab \n newline \r return
136 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
\033 octal char 003 \x1B hex char 1B \w Match a "word" character (alphanumeric plus "_") \W Match a non-word character \s Match a whitespace character \S Match a non-whitespace character \d Match a digit character \D Match a non-digit character Ed. Note: we should probably define XML-specific character sequences for things like Nmtoken, Name, etc., as well as ones for the character classes listed in XML 1.0 Appendix B. Character Classes Regular expressions may also contain the following zero-width assertions: \b Match a word boundary \B Match a non-(word boundary) A word boundary (\b) is defined as a spot between two characters that has a \w on one side of it and a \W on the other side of it (in either order), counting the imaginary characters off the beginning and end of the string as matching a \W. 555-1212 is matched by \d{3}-\d{4} (phone number) 888-555-1212 is matched by (\d{3}-)?\d{3}-\d{4} (phone number with optional area code) $123,45.90 is matched by \$\d{3},\d{2}\.\d{2} 123-45-5678 is matched by \d{3}-?\d{2}-?\d{4} (Social Security Number)
F. REFERENCES
COBOL COBOL Standard. See http://www.dkuug.dk/jtc1/sc22/wg4/ ISO 10646 ISO (International Organization for Standardization). ISO/IEC 10646-1993 (E). Information technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 1993 (plus amendments AM 1 through AM 7). ISO 11404 Language-independent Datatypes. Available from http://web.ansi.org/public/catalog/cat_top.html ISO 8601 Representations of dates and times. See http://www.iso.ch/markete/8601.pdf Available from http://www.w3.org/TR/1998/WD-xsl-19981216 Namespaces in XML Namespaces in XML, Tim Bray et al. W3C, 1998 Available at: http://www.w3.org/TR/REC-xml-names Perl The Perl Programming Language. See http://www.perl.org RDF Schema RDF Schema Specification. See http://www.w3.org/TR/PR-rdf-schema RFC 2396 Tim Berners-Lee, et. al. RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax.. 1998 Available at: http://www.ietf.org/rfc/rfc2396.txt SQL SQL Standard. See http://www.jcc.com/SQLPages/jccs_sql.htm Structural Schemas XML Schema Part 1: Structures. Available at: http://www.w3.org/XML/Group/1999/05/06-xmlschema-1/ Unicode
137 de 137 16 de enero de 2001 www.coverlink.com Manual de XML/XSL
The Unicode Consortium. The Unicode Standard, Version 2.0. Reading, Mass.: Addison-Wesley Developers Press, 1996. XML XML Standard. See http://www.w3.org/TR/REC-xml XML Schema Requirements XML Schema Requirements. Available at: http://www.w3.org/TR/NOTE-xml-schema-req XSL XSL Working Draft. See http://www.w3.org/TR/1998/WD-xsl-19981216