Generación de XML Schema (XSD) y DTD a partir de documentos XML
En el siguiente tutorial, vamos a presentar de una forma rápida una herramienta java que desde mi punto de vista me parece muy interesante.
Dicha herramienta se llama Trang y consiste en un simple jar
con el que podemos a través de línea de comandos
generar XML Schema (XSD) o DTD a partir de un documento XML. Ahorrándonos así un valioso esfuerzo :-).
Otra cosa que permite esta herramienta es convertir un XSD en un DTD y viceversa.
Aquí tienes la página de Trang: Descargar Trang.
Nota: Existen web como http://www.hitsw.com/xml_utilites/ que hacen lo mismo de forma OnLine, pero mi opinión es que Trang afina más y mejor.
A continuación, vamos a realizar un ejemplo de como realizar las tareas anteriormente expuestas:
XML a partir del cual generaremos el XMLSchema y el DTD: persona.xml
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="utf-8"?> <persona xmlns="http://www.adictosaltrabajo.com"> <dni>111111111</dni> <name>Pepito Bombillo Serrano</name> <estadoCivil>Soltero</estadoCivil> <company> <name>Autentia</name> <url>http://www.autentia.com</url> <telefono>+34916753306</telefono> </company> </persona> |
Jugando un poco con la aplicación: Generando XSD y DTD.
1 2 3 4 5 6 7 8 9 10 11 |
rem "Generamos un XML Schema que valide el documento" c:\java\jdk1.6.0_11\bin\java -jar trang.jar persona.xml persona.xsd rem "Generamos un DTD que valide el documento" c:\java\jdk1.6.0_11\bin\java -jar trang.jar persona.xml persona.dtd rem "Generamos un DTD a partir de un XML Schema" c:\java\jdk1.6.0_11\bin\java -jar trang.jar persona.xsd persona2.dtd rem "Generamos un XML Schema a partir de un DTD" c:\java\jdk1.6.0_11\bin\java -jar trang.jar persona.dtd persona2.xsd |
XMLSchema generado: persona.xsd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.adictosaltrabajo.com" xmlns:ns1="http://www.adictosaltrabajo.com"> <xs:element name="persona"> <xs:complexType> <xs:sequence> <xs:element ref="ns1:dni"/> <xs:element ref="ns1:name"/> <xs:element ref="ns1:estadoCivil"/> <xs:element ref="ns1:company"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="dni" type="xs:integer"/> <xs:element name="estadoCivil" type="xs:NCName"/> <xs:element name="company"> <xs:complexType> <xs:sequence> <xs:element ref="ns1:name"/> <xs:element ref="ns1:url"/> <xs:element ref="ns1:telefono"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="url" type="xs:anyURI"/> <xs:element name="telefono" type="xs:integer"/> <xs:element name="name" type="xs:string"/> </xs:schema> |
Pero claro, no es oro todo lo que reluce, siempre hay que hacer algún retoque. Por ejemplo en la línea 15 vemos que el campo estado civil lo ha generado de tipo
NC:name
, cuando seguramente querramos una restricción de valores: soltero, casado, …
No está de más aprender a crear esquemas XML a manita. En el siguiente enlace tienes un tutorial que te enseña a realizarlo a través de algunos ejemplos, eso sí, no es un libro, así que se confia un poco en la intuición del lector (A buen entendedor pocas palabras bastan).
Aprendiendo XMLSchema a través de ejemplos.
DTD generado: persona.dtd
1234567891011121314151617181920212223242526
<!ATTLIST persona xmlns CDATA #FIXED 'http://www.adictosaltrabajo.com'> <!ELEMENT dni (#PCDATA)><!ATTLIST dni xmlns CDATA #FIXED 'http://www.adictosaltrabajo.com'> <!ELEMENT estadoCivil (#PCDATA)><!ATTLIST estadoCivil xmlns CDATA #FIXED 'http://www.adictosaltrabajo.com'> <!ELEMENT company (name,url,telefono)><!ATTLIST company xmlns CDATA #FIXED 'http://www.adictosaltrabajo.com'> <!ELEMENT url (#PCDATA)><!ATTLIST url xmlns CDATA #FIXED 'http://www.adictosaltrabajo.com'> <!ELEMENT telefono (#PCDATA)><!ATTLIST telefono xmlns CDATA #FIXED 'http://www.adictosaltrabajo.com'> <!ELEMENT name (#PCDATA)><!ATTLIST name xmlns CDATA #FIXED 'http://www.adictosaltrabajo.com'>
Referencias
- http://www.thaiopensource.com/relaxng/trang-manual.html
- http://www.thaiopensource.com/relaxng/trang.html
Conclusiones
Desde mi punto de vista aunque existan este tipo de herramientas, es muy importante aprender a realizar esquemas a manita, pues muchas otras tecnologías dependen directamente de este conocimiento, por ejemplo los WSDL que definen los servicios web.
Los XSD son un estándar para estructurar y validar información, ¿qué hay más importante que la información en una aplicación?.
Carlos García Pérez. Creador de MobileTest, un complemento educativo para los profesores y sus alumnos.
firstname.lastname@example.org