Ir al contenido

Diferencia entre revisiones de «Validación XML»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
3nx (discusión · contribs.)
Sin resumen de edición
 
(No se muestran 62 ediciones intermedias de 39 usuarios)
Línea 1: Línea 1:
La '''Validación XML''' ''(eXtensible Markup Language)'' es la comprobación de que un documento en lenguaje [[XML]] está bien formado y se ajusta a una estructura definida. Un documento bien formado sigue las reglas básicas de XML establecidas para el diseño de documentos. Un documento válido además respeta las normas dictadas por su [[DTD]] o esquema utilizado.
La '''Validación XML''' ''(eXtensible Markup Language)'' es la comprobación de que un documento en lenguaje [[XML]] está bien formado y se ajusta a una estructura definida. Un documento bien formado sigue las reglas básicas de XML establecidas para el diseño de documentos. Un documento válido además respeta las normas dictadas por su [[DTD]] (definición de tipo de documento) o esquema utilizado.


=Introducción=
== Introducción ==


En primer lugar, los documentos XML deben basarse en la sintaxis definida en la especificación XML para ser correctos ([[#Documento Bien Formado|documentos bien formados]]). Esta sintaxis impone cosas como la coincidencia de mayúsculas/minúsculas en los nombres de etiqueta, comillas obligatorias para los valores de atributo, etc. Sin embargo, para tener un control más preciso sobre el contenido de los documentos es necesario un proceso de análisis más exhaustivo.
En primer lugar, los documentos XML deben basarse en la sintaxis definida en la especificación XML para ser correctos ([[#Documento Bien Formado|documentos bien formados]]). Esta sintaxis impone cosas como la coincidencia de mayúsculas/minúsculas en los nombres de etiqueta, comillas obligatorias para los valores de atributo, etc. Sin embargo, para tener un control más preciso sobre el contenido de los documentos es necesario un proceso de análisis más exhaustivo.

La validación es la parte más importante dentro de este análisis, ya que determina si un documento creado se ciñe a las restricciones descritas en el esquema utilizado para su construcción. Controlar el diseño de documentos a través de esquemas aumenta su grado de fiabilidad, consistencia y precisión, facilitando su intercambio entre aplicaciones y usuarios. Cuando creamos documentos XML [[#Documento Válido|válidos]] aumentamos su funcionalidad y utilidad.
La validación es la parte más importante dentro de este análisis, ya que determina si un documento creado se ciñe a las restricciones descritas en el esquema utilizado para su construcción. Controlar el diseño de documentos a través de esquemas aumenta su grado de fiabilidad, consistencia y precisión, facilitando su intercambio entre aplicaciones y usuarios. Cuando creamos documentos XML [[#Documento Válido|válidos]] aumentamos su funcionalidad y utilidad.


== Necesidad de validación ==

=Necesidad de validación=


La validación se encarga de verificar:
La validación se encarga de verificar:
* '''La corrección de los datos:''' aunque validar contra un esquema no garantiza al 100% que los datos son correctos, nos permite detectar formatos nulos o valores fuera de rango y por tanto incorrectos.
:* '''La corrección de los datos:''' aunque validar contra un esquema no garantiza al 100% que los datos son correctos, nos permite detectar formatos nulos o valores fuera de rango y por tanto incorrectos.
* '''La integridad de los datos:''' al validar, se comprueba que toda la información obligatoria está presente en el documento.
:* '''La integridad de los datos:''' al validar, se comprueba que toda la información obligatoria está presente en el documento.
* '''El entendimiento compartido de los datos:''' a través de la validación se comprueba que el emisor y receptor perciban el documento de la misma manera, que lo interpreten igual.
:* '''El entendimiento compartido de los datos:''' a través de la validación se comprueba que el emisor y receptor perciban el documento de la misma manera, que lo interpreten igual.
El éxito de la validación dependerá de factores como:
El éxito de la validación dependerá de factores como:
* '''Dónde se originan''' los documentos: si son fuentes confiables o no.
:* '''Dónde se originan''' los documentos: si son fuentes confiables o no.
* '''Quién los crea''': si son creados por una aplicación automáticamente o por un usuario de forma manual. (veáse [[#Herramientas|Herramientas]])
:* '''Quién los crea''': si son creados por una aplicación automáticamente o por un usuario de forma manual. (véase [[#Herramientas|Herramientas]])
* '''Quién los manipula''': también es posible introducir errores involuntariamente durante la manipulación de los datos y documentos.
:* '''Quién los manipula''': también es posible introducir errores involuntariamente durante la manipulación de los datos y documentos.
* '''La calidad de los datos''': si los documentos se generan directamente de una base de datos de herencia, pueden no estar completos o correctos al 100%.
:* '''La calidad de los datos''': si los documentos se generan directamente de una base de datos de herencia, pueden no estar completos o correctos al 100%.
* '''El rendimiento''' del procesador o aparato que realice la validación: el procesado no es inmediato, necesita su tiempo. Si el rendimiento es crítico, se pueden aplicar diversas alternativas para reducir el coste computacional como limitar la validación a algunos aspectos, o crear un código específico para la aplicación particular que lo utiliza y se ejecute de forma más eficaz. (veáse [[#Procesamiento|Procesamiento]])
:* '''El rendimiento''' del procesador o aparato que realice la validación: el procesado no es inmediato, necesita su tiempo. Si el rendimiento es crítico, se pueden aplicar diversas alternativas para reducir el coste computacional como limitar la validación a algunos aspectos, o crear un código específico para la aplicación particular que lo utiliza y se ejecute de forma más eficaz. (véase [[#Procesamiento|Procesamiento]])


=Tipos de documentos=
== Tipos de documentos ==


===Documento Bien Formado===
=== Documento Bien Formado ===


El lenguaje estándar XML especifica una normas básicas a nivel de sintaxis, a cumplir por todos aquellos documentos con intención de denominarse XML. Las características básicas exigidas son:
Especifica unas normas básicas a nivel de sintaxis, a cumplir por todos aquellos documentos con intención de denominarse XML. Las características básicas exigidas son:
* Incluir una '''declaración XML''' como etiqueta obligatoria: proporciona hasta tres informaciones clave sobre el documento que la contiene:
:* Incluir una '''declaración XML''' como etiqueta obligatoria: proporciona hasta tres informaciones clave sobre el documento que la contiene:
# Información de la versión XML (obligatoria): la versión más utilizada es 1.0, aunque ya está disponible la versión 1.1 de XML.
::# Información de la versión XML (obligatoria): la versión más utilizada es 1.0, aunque ya está disponible la versión 1.1 de XML.
# Codificación de caracteres utilizada (opcional): hace referencia al modo en que se representan internamente los caracteres, normalmente UTF-8 o UTF-16.
::# Codificación de caracteres utilizada (opcional): hace referencia al modo en que se representan internamente los caracteres, normalmente UTF-8 o UTF-16.
# Declaración independiente (opcional): indica al procesador XML si un documento es independiente (standalone=”no”) o se basa en información de fuentes externas, es decir, si depende de declaraciones de marca externas como una DTD externa (standalone=”yes”).
::# Declaración independiente (opcional): indica al procesador XML si un documento es independiente (standalone=”yes”) o se basa en información de fuentes externas, es decir, si depende de declaraciones de marca externas como una DTD externa (standalone=”no”), esta es la opción por defecto.
:: ''Ejemplo:''
:: <pre> <?xml version=”1.0” encoding=”UTF-8” standalone=”no”?></pre>
* Sólo existe '''un único elemento raíz''' para cada documento: es un solo elemento en el que todos los demás elementos y contenidos se encuentran anidados y correctamente cerrados. Se basa en una estructura jerárquica y su función es la misma que el elemento raíz de un documento HTML <code><HTML>Contenido</HTML></code>
* Todas '''las entidades usadas en su interior se declaran en la DTD interna'''.
* Todos los elementos, atributos y entidades que utilice deben escribirse con una '''sintaxis correcta'''. No debemos olvidar que:
# Todos los elementos deben estar delimitados por una etiqueta inicial y otra final con el mismo nombre. <code><elemento></elemento></code>
# Los valores de atributos en XML deben ir entre comillas simples o dobles.
# Los elementos vacíos deben terminar con '/' (autocierre) o añadiendo una etiqueta de fin y no puede haber etiquetas aisladas.
# XML es sensible a mayúsculas y minúsculas y los nombre de las etiquetas pueden ser alfanuméricos, pero siempre comenzando con una letra.


:: ''Ejemplo:''
:: <code><? xml version="1.0" encoding="UTF-8" standalone="no" ?></code>
:* Sólo existe '''un único elemento raíz''' para cada documento: es un solo elemento en el que todos los demás elementos y contenidos se encuentran anidados y correctamente cerrados. Se basa en una estructura jerárquica y su función es la misma que el elemento raíz de un documento HTML <code><HTML>Contenido</HTML></code>
:* Todas '''las entidades usadas en su interior se declaran en la DTD interna'''.
:* Todos los elementos, atributos y entidades que utilice deben escribirse con una '''sintaxis correcta'''. No debemos olvidar que:
::# Todos los elementos deben estar delimitados por una etiqueta inicial y otra final con el mismo nombre. <code><elemento></elemento></code>
::# Los valores de atributos en XML deben ir entre comillas simples o dobles.
::# Los elementos vacíos deben terminar con '/' (autocierre) o añadiendo una etiqueta de fin y no puede haber etiquetas aisladas.
::# XML es sensible a mayúsculas y minúsculas y los nombres de las etiquetas pueden ser alfanuméricos, pero siempre comenzando con una letra.


''Ejemplo:''
''Ejemplo:''
Línea 53: Línea 53:
Es posible trabajar con documentos no asociados a ninguna [[DTD]] y que en consecuencia jamás podrán ser validados. En este caso, los documentos sólo deberán estar bien formados, aunque siempre necesitarán la definición interna de las entidades utilizadas.
Es posible trabajar con documentos no asociados a ninguna [[DTD]] y que en consecuencia jamás podrán ser validados. En este caso, los documentos sólo deberán estar bien formados, aunque siempre necesitarán la definición interna de las entidades utilizadas.


===Documento Válido===
=== Documento Válido ===


Son aquellos documentos que además de estar bien formados, cumplen las especificaciones de la [[DTD]] ''(Document Type Definition)'', del Schema, o del elemento que lo valide, y siguen las pautas marcadas por sus modelos de contenido. No hay esquemas de documentos idénticos, por eso es difícil concretar las reglas que deben cumplir.
Son aquellos documentos que además de estar bien formados, cumplen las especificaciones de la [[DTD]] ''(Document Type Definition)'', del Schema, o del elemento que lo valide, y siguen las pautas marcadas por sus modelos de contenido. No hay esquemas de documentos idénticos, por eso es difícil concretar las reglas que deben cumplir.


Para que un documento XML también sea válido, durante el proceso de validación se comprueba:
Para que un documento XML también sea válido, durante el proceso de validación se comprueba:
* Qué elementos o atributos se permiten en un documento del tipo definido en el esquema.
:* Qué elementos o atributos se permiten en un documento del tipo definido en el esquema.
* La estructura de los elementos y atributos (elementos anidados, atributos obligatorios u opcionales, etc.)
:* La estructura de los elementos y atributos (elementos anidados, atributos obligatorios u opcionales, etc.)
* El orden de los elementos.
:* El orden de los elementos.
* Los valores de los datos de atributos y elementos (según enumeraciones, rangos de valores delimitados, tipo de dato correcto (p.ex formato correcto de una fecha, utilizar un entero para expresar un número), etc.
:* Los valores de los datos de atributos y elementos (según enumeraciones, rangos de valores delimitados, tipo de dato correcto (p.ex formato correcto de una fecha, utilizar un entero para expresar un número), etc.
* La unicidad de valores dentro de un documento (p. ex. Referencias de productos que no pueden repetirse).
:* La unicidad de valores dentro de un documento (p. ex. Referencias de productos que no pueden repetirse).


''Ejemplo que cumple las especificaciones de DTD:''
''Ejemplo que cumple las especificaciones de DTD:''
{| border=0 style="float:center;
{|
| ''Ejemplo.xml''
|+
!Ejemplo.xml
|-----------------
| ''NotaInterna.dtd''
| <syntaxhighlight lang="xml"><? xml version="1.0" encoding="UTF-8" standalone="no" ?>
|---------
| <pre><?xml version="1.0" encoding=”UTF-8” standalone=”no”?>
<!DOCTYPE nota SYSTEM "NotaInterna.dtd">
<!DOCTYPE nota SYSTEM "NotaInterna.dtd">
<nota importancia=”alta”>
<nota importancia="alta">
<remitente>Miquel</remitente>
<remitente>Miquel</remitente>
<destinatario>Jordi</destinatario>
<destinatario>Jordi</destinatario>
<titulo>Recordatorio</titulo>
<titulo>Recordatorio</titulo>
<mensaje>Recógeme este fin de semana</mensaje>
<mensaje>Recógeme este fin de semana</mensaje>
</nota> </pre>
</nota> </syntaxhighlight>
|}
{| border=0 style="float:center;
| <pre><?xml encoding=”UTF-8”?>
|+

!NotaInterna.dtd
|-----------------
|<pre>
<!ELEMENT nota (remitente, destinatario, titulo, mensaje?)>
<!ELEMENT nota (remitente, destinatario, titulo, mensaje?)>
<!ATTLIST nota importancia (alta|normal) normal)>
<!ATTLIST nota importancia (alta|normal) normal>
<!ELEMENT remitente (#PCDATA)>
<!ELEMENT remitente (#PCDATA)>
<!ELEMENT destinatario (#PCDATA)>
<!ELEMENT destinatario (#PCDATA)>
Línea 88: Línea 91:
|}
|}


== Métodos de validación ==


Existen varios métodos para validar los documentos XML. Los métodos más usados son la [[DTD]] de XML versión 1.0, el [[XML Schema]] de W3C, [[RELAX NG]] de Oasis y [[Schematron]] de la Academia Sinica Computing Centre.


=Métodos de validación=
=== Uso de DTD ===
La [[DTD]] es el formato de esquema nativo (y el más antiguo) para validar documentos XML, heredado de SGML. Utiliza una sintaxis no-XML para definir la estructura o modelo de contenido de un documento XML válido:

Existen varios métodos para validar los documentos XML. Los métodos más usados son el [[DTD]] de XML versión 1.0, el [[Schema]] de W3C, [[RELAX NG]] de Oasis i [[Schematron]] de la Academia Sinica Compuntig Centre.

===Uso de DTD===
La DTD es el formato de esquema nativo (y el más antiguo) para validar documentos XML, heredado de SGML. Utiliza una sintaxis no-XML para definir la estructura o modelo de contenido de un documento XML válido:
:* Define todos los elementos.
:* Define todos los elementos.
:* Define las relaciones entre los distintos elementos.
:* Define las relaciones entre los distintos elementos.
Línea 105: Línea 106:
Las DTD pueden ser internas o externas a un documento XML, o ambas cosas a la vez.
Las DTD pueden ser internas o externas a un documento XML, o ambas cosas a la vez.


===Uso de XML Schema===
=== Uso de XML Schema ===

XML Schema es la evolución de la [[DTD]] descrita por el W3C, también llamado de forma más informal XSD (XML Schema Definition). Es un lenguaje de esquema más complejo y más potente, basado en la gramática para proporcionar una potencia expresiva mayor que la [[DTD]]. Utiliza sintaxis XML, cosa que le permite especificar de forma más detallada un extenso sistema de tipos de datos. A diferencia de las DTDs, soporta la extensión del documento sin problemas.


XML Schema es la evolución de la DTD descrita por el W3C, también llamado de forma más informal XSD (XML Schema Definition). Es un lenguaje de esquema más complejo y más potente, basado en la gramática para proporcionar una potencia expresiva mayor que la DTD. Utiliza sintaxis XML, cosa que le permite especificar de forma más detallada un extenso sistema de tipos de datos. A diferencia de las DTDs, soporta la extensión del documento sin problemas.
A la hora de validar, la utilización de XSD supone un gran consumo en recursos y tiempo debido a su gran especificación y complejidad en la sintaxis (esquemas más difíciles de leer y escribir).
A la hora de validar, la utilización de XSD supone un gran consumo en recursos y tiempo debido a su gran especificación y complejidad en la sintaxis (esquemas más difíciles de leer y escribir).

Después de validar el documento con XML Schema, es posible expresar su estructura y contenido en términos del modelo de datos usado por el esquema de validación. Esta funcionalidad, conocida como ''Post-Schema-Validation Infoset'' (PSVI), se puede utilizar para transformar el documento en una jerarquía de objetos, a los cuales se puede acceder a través de un lenguaje de programación orientado a objetos (OOP). El modelo de datos de XML Schema incluye:
Después de validar el documento con XML Schema, es posible expresar su estructura y contenido en términos del modelo de datos usado por el esquema de validación. Esta funcionalidad, conocida como ''Post-Schema-Validation Infoset'' (PSVI), se puede utilizar para transformar el documento en una jerarquía de objetos, a los cuales se puede acceder a través de un lenguaje de [[programación orientada a objetos]] (OOP). El modelo de datos de XML Schema incluye:
:* el vocabulario (nombres de elemento y atributo)
:* el vocabulario (nombres de elemento y atributo)
:* el contenido modelo (relaciones y estructura)
:* el contenido modelo (relaciones y estructura)
:* y tipos de datos.
:* y tipos de datos.


===Uso de RELAX NG===
=== Uso de RELAX NG ===


RELAX NG es también un lenguaje de esquema basado en la gramática, muy intuitivo y más fácil de entender que el XML Schema. De ahí su popularidad. Tiene un alto poder expresivo, por ejemplo permite validar elementos intercalados que pueden aparecer en cualquier orden.
RELAX NG es también un lenguaje de esquema basado en la gramática, muy intuitivo y más fácil de entender que el XML Schema. De ahí su popularidad. Tiene un alto poder expresivo, por ejemplo permite validar elementos intercalados que pueden aparecer en cualquier orden.

Las aplicaciones de definición de documentos y validación para RELAX NG son más sencillas que en XML Schema, haciéndolo más fácil de utilizar e implementar. También tiene la capacidad de usar plug-ins de definiciones de tipos de dato de XML Schema, combinando así las ventajas de ambos lenguajes.
Las aplicaciones de definición de documentos y validación para RELAX NG son más sencillas que en XML Schema, haciéndolo más fácil de utilizar e implementar. También tiene la capacidad de usar plug-ins de definiciones de tipos de dato de XML Schema, combinando así las ventajas de ambos lenguajes.
RELAX NG se ha convertido recientemente en un estándar [[Organización Internacional para la Estandarización|ISO]] como la parte 2 de DSDL ''(Document Schema Definition Language)''.
RELAX NG se ha convertido recientemente en un estándar [[Organización Internacional para la Estandarización|ISO]] como la parte 2 de [[DSDL]] ''(Document Schema Definition Language)''.

=== Uso de Schematron ===


[[Schematron]], a diferencia de los anteriores lenguajes, se basa en afirmaciones en vez de en la gramática. Al basarse en una serie de reglas, utiliza expresiones de acceso en lugar de gramaticales para definir lo que se permite en un documento XML. Si el documento cumple estas reglas, entonces es válido.
===Uso de Schematron===


Schematron, a diferencia de los anteriores lenguajes, se basa en afirmaciones en vez de en la gramática. Al basarse en una serie de reglas, utiliza expresiones de acceso en lugar de gramaticales para definir lo que se permite en un documento XML. Si el documento cumple estas reglas, entonces es válido.
Este método de validación aporta una gran flexibilidad en la descripción de estructuras relacionales. En cambio, es un lenguaje muy limitado a la hora de especificar la estructura básica del documento, problema que se soluciona combinando Schematron con otros lenguajes de esquema.
Este método de validación aporta una gran flexibilidad en la descripción de estructuras relacionales. En cambio, es un lenguaje muy limitado a la hora de especificar la estructura básica del documento, problema que se soluciona combinando Schematron con otros lenguajes de esquema.


'''Junto con RELAX NG, Schematron se está estandarizando como parte del DSDL de [[Organización Internacional para la Estandarización|ISO]]'''
Junto con RELAX NG, Schematron se está estandarizando como parte del DSDL de [[Organización Internacional para la Estandarización|ISO]]


=Herramientas=
== Herramientas ==


La creación manual de documentos XML e incluso su manipulación pueden introducir todo tipo de errores, tipográficos, sintácticos y de contenido. Existen editores de XML que facilitan la tarea de crear documentos válidos y bien formados, ya que pueden advertir de los errores básicos cometidos e incluso escribir automáticamente la sintaxis más sencilla necesaria.
La creación manual de documentos XML e incluso su manipulación pueden introducir todo tipo de errores, tipográficos, sintácticos y de contenido. Existen editores de XML que facilitan la tarea de crear documentos válidos y bien formados, ya que pueden advertir de los errores básicos cometidos e incluso escribir automáticamente la sintaxis más sencilla necesaria.

Cuando necesitamos obtener un documento válido, el editor XML ha de ser capaz de:
Quando necessitamos de obter um documento válido, o [https://codifyformatter.org/xml-validator editor XML Validator] é capaz de:
:* Leer la [[DTD]] del documento y presentarle una lista desplegable con los elementos disponibles enumerados en la [[DTD]], evitando así la inclusión de algún elemento no definido en el esquema.
:* Leer la [[DTD]] del documento y presentarle una lista desplegable con los elementos disponibles enumerados en la [[DTD]], evitando así la inclusión de algún elemento no definido en el esquema.
:* Advertir el olvido de una etiqueta obligatoria e incluso no permitir este tipo de descuidos, no dando por finalizado el documento si existen errores de este tipo.
:* Advertir el olvido de una etiqueta obligatoria e incluso no permitir este tipo de descuidos o errores, no dando por finalizado el documento si existen errores de este tipo.


'''Editores:'''
*[http://www.vervet.com/ XML Pro] de Vervet Logic (open source)
*[http://www.altova.com/ XMLSpy] de Altova
*[https://web.archive.org/web/20190911215633/https://www.liquid-technologies.com/ Liquid XML Studio] de Liquid Technologies
*[http://www.oxygenxml.com/ <oXigen/> XML Editor]
*[https://web.archive.org/web/20061111161403/http://www.extensibility.com/software/metadata/turboxml.jsp Turbo XML] de TIBCO (Plataforma de desarrollo integrado de XML)
*[http://msdn.microsoft.com/XML/ XML Notepad] de Microsoft
*[http://www.xmlwriter.com/ XMLwriter] {{Wayback|url=http://www.xmlwriter.com/ |date=20061110175325 }} de Wattle Software


=Procesamiento=
== Procesamiento ==


Los documentos [[XML]] se procesan a través de analizadores, aplicaciones que leen el documento, lo interpretan y generan una salida basada en sus contenidos y en la marca utilizada para su descripción. El resultado se muestra en un dispositivo de visualización, como una ventana de navegación o una impresora. Los procesadores hacen posible la presentación y distribución de documentos XML.
Los documentos [[XML]] se procesan a través de analizadores, aplicaciones que leen el documento, lo interpretan y generan una salida basada en sus contenidos y en la marca utilizada para su descripción. El resultado se muestra en un dispositivo de visualización, como una ventana de navegación o una impresora. Los procesadores hacen posible la presentación y distribución de documentos XML.

Estos analizadores pueden tener o no la capacidad de validar: todos los analizadores comprueban que los documentos XML estén bien formados, pero solo los analizadores validantes pueden efectuar la validación. Los analizadores no validantes procesan a mayor velocidad, ya que no tienen que comprobar tantos detalles como los validantes.
Estos analizadores pueden tener o no la capacidad de validar: todos los analizadores comprueban que los documentos XML estén bien formados, pero solo los analizadores validantes pueden efectuar la validación. Los analizadores no validantes procesan a mayor velocidad, ya que no tienen que comprobar tantos detalles como los validantes.
Casi todos los procesadores de [[XML]] son capaces de validar con un esquema basado en [[DTD]]. Si el documento viola alguna de las reglas de su DTD, el analizador advertirá del error y el proceso del documento se detendrá. Un buen procesador validante no solo informará la presencia de un error, sino que elaborará un mensaje especificando cuál ha sido su causa. También existe el procesador [[Xerces]] de [[Apache]] que, además de ser el más completo parser de XML, incluye soporte de [[XML Schema]].
Habitualmente, se usa un analizador validante para comprobar la corrección de los documentos, y uno no validante para su presentación. Una vez que se sabe que un documento es válido, no hay ningún motivo para comprobar su validez cada vez que se procese (optimizándo así el tiempo del proceso).
=Enlaces Externos=


Casi todos los procesadores de [[XML]] son capaces de validar con un esquema basado en [[DTD]]. Si el documento viola alguna de las reglas de su [[DTD]], el analizador advertirá del error y el proceso del documento se detendrá. Un buen procesador validante no solo informará la presencia de un error, sino que elaborará un mensaje especificando cuál ha sido su causa. También existe el procesador [[Xerces]] de [[Apache]] que, además de ser el más completo parser de XML, incluye soporte de [[XML Schema]].
*[http://geneura.ugr.es/~jmerelo/xml/ Introducción al lenguaje XML]

*[http://www.ulpgc.es/otros/tutoriales/xml/Estructura.html Estructura de un documento XML]
Habitualmente, se usa un analizador validante para comprobar la corrección de los documentos, y uno no validante para su presentación. Una vez que se sabe que un documento es válido, no hay ningún motivo para comprobar su validez cada vez que se procese (optimizando así el tiempo del proceso).
*[http://www.kusor.net/w3c/xhtmltut/ Módulos y lenguajes de marcas XHTML]

* [http://www.w3.org/TR/REC-xml/ Especificaión XML]
'''Procesadores:'''
*[http://xerces.apache.org/ Xerces] de Apache (open source) es uno de los más completos parsers de XML e incluye soporte de XML Schema.
*[https://web.archive.org/web/20070311042617/http://www.digitalriver.com/dr/sat5/ec_MAIN.Entry10?V1=378861&PN=1&SP=10023&xid=40566&CUR=840&DSP=&PGRP=0&ABCODE=&CACHE_ID=0 XMLValidate] de TIBCO
*[http://www.altova.com/ XMLSpy] de Altova
*[http://msdn.microsoft.com/XML/ MSXML Parser] de Microsoft
*[http://www.doczilla.com/ DocZilla] de CiTEC (basado en Mozilla)
*[http://www.stylusstudio.com Stylus Studio XML] (Plataforma IDE)
*[http://expat.sourceforge.net/ Expat XML Parser]

== Véase también ==
* [[Pruebas de validación]]
* [[XML]]
* [[XML Schema]]
* [[DTD]]
* [[HTML]]

== Enlaces externos ==

*[http://geneura.ugr.es/~jmerelo/xml/ Introducción al lenguaje XML] {{Wayback|url=http://geneura.ugr.es/~jmerelo/xml/ |date=20061207230112 }}
*[https://web.archive.org/web/20060511234103/http://www.ulpgc.es/otros/tutoriales/xml/Estructura.html Estructura de un documento XML]
*[https://web.archive.org/web/20050414094125/http://www.kusor.net/w3c/xhtmltut/ Módulos y lenguajes de marcas XHTML]
* [http://www.w3.org/TR/REC-xml/ Especificación XML]

'''DTD:'''
*[http://www.xmlfiles.com/dtd/ XML DTD]


'''XML Schema:'''
'''XML Schema:'''
Línea 158: Línea 194:
'''Schematron:'''
'''Schematron:'''
*[http://www.schematron.com/ ISO Schematron Home Page]
*[http://www.schematron.com/ ISO Schematron Home Page]
*[http://xml.ascc.net/resource/schematron/ Academia Sinica Computing Centre's Schematron Home Page]
*[http://xml.ascc.net/resource/schematron/ Academia Sinica Computing Centre's Schematron Home Page] {{Wayback|url=http://xml.ascc.net/resource/schematron/ |date=20061011215548 }}


Validar archivos online:
*http://www.stg.brown.edu/service/xmlvalid/
*http://www.xmlvalidation.com/index.php?id=13&L=3
*http://apps.gotdotnet.com/xmltools/xsdvalidator



'''Validar archivos en línea:'''
[[ca: Validació XML]]
*[http://www.xmlvalidation.com/index.php?id=13&L=3 validación XML] {{Wayback|url=http://www.xmlvalidation.com/index.php?id=13&L=3 |date=20070930021921 }}
[[en: XML Validation]]
*[http://www.w3.org/RDF/Validator/ Validation Service] de W3C
*[http://www.w3.org/2001/03/webdata/xsv Validador de XML Schema REC (20010502) version] {{Wayback|url=http://www.w3.org/2001/03/webdata/xsv |date=20120623153949 }}
*[https://web.archive.org/web/20061205093707/http://www.w3schools.com/dom/dom_validate.asp XML DOM Validation]
*[https://codebeautify.org/xmlvalidator XML Validator]


{{Control de autoridades}}
[[Categoría:XML]]
[[Categoría:XML]]

Revisión actual - 17:53 29 ago 2024

La Validación XML (eXtensible Markup Language) es la comprobación de que un documento en lenguaje XML está bien formado y se ajusta a una estructura definida. Un documento bien formado sigue las reglas básicas de XML establecidas para el diseño de documentos. Un documento válido además respeta las normas dictadas por su DTD (definición de tipo de documento) o esquema utilizado.

Introducción

[editar]

En primer lugar, los documentos XML deben basarse en la sintaxis definida en la especificación XML para ser correctos (documentos bien formados). Esta sintaxis impone cosas como la coincidencia de mayúsculas/minúsculas en los nombres de etiqueta, comillas obligatorias para los valores de atributo, etc. Sin embargo, para tener un control más preciso sobre el contenido de los documentos es necesario un proceso de análisis más exhaustivo.

La validación es la parte más importante dentro de este análisis, ya que determina si un documento creado se ciñe a las restricciones descritas en el esquema utilizado para su construcción. Controlar el diseño de documentos a través de esquemas aumenta su grado de fiabilidad, consistencia y precisión, facilitando su intercambio entre aplicaciones y usuarios. Cuando creamos documentos XML válidos aumentamos su funcionalidad y utilidad.

Necesidad de validación

[editar]

La validación se encarga de verificar:

  • La corrección de los datos: aunque validar contra un esquema no garantiza al 100% que los datos son correctos, nos permite detectar formatos nulos o valores fuera de rango y por tanto incorrectos.
  • La integridad de los datos: al validar, se comprueba que toda la información obligatoria está presente en el documento.
  • El entendimiento compartido de los datos: a través de la validación se comprueba que el emisor y receptor perciban el documento de la misma manera, que lo interpreten igual.

El éxito de la validación dependerá de factores como:

  • Dónde se originan los documentos: si son fuentes confiables o no.
  • Quién los crea: si son creados por una aplicación automáticamente o por un usuario de forma manual. (véase Herramientas)
  • Quién los manipula: también es posible introducir errores involuntariamente durante la manipulación de los datos y documentos.
  • La calidad de los datos: si los documentos se generan directamente de una base de datos de herencia, pueden no estar completos o correctos al 100%.
  • El rendimiento del procesador o aparato que realice la validación: el procesado no es inmediato, necesita su tiempo. Si el rendimiento es crítico, se pueden aplicar diversas alternativas para reducir el coste computacional como limitar la validación a algunos aspectos, o crear un código específico para la aplicación particular que lo utiliza y se ejecute de forma más eficaz. (véase Procesamiento)

Tipos de documentos

[editar]

Documento Bien Formado

[editar]

Especifica unas normas básicas a nivel de sintaxis, a cumplir por todos aquellos documentos con intención de denominarse XML. Las características básicas exigidas son:

  • Incluir una declaración XML como etiqueta obligatoria: proporciona hasta tres informaciones clave sobre el documento que la contiene:
  1. Información de la versión XML (obligatoria): la versión más utilizada es 1.0, aunque ya está disponible la versión 1.1 de XML.
  2. Codificación de caracteres utilizada (opcional): hace referencia al modo en que se representan internamente los caracteres, normalmente UTF-8 o UTF-16.
  3. Declaración independiente (opcional): indica al procesador XML si un documento es independiente (standalone=”yes”) o se basa en información de fuentes externas, es decir, si depende de declaraciones de marca externas como una DTD externa (standalone=”no”), esta es la opción por defecto.
Ejemplo:
<? xml version="1.0" encoding="UTF-8" standalone="no" ?>
  • Sólo existe un único elemento raíz para cada documento: es un solo elemento en el que todos los demás elementos y contenidos se encuentran anidados y correctamente cerrados. Se basa en una estructura jerárquica y su función es la misma que el elemento raíz de un documento HTML <HTML>Contenido</HTML>
  • Todas las entidades usadas en su interior se declaran en la DTD interna.
  • Todos los elementos, atributos y entidades que utilice deben escribirse con una sintaxis correcta. No debemos olvidar que:
  1. Todos los elementos deben estar delimitados por una etiqueta inicial y otra final con el mismo nombre. <elemento></elemento>
  2. Los valores de atributos en XML deben ir entre comillas simples o dobles.
  3. Los elementos vacíos deben terminar con '/' (autocierre) o añadiendo una etiqueta de fin y no puede haber etiquetas aisladas.
  4. XML es sensible a mayúsculas y minúsculas y los nombres de las etiquetas pueden ser alfanuméricos, pero siempre comenzando con una letra.

Ejemplo:

<?xml version="1.0"?>
<nota>
<remitente>Miguel</remitente>
<destinatario>Jorge</destinatario>
<titulo>Recordatorio</titulo>
<mensaje>Recógeme este fin de semana</mensaje>
</nota>

Es posible trabajar con documentos no asociados a ninguna DTD y que en consecuencia jamás podrán ser validados. En este caso, los documentos sólo deberán estar bien formados, aunque siempre necesitarán la definición interna de las entidades utilizadas.

Documento Válido

[editar]

Son aquellos documentos que además de estar bien formados, cumplen las especificaciones de la DTD (Document Type Definition), del Schema, o del elemento que lo valide, y siguen las pautas marcadas por sus modelos de contenido. No hay esquemas de documentos idénticos, por eso es difícil concretar las reglas que deben cumplir.

Para que un documento XML también sea válido, durante el proceso de validación se comprueba:

  • Qué elementos o atributos se permiten en un documento del tipo definido en el esquema.
  • La estructura de los elementos y atributos (elementos anidados, atributos obligatorios u opcionales, etc.)
  • El orden de los elementos.
  • Los valores de los datos de atributos y elementos (según enumeraciones, rangos de valores delimitados, tipo de dato correcto (p.ex formato correcto de una fecha, utilizar un entero para expresar un número), etc.
  • La unicidad de valores dentro de un documento (p. ex. Referencias de productos que no pueden repetirse).

Ejemplo que cumple las especificaciones de DTD:

Ejemplo.xml
<? xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE nota SYSTEM "NotaInterna.dtd">
<nota importancia="alta">
  <remitente>Miquel</remitente>
  <destinatario>Jordi</destinatario>
  <titulo>Recordatorio</titulo>
  <mensaje>Recógeme este fin de semana</mensaje>
</nota>
NotaInterna.dtd
<!ELEMENT nota (remitente, destinatario, titulo, mensaje?)>
<!ATTLIST nota importancia (alta|normal) normal>
<!ELEMENT remitente (#PCDATA)>
<!ELEMENT destinatario (#PCDATA)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT mensaje (#PCDATA)>

Métodos de validación

[editar]

Existen varios métodos para validar los documentos XML. Los métodos más usados son la DTD de XML versión 1.0, el XML Schema de W3C, RELAX NG de Oasis y Schematron de la Academia Sinica Computing Centre.

Uso de DTD

[editar]

La DTD es el formato de esquema nativo (y el más antiguo) para validar documentos XML, heredado de SGML. Utiliza una sintaxis no-XML para definir la estructura o modelo de contenido de un documento XML válido:

  • Define todos los elementos.
  • Define las relaciones entre los distintos elementos.
  • Proporciona información adicional que puede ser incluida en el documento (atributos, entidades, notaciones).
  • Aporta comentarios e instrucciones para su procesamiento y representación de los formatos de datos.

Es el método más sencillo usado para validar, y por esta razón presenta varias limitaciones, ya que no soporta nuevas ampliaciones de XML y no es capaz de describir ciertos aspectos formales de un documento a nivel expresivo.

Las DTD pueden ser internas o externas a un documento XML, o ambas cosas a la vez.

Uso de XML Schema

[editar]

XML Schema es la evolución de la DTD descrita por el W3C, también llamado de forma más informal XSD (XML Schema Definition). Es un lenguaje de esquema más complejo y más potente, basado en la gramática para proporcionar una potencia expresiva mayor que la DTD. Utiliza sintaxis XML, cosa que le permite especificar de forma más detallada un extenso sistema de tipos de datos. A diferencia de las DTDs, soporta la extensión del documento sin problemas.

A la hora de validar, la utilización de XSD supone un gran consumo en recursos y tiempo debido a su gran especificación y complejidad en la sintaxis (esquemas más difíciles de leer y escribir).

Después de validar el documento con XML Schema, es posible expresar su estructura y contenido en términos del modelo de datos usado por el esquema de validación. Esta funcionalidad, conocida como Post-Schema-Validation Infoset (PSVI), se puede utilizar para transformar el documento en una jerarquía de objetos, a los cuales se puede acceder a través de un lenguaje de programación orientada a objetos (OOP). El modelo de datos de XML Schema incluye:

  • el vocabulario (nombres de elemento y atributo)
  • el contenido modelo (relaciones y estructura)
  • y tipos de datos.

Uso de RELAX NG

[editar]

RELAX NG es también un lenguaje de esquema basado en la gramática, muy intuitivo y más fácil de entender que el XML Schema. De ahí su popularidad. Tiene un alto poder expresivo, por ejemplo permite validar elementos intercalados que pueden aparecer en cualquier orden.

Las aplicaciones de definición de documentos y validación para RELAX NG son más sencillas que en XML Schema, haciéndolo más fácil de utilizar e implementar. También tiene la capacidad de usar plug-ins de definiciones de tipos de dato de XML Schema, combinando así las ventajas de ambos lenguajes. RELAX NG se ha convertido recientemente en un estándar ISO como la parte 2 de DSDL (Document Schema Definition Language).

Uso de Schematron

[editar]

Schematron, a diferencia de los anteriores lenguajes, se basa en afirmaciones en vez de en la gramática. Al basarse en una serie de reglas, utiliza expresiones de acceso en lugar de gramaticales para definir lo que se permite en un documento XML. Si el documento cumple estas reglas, entonces es válido.

Este método de validación aporta una gran flexibilidad en la descripción de estructuras relacionales. En cambio, es un lenguaje muy limitado a la hora de especificar la estructura básica del documento, problema que se soluciona combinando Schematron con otros lenguajes de esquema.

Junto con RELAX NG, Schematron se está estandarizando como parte del DSDL de ISO

Herramientas

[editar]

La creación manual de documentos XML e incluso su manipulación pueden introducir todo tipo de errores, tipográficos, sintácticos y de contenido. Existen editores de XML que facilitan la tarea de crear documentos válidos y bien formados, ya que pueden advertir de los errores básicos cometidos e incluso escribir automáticamente la sintaxis más sencilla necesaria.

Quando necessitamos de obter um documento válido, o editor XML Validator é capaz de:

  • Leer la DTD del documento y presentarle una lista desplegable con los elementos disponibles enumerados en la DTD, evitando así la inclusión de algún elemento no definido en el esquema.
  • Advertir el olvido de una etiqueta obligatoria e incluso no permitir este tipo de descuidos o errores, no dando por finalizado el documento si existen errores de este tipo.

Editores:

Procesamiento

[editar]

Los documentos XML se procesan a través de analizadores, aplicaciones que leen el documento, lo interpretan y generan una salida basada en sus contenidos y en la marca utilizada para su descripción. El resultado se muestra en un dispositivo de visualización, como una ventana de navegación o una impresora. Los procesadores hacen posible la presentación y distribución de documentos XML.

Estos analizadores pueden tener o no la capacidad de validar: todos los analizadores comprueban que los documentos XML estén bien formados, pero solo los analizadores validantes pueden efectuar la validación. Los analizadores no validantes procesan a mayor velocidad, ya que no tienen que comprobar tantos detalles como los validantes.

Casi todos los procesadores de XML son capaces de validar con un esquema basado en DTD. Si el documento viola alguna de las reglas de su DTD, el analizador advertirá del error y el proceso del documento se detendrá. Un buen procesador validante no solo informará la presencia de un error, sino que elaborará un mensaje especificando cuál ha sido su causa. También existe el procesador Xerces de Apache que, además de ser el más completo parser de XML, incluye soporte de XML Schema.

Habitualmente, se usa un analizador validante para comprobar la corrección de los documentos, y uno no validante para su presentación. Una vez que se sabe que un documento es válido, no hay ningún motivo para comprobar su validez cada vez que se procese (optimizando así el tiempo del proceso).

Procesadores:

Véase también

[editar]

Enlaces externos

[editar]

DTD:

XML Schema:

RELAX NG:

Schematron:

Validar archivos en línea: