Transcript Internet
3a. XML: DTD y XML Schema Gestión de Sistemas en Internet Universidad Antonio de Nebrija, 2003/04 Justo N. Hidalgo Sanz Por qué XML 08/07/2015 Internet - XML 2 Definición eXtensible Markup Language Lenguaje de marcas basado en texto. – Proviene de SGML. Las etiquetas se utilizan para identificar datos. Marcas (markup): conjunto de etiquetas. <message> – – – – <to>[email protected]</to> <from>[email protected]</from> <subject>Aprendizaje de XML</subject> <text>Hoy comienza el capítulo de XML</text> </message> 08/07/2015 Internet - XML 3 Características Las etiquetas pueden contener atributos: – <message [email protected] [email protected] – subject=“Aprendizaje de XML"> – <text>Hoy comienza el capítulo de XML</text> – </message> Un documento XML ha de estar bien formado. Empty tags: <flag/> Comentarios: <!-- comentario --> 08/07/2015 Internet - XML 4 Importancia de XML Texto plano. Identificación de datos: la jerarquía lo permite. Estilo: XSL (eXtensible Stylesheet Language). Traduce tags XML a otros tags XML. Mucha capacidad de enlace. Fácil procesamiento debido a que está bien formado. Jerárquica. 08/07/2015 Internet - XML 5 Posibles usos de XML Procesado de datos tradicional – Integración de sistemas Programación basada en documentos – Generalización máxima de las aplicaciones Archivo – Almacenamiento de información Binding – Almacenamiento de objetos 08/07/2015 Internet - XML 6 Especificaciones (I) Recomendaciones W3C – SAX (Simple API for XML) Acceso serializado a XML. Orientado a eventos. – DOM (Document Object Model) Convierte un doc. XML en un árbol. – DTD (Document Type Definition) Especifica los tipos de etiquetas que se pueden utilizar en un documento XML. – RDF – Namespaces – XSL 08/07/2015 Internet - XML 7 Especificaciones (II) Especificaciones propuestas W3C – RDF schema. Working drafts W3C – XLL (XML Link Language) Xlink Xpointer – XHTML: HTML avanzado. – XML Schema: DTD más avanzado. 08/07/2015 Internet - XML 8 Especificaciones (III) “Notas” W3C – Schema proposals: los DTDs no son jerárquicos. !ELEMENT mailAddress (name, address, zipcode)> !ELEMENT name (#PCDATA)> !ELEMENT address (#PCDATA)> !ELEMENT zipcode (#PCDATA)> Si hiciera falta otro “name”... – DDML/Xschema (Document Definition Markup Language) – DCD (Document Content Description) – SOX (Schema for Object-oriented XML) 08/07/2015 Internet - XML 9 Especificaciones (y IV) Integración y comercio electrónico – ICE (Information and Content Exchange) – ebXML (Electronic Business with XML) – cxml (Commerce XML) – CBML (Common Business Library) – UBL (Universal Business Library) 08/07/2015 Internet - XML 10 Escritura de un fichero XML (I) Datos XML para una representación de diapositivas. Pasos: 1. 2. Crear el fichero “slideSample.xml” Escribir la declaración que identifica al fichero como documento XML. 1. <?xml version='1.0' encoding='us-ascii'?>. 1. ASCII US de 8 bits. 2. No se especifica como documento “standalone”, el parser asume que puede contener referencias a otros documentos. 3. 08/07/2015 Añadir los comentarios adecuados. Internet - XML 11 Escritura (II) Todo fichero XML define un solo elemento (root): el resto ha de estar contenido. (<slideshow>...</slideshow>) Adición de atributos: características de un elemento que no requieren ningún tipo de estructura. – <slideshow title="Sample Slide Show“ date="Date of publication“ author="Yours Truly"> – </slideshow> 08/07/2015 Internet - XML 12 Escritura (y III) <?xml version='1.0' encoding='us-ascii'?> <!-- A SAMPLE set of slides --> <slideshow <!-- OVERVIEW --> <slide type="all"> title="Sample Slide Show“ date="Date of publication“ author=“[email protected]"> <title>Introduccion</title> <!-- TITLE SLIDE --> <item>Quien <em>necesita</em> XML</item> <slide type="all"> <title>¡Esto es XML!</title> </slide> 08/07/2015 <item>XML es <em>util</em></item> <item/> </slide> </slideshow> Internet - XML 13 Esquemas Todo XML tiene una estructura implícita. Si se conoce de antemano, XML sirve de comunicación entre sistemas: – METADATOS (información sobre los datos) En la actualidad, existen dos esquemas: – DTD – XMLSchema 08/07/2015 Internet - XML 14 DTD (I) Document Type Definition – El prolog puede incluir un DTD – Elementos: <!ELEMENT nombre_elemento contenidos_válidos_elemento> – Cualificadores: ?: opcional (0 ó 1) *: 0 ó más. +: 1 ó más. – <!ELEMENT slideshow (slide+)> 08/07/2015 Internet - XML 15 DTD (II) Texto y nested elements – <!ELEMENT slideshow (slide+)> – <!ELEMENT slide (title, item*)> – <!ELEMENT title (#PCDATA)> – <!ELEMENT item (#PCDATA | item)*> PCDATA: parsed character data. CDATA: no “parseado”. Última línea: XML mixed-content model. 08/07/2015 Internet - XML 16 DTD (III) Valores especiales de elementos: – EMPTY: el elemento no tiene contenido. – ANY: puede contener cualquier otro elemento definido, o PCDATA. Referencia de DTDs: – <!DOCTYPE slideshow SYSTEM "slideshow.dtd"> 08/07/2015 Internet - XML 17 DTD (IV): definición de atributos Es útil definir qué valores son válidos para cada atributo. – <!ELEMENT slideshow (slide+)> – <!ATTLIST slideshow title CDATA #REQUIRED date CDATA #IMPLIED author CDATA "unknown"> – <!ELEMENT slide (title, item*)> 08/07/2015 Internet - XML 18 DTD (V) 1. Tipo de dato: 1. 2. 3. 4. 5. 6. 7. 8. 08/07/2015 (valor1 | valor2 | ...): lista de valores separados. CDATA ID: nombre no compartido por otro atributo ID. IDREF: referencia a un ID definido en otra parte del documento. IDREFS: lista separada por espacios. ENTITY: nombre de una entidad definida en el DTD. ENTITIES. NMTOKEN: nombre válido XML compuesto por letras, números, etc. Internet - XML 19 DTD (VI) 1. 2. 2. NMTOKENS. NOTATION: formato de datos no XML, como los utilizados para ficheros de imágenes. <!ATTLIST slide type (tech | exec | all) #IMPLIED> Valor por defecto, o si el atributo se requiere o no. 1. 2. 3. 4. 08/07/2015 #REQUIRED: el valor ha de ser especificado en el doc. #IMPLIED: Si el valor no se especifica, tendrá uno por defecto. “default”: valor por defecto. #FIXED “fixed”: valor a utilizar; si el documento especifica algún valor, ha de ser ESE. Internet - XML 20 DTD (VII): referencia a entidades externas <!DOCTYPE slideshow SYSTEM "slideshow.dtd" [ – <!ENTITY product "WonderWidget"> – <!ENTITY products "WonderWidgets"> – <!ENTITY copyright SYSTEM "copyright.xml">]> <!ENTITY currentDate SYSTEM "http://www.example.com/servlet/CurrentDate?fm t=dd-MMM-yyyy"> <!ENTITY % xhtml SYSTEM "xhtml.dtd"> %xhtml; 08/07/2015 Internet - XML 21 DTD (y VIII): ejemplo Ajedrez 08/07/2015 Internet - XML 22 XMLSchema (I) DTD no es un gran sistema de generación de ficheros XML: – No es orientado a objetos. – No permite redefinición de elementos. – Pobre en cuanto a definición de datos, rangos y restricciones. 08/07/2015 Internet - XML 23 XMLSchema (II) XMLSchema es un sistema más complejo. – Usan sintaxis de XML, al contrario que los DTDs. – Permiten especificar los tipos de datos. – Son extensibles. 08/07/2015 Internet - XML 24 XMLSchema (y III) Inicialmente propuesto por Microsoft. Recomendación oficial de la W3C desde Mayo de 2001. 08/07/2015 Internet - XML 25 XMLSchema. Ejemplo Simple (I) XML: <?xml version="1.0"?> <note> <to>Churri</to> <from>Fresita</from> <heading>Recordatorio</heading> <body>¡Estoy en Gran Hermano!</body> </note> 08/07/2015 Internet - XML 26 XMLSchema. Ejemplo Simple (II) DTD: <!ELEMENT heading, <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT 08/07/2015 note (to, from, body)> to (#PCDATA)> from (#PCDATA)> heading (#PCDATA)> body (#PCDATA)> Internet - XML 27 XMLSchema. Ejemplo Simple (y III) XML Schema (.xsd) <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 08/07/2015 Internet - XML 28 XMLSchema: elemento Schema <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> xmlns:xs: los elementos y tipos de datos provienen del espacio de nombrado de la w3c. targetNamespace: espacio de nombrado de lo definido aquí. xmlns: espacio de nombrado por defecto. elementFormDefault: todos los elementos han de pertenecer a un espacio de nombrado. 08/07/2015 Internet - XML 29 XMLSchema. Referencias (I) Referencia a un DTD: <?xml version="1.0"?> <!DOCTYPE note SYSTEM "http://www.w3schools.com/dtd /note.dtd"> 08/07/2015 Internet - XML 30 XMLSchema. Referencias (II) Referencia a un XSD: <?xml version="1.0"?> <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> <to>Churri</to> 08/07/2015 Internet - XML 31 XMLSchema. Referencias (y III) xmlns: espacio de nombrado por defecto. xmlns:xsi: espacio de nombrado de la instancia XMLSchema. xsi:schemaLocation: dos atributos: – Espacio de nombrado a utilizar. – Localización del XML Schema. 08/07/2015 Internet - XML 32 XMLSchema. Restricciones en valores (I) <xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 33 XMLSchema. Restricciones en valores (II) <xs:element name="car"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 34 XMLSchema. Restricciones en valores (III) <xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 35 XMLSchema. Restricciones en valores (IV) <xs:element name="initials"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[A-Z][A-Z][A-Z]"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 36 XMLSchema. Restricciones en valores (V) <xs:element name="prodid"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:pattern value="[0-9][0-9][0-9][09][0-9]"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 37 XMLSchema. Restricciones en valores (VI) <xs:element name="gender"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="male|female"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 38 XMLSchema. Restricciones en valores (VII) <xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-zA-Z0-9]{8}"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 39 XMLSchema. Restricciones en valores (VIII) <xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="8"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 40 XMLSchema. Restricciones en valores (y IX) <xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="5"/> <xs:maxLength value="8"/> </xs:restriction> </xs:simpleType> </xs:element> 08/07/2015 Internet - XML 41 XMLSchema: elementos complejos (I) <xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> 08/07/2015 Internet - XML 42 XMLSchema: elementos complejos (y II) <xs:element name="employee" type="fullpersoninfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="fullpersoninfo"> <xs:complexContent> <xs:extension base="personinfo"> <xs:sequence> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> 08/07/2015 Internet - XML </xs:complexType> 43 XMLSchema: elementos vacíos (I) <xs:element name="product"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:integer"> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> 08/07/2015 Internet - XML 44 XMLSchema: elementos vacíos (y II) Lo mismo, pero más compacto: <xs:element name="product"> <xs:complexType> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:complexType> </xs:element> o: <xs:element name="product" type="prodtype"/> <xs:complexType name="prodtype"> <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:complexType> 08/07/2015 Internet - XML 45 XMLSchema: mixed content (I) Elemento que puede contener atributos, elementos y texto. Ejemplo: <letter> Querida <name>Fresita</name>. Tu pedido <orderid>1032</orderid> , de fresas silvestres se enviará el <shipdate>2001-07-13</shipdate>. </letter> 08/07/2015 Internet - XML 46 XMLSchema: mixed content (y II) <xs:element name="letter"> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="orderid" type="xs:positiveInteger"/> <xs:element name="shipdate" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element> 08/07/2015 Internet - XML 47 XMLSchema: Any (I) <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:any minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> 08/07/2015 Internet - XML 48 XMLSchema: Any (II) <?xml version="1.0" encoding="ISO-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> <xs:element name="children"> <xs:complexType> <xs:sequence> <xs:element name="childname" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 08/07/2015 Internet - XML 49 XMLSchema: Any (y III) Es admisible: <?xml version="1.0" encoding="ISO-8859-1"?> <persons xmlns="http://www.microsoft.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="http://www.microsoft.com family.xsd http://www.w3schools.com children.xsd"> <person> <firstname>Hege</firstname> <lastname>Refsnes</lastname> <children> <childname>Cecilie</childname> </children> </person> <person> <firstname>Stale</firstname> <lastname>Refsnes</lastname> </person> </persons> 08/07/2015 Internet - XML 50 XMLSchema. Otro ejemplo <?xml version="1.0" encoding="UTF-8"?> <book isbn="0836217462"> <title> Being a Dog Is a Full-Time Job </title> <author>Charles M. Schulz</author> <character> <name>Snoopy</name> <friend-of>Peppermint Patty</friend-of> <since>1950-10-04</since> <qualification> extroverted beagle </qualification> </character> <character> <name>Peppermint Patty</name> <since>1966-08-22</since> <qualification>bold, brash and tomboyish</qualification> </character> </book> 08/07/2015 Internet - XML 51 XMLSchema: opción A <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="book"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="author" type="xs:string"/> <xs:element name="character" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="friend-of" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="since" type="xs:date"/> <xs:element name="qualification" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="isbn" type="xs:string"/> </xs:complexType> </xs:element> </xs:schema> 08/07/2015 Internet - XML 52 XMLSchema: opción B (I) <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- definition of simple type elements --> <xs:element name="title" type="xs:string"/> <xs:element name="author" type="xs:string"/> <xs:element name="name" type="xs:string"/> <xs:element name="friend-of" type="xs:string"/> <xs:element name="since" type="xs:date"/> <xs:element name="qualification" type="xs:string"/> <!-- definition of attributes --> <xs:attribute name="isbn" type="xs:string"/> 08/07/2015 Internet - XML 53 XMLSchema: opción B (II) <!-- definition of complex type elements --> <xs:element name="character"> <xs:complexType> <xs:sequence> <xs:element ref="name"/> <xs:element ref="friend-of" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="since"/> <xs:element ref="qualification"/> <!-- the simple type elements are referenced using the "ref" attribute --> <!-- the definition of the cardinality is done when the elements are referenced --> </xs:sequence> </xs:complexType> </xs:element> 08/07/2015 Internet - XML 54 XMLSchema: opción B (y III) <xs:element name="book"> <xs:complexType> <xs:sequence> <xs:element ref="title"/> <xs:element ref="author"/> <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="isbn"/> </xs:complexType> </xs:element> </xs:schema> 08/07/2015 Internet - XML 55 XMLSchema: opción C (I) <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- definition of simple types --> <xs:simpleType name="nameType"> <xs:restriction base="xs:string"> <xs:maxLength value="32"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="sinceType"> <xs:restriction base="xs:date"/> </xs:simpleType> <xs:simpleType name="descType"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:simpleType name="isbnType"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{10}"/> </xs:restriction> </xs:simpleType> 08/07/2015 Internet - XML 56 XMLSchema: opción C (II) <!-- definition of complex types --> <xs:complexType name="characterType"> <xs:sequence> <xs:element name="name" type="nameType"/> <xs:element name="friend-of" type="nameType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="since" type="sinceType"/> <xs:element name="qualification" type="descType"/> </xs:sequence> </xs:complexType> <!-- Reference to "bookType" to define the "book" element --> <xs:element name="book" type="bookType"/> </xs:schema> 08/07/2015 Internet - XML 57 XMLSchema: opción C (y III) <xs:complexType name="bookType"> <xs:sequence> <xs:element name="title" type="nameType"/> <xs:element name="author" type="nameType"/> <xs:element name="character" type="characterType" minOccurs="0"/> <!-- the definition of the "character" element is using the "characterType" complex type --> </xs:sequence> <xs:attribute name="isbn" type="isbnType" use="required"/> </xs:complexType> 08/07/2015 Internet - XML 58 XMLSchema: grupos (I) <!-- definition of an element group --> <xs:group name="mainBookElements"> <xs:sequence> <xs:element name="title" type="nameType"/> <xs:element name="author" type="nameType"/> </xs:sequence> </xs:group> <!-- definition of an attribute group --> <xs:attributeGroup name="bookAttributes"> <xs:attribute name="isbn" type="isbnType" use="required"/> <xs:attribute name="available" type="xs:string"/> </xs:attributeGroup> 08/07/2015 Internet - XML 59 XMLSchema: grupos (y II) <xs:complexType name="bookType"> <xs:sequence> <xs:group ref="mainBookElements"/> <xs:element name="character" type="characterType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attributeGroup ref="bookAttributes"/> </xs:complexType> 08/07/2015 Internet - XML 60 XMLSchema: choice <xs:group name="nameTypes"> <xs:choice> <xs:element name="name" type="xs:string"/> <xs:sequence> <xs:element name="firstName” type="xs:string"/> <xs:element name="middleName” type="xs:string" minOccurs="0"/> <xs:element name="lastName" type="xs:string"/> </xs:sequence> </xs:choice> </xs:group> 08/07/2015 Internet - XML 61 XMLSchema: all (I) <xs:complexType name="bookType"> <xs:all> <xs:element name="title” type="xs:string"/> <xs:element name="author” type="xs:string"/> <xs:element name="character" type="characterType" minOccurs="0" maxOccurs="unbounded"/> </xs:all> <xs:attribute name="isbn” type="isbnType” use="required"/> </xs:complexType> 08/07/2015 Internet - XML 62 XMLSchema: all (y II) Sólo puede aparece como hijo único en el root del modelo de contenidos. Sus hijos sólo pueden ser definiciones xs:element o referencias. No pueden tener cardinalidad mayor que uno. 08/07/2015 Internet - XML 63 XMLSchema: tipos simples Los más comunes: xs:string xs:decimal xs:integer xs:boolean xs:date xs:time 08/07/2015 Internet - XML 64 XMLSchema: derivación de tipos simples (I) <xs:simpleType name="isbnType"> <xs:union> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{10}"/> </xs:restriction> </xs:simpleType> ... 08/07/2015 Internet - XML 65 XMLSchema: derivación de tipos simples (y II) <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="TBD"/> <xs:enumeration value="NA"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> 08/07/2015 Internet - XML 66 XMLSchema: tipos numéricos byte decimal int integer long negativeInteger nonNegativeInteger 08/07/2015 nonPositiveInteger positiveInteger short unsignedLong unsignedInt unsignedShort unsignedByte Internet - XML 67 Bibliografía JavaTM Technology and XML. Part 1 -- An Introduction to APIs for XML Processing. Thierry Violleau. http://www.javasoft.com http://www.w3c.org Professional Java Server Programming, Wrox. http://www.w3schools.com/schema (muy bueno) http://www.w3.org/TR/2001/REC-xmlschema-120010502/ 08/07/2015 Internet - XML 68