Validación de un XML

Documentos relacionados
XML, parte 3. M. en C. Erika Vilches

Unidad 6: DTD. JJ Taboada León IES San Sebastián, Departamento de Informática LENGUAJE DE MARCAS Y SGI Curso 2011 / 2012

XML Schema. Sergio Luján Mora.

XML-Schema. XML-Schema. Espacios de Nombre. W3C XML Schema intenta superar las limitaciones de las DTDs con respecto a ellos

3.1 Tipos de DTDs. ! Si queremos validar un documento XML (para comprobar si cumple las normas de un dialecto) tendremos que validarlo contra el DTD.

Documentación Electrónica

Sistemas de Información 12/13 XML (extensible Mark-up Language)

ESQUEMAS INTRODUCCION A LA VALIDACIÓN DE DOCUMENTOS MEDIANTE ESQUEMAS. 7.3 Partes importantes de los esquemas Repeticiones de elementos

XML. Introducción. Cómo se usa? XML Tree. Sintaxis XML

XML para FP : Introducción

XML Schema. Definición y validación

Fundamentos de las tecnologías de la información

XML-Schema. XML-Schema. XML-Schema. XML-Schema. Ventajas de XML-Schema con respecto a las DTD s:

Introducción a XML - Validación y Parseo. Huibert Aalbers, Senior Certified Software IT Architect

Tecnologías XML Esquemas XML

Estructura. Elementos Elemento: Dividendos Diagrama

Primeros pasos con XML y XSL Ricardo Borillo Domenech

2 Estructura de un Documento XML

Contenido. Complemento Vales de Despensa

Relax NG. Pablo Prol Sobrado Alexandre Ramilo Conde

XML Namespaces. Sergio Luján Mora.

PREGUNTAS TIPO (EXAMEN DE OFIMÁTICA AVANZADA)

XML (Extensible Markup Language)

Realizar un esquema para el almacenamiento de CD musicales con las

Tecnología XML. Unidad: 3 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Visualización y Transformaciones en XML

XML y Bases de datos Modelado de datos XML usando DTDs

Estructura. Elementos Elemento: Retenciones Diagrama

Trabajo Practico Tema: XML

Conceptos SOA: XSD, Estructurando XML Por Medio de Esquemas

Presentacion de Declaraciones Juradas de Retenciones de Sellos. <Cuit> </Cuit> Etiqueta de Apertura

XML: extensible Markup Language (Parte I) Ingeniería de la Información

TRABAJO PRACTICO Nº 1 Formateador de contenidos CSV

Contenido. Complemento Nomina. Estructura

2.3 Declaraciones de listas de atributos para los tipos de elementos... 8

Modelado de datos XML: XML-Schema

Creación de documentos XML

M. Carmen Fernández Panadero

Pista: utilizar el elemento choice.

Requisitos para la generación de Xml válido

SINTAXIS DE LOS XML SCHEMA

XML. Escuela Técnica Superior de Ingeniería de Telecomunicación Universidad Rey Juan Carlos. Marzo de gsyc-profes (arroba) gsyc.urjc.

UF2217 Lenguaje XML (Online)

IPN ESCOM López Martínez Cesar Iván Programación de Sistemas 7CM5 XML. Etiquetas Con Atributos. Bloc de Notas: productos.xml

Estándares SGML y XML. Entornos de aplicación

extensible Markup Language (XML)

Análisis de esquemas XML [1]

Estructura. Elementos Elemento: Intereseshipotecarios Diagrama. Contenido. Complemento de Intereses hipotecarios

APÉNDICE A GML s. A.1 Alemanes. A.1.1 Esquema Feature.xsd. Apéndice A: GML s

Contenido. Complemento de Estado de Cuenta Bancario. Estructura

Documento de Recomendación de Uso de Firma Digital en Comunicación PISEE. Ministerio Secretaría General de la Presidencia

TEMA 35: Estándares SGML y XML. Entornos de aplicación.

Datos Estadísticos y el Lenguaje XML

Transformación de documentos XML con

1 Introducción a XML

Contenido. Formato catálogo de cuentas

Apuntes de Matemática Discreta 1. Conjuntos y Subconjuntos

extensible Markup Language

Práctica 4 Manejo avanzado de Bison

Generación de DTD para archivos XML utilizando una gramática visual relacional

BOLETÍN OFICIAL DEL ESTADO

LENGUAJE DE MARCAS Y SISTEMAS DE GESTIÓN DE LA INFORMACIÓN - XML

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

XML y XQuery. Qué es XML? Qué es XML? (II) Ejemplo de fichero XML. Cuerpo de un documento XML. Estructura de un documento XML

Listados y Etiquetas personalizados de PrefGest WhitePaper Julio 2008

Definición de XQuery.

índice (1) (2.1) documentos XML bien formados y validación 7 (2.2) validación por DTD 8 (2.3) Validación por XML Schema 22

Recepción de Documento Electrónico

DTD y XML SCHEMA. Ingeniería de la Información

Guía de auto-aprendizaje en SDMX n. 3 Mensajes SDMX-ML Test

Dominios y Subtipos en Geodatabase

Recomendaciones para procesos de integración con Web-Services

Ciclo Formativo de Grado Superior de Administración de Sistemas Informáticos en red

MANUAL COPIAS DE SEGURIDAD

<xs:import namespace=" schemalocation="

Servicio común de consulta por CSV para aplicaciones productoras

TEMA 7: DIAGRAMAS EN UML

Diagramas del UML. A continuación se describirán los diagramas más comunes del UML y los conceptos que representan: Diagrama de Clases

Creación y administración de grupos de dominio

Gestión de acciones vía HTTP Action XML API

LAS BARRAS. La barra de acceso rápido

Estándar Publicación Addendas. Enero 2014

Comente: Los bancos siempre deberían dar crédito a los proyectos rentables. Falso, hay que evaluar la capacidad de pago.

Fuente: e_catalogocuentas.pdf

Primeros pasos con XML y XSL

Figura 4.1 Clasificación de los lenguajes de bases de datos

Manual de usuario Componente AddIn Contabilidad Electrónica Mayo 2015

Ingeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007

Qué es XML? XML (extensible Markup Language) Lenguaje de tags (similar en sintaxis a HTML) Estandarizado por el W3C (

Instrucciones para la familiarización de los alumnos con el instrumento de evaluación de EECL (ES)

Transcripción:

Validación de un XML 32

Introducción Se dice que un XML está bien formado cuando esta escrito sintácticamente de forma correcta Como se puede validar sintácticamente un XML? Document Type Definition (DTD) XML Schema Definition (XSD) 33

DTD Como validar un XML si no hay tags predefinidos? DTD <?xml version="1.0"?> <! DOCTYPE nota SYSTEM nota.dtd > <nota> <de>juan</de> <para>pedro</para> <asunto>créditos asignatura XML</asunto> <mensaje>son 4 créditos</mensaje> </nota> Declaración en un archivo externo 34

DTD nota.dtd <!DOCTYPE nota [ <!ELEMENT nota (de,para,asunto,mensaje)> <!ELEMENT de (#PCDATA)> <!ELEMENT para (#PCDATA)> <!ELEMENT asunto (#PCDATA)> <!ELEMENT mensaje (#PCDATA)> ]> PCDATA = Parsed Character Data PCDATA es parseada CDATA = Character Data, no se toma en cuenta para parseo 35

DTD <?xml version="1.0"?> <!DOCTYPE nota [ <!ELEMENT nota (de,para,asunto,mensaje)> <!ELEMENT de (#PCDATA)> <!ELEMENT para (#PCDATA)> <!ELEMENT asunto (#PCDATA)> <!ELEMENT mensaje (#PCDATA)> ]> <nota> <de>juan</de> <para>pedro</para> <asunto>créditos asignatura XML</asunto> <mensaje>son 4 créditos</mensaje> </nota> Declaración en el mismo XML 36

DTD De esta forma un DTD determina la estructura y que tendrá un XML Define los tags validos y como se ramifican Define los atributos validos de cada tag Cuantifica Atributos Elementos 37

Nomenclatura DTD Elementos <!ELEMENT nombredelelemento categoría> ANY Pueden contener cualquier combinación de texto parseable EMPTY Para definir elementos vacíos» <!ELEMENT br EMPTY> <br/> <!ELEMENT nombredelelemento (#PCDATA)> Elementos que tienen texto parseable <!ELEMENT de (#PCDATA)>» <de>juan</de> 38

Nomenclatura DTD Elementos <!ELEMENT nombredelelemento (hijo1,hijo2,...)> Elementos que tienen otros elementos <!ELEMENT nota (de,para,asunto,mensaje)>» <nota> <de>juan</de> <para>pedro</para> <asunto>créditos asignatura XML</asunto> <mensaje>son 4 créditos</mensaje> </nota> Aca los hijos deben aparecer en el mismo orden que aparecen en la secuencia dentro de ( ) 39

Nomenclatura DTD Cuantificaciones en elementos <!ELEMENT nombredelelemento (hijo)> El hijo aparece 1 sola vez dentro del elemento <!ELEMENT prueba (hijodeprueba)>» <prueba> </prueba>» <prueba> <hijodeprueba> </hijodeprueba> </prueba>» <prueba> <hijodeprueba> </hijodeprueba> <hijodeprueba> </hijodeprueba> </prueba> 40

Nomenclatura DTD Cuantificaciones en elementos <!ELEMENT nombredelelemento (hijo)+> El hijo aparece al menos 1 vez dentro del elemento <!ELEMENT prueba (hijodeprueba)+>» <prueba> </prueba>» <prueba> <hijodeprueba> </hijodeprueba> </prueba>» <prueba> <hijodeprueba> </hijodeprueba> <hijodeprueba> </hijodeprueba> </prueba> 41

Nomenclatura DTD Cuantificaciones en elementos <!ELEMENT nombredelelemento (hijo)*> El hijo pude aparecer 0 o mas veces <!ELEMENT prueba (hijodeprueba)*>» <prueba> </prueba>» <prueba> <hijodeprueba> </hijodeprueba> </prueba>» <prueba> <hijodeprueba> </hijodeprueba> <hijodeprueba> </hijodeprueba> </prueba> 42

Nomenclatura DTD Cuantificaciones en elementos <!ELEMENT nombredelelemento (hijo)?> El hijo pude aparecer o no, pero si aparece 1 única vez <!ELEMENT prueba (hijodeprueba)?>» <prueba> </prueba>» <prueba> <hijodeprueba> </hijodeprueba> </prueba>» <prueba> <hijodeprueba> </hijodeprueba> <hijodeprueba> </hijodeprueba> </prueba> 43

Nomenclatura DTD Cuantificaciones en elementos <!ELEMENT nombredelelemento (hijo1 hijo2)?> El contenido del elemento puede ser tanto hijo1 como hijo2, pero no los 2 a la vez <!ELEMENT prueba (hijodeprueba1,(hijodeprueba2 hijodeprueba3))>» <prueba> </prueba>» <prueba> <hijodeprueba1> </hijodeprueba1> </prueba>» <prueba> <hijodeprueba1> </hijodeprueba1> <hijodeprueba2> </hijodeprueba2> </prueba>» <prueba> <hijodeprueba1> </hijodeprueba1> <hijodeprueba3> </hijodeprueba3> </prueba>» <prueba> <hijodeprueba2> </hijodeprueba2> <hijodeprueba3> </hijodeprueba3> </prueba> 44

Nomenclatura DTD Mezcla de cuantificadores para elementos <!ELEMENT nombredelelemento (hijo1 (hijo2)*)?> El contenido del elemento puede ser solo hijo1, vacío, o muchas veces hijo2 <!ELEMENT nombredelelemento (hijo1 (hijo2)?)* > El contenido del elemento puede ser solo vacío, muchas veces hijo1, muchas veces hijo1, muchas veces hijo2, combinaciones entre hijo1 e hijo2 Es valido? Tiene sentido? 45

Nomenclatura DTD Los atributos son declarados con ATTRLIST <!ATTLIST nombredelelemento nombredelatributo tipodelatributo valordelatributo> <!ATTLIST pago hecho CDATA abonado"> <pago hecho= abonado" /> 46

Nomenclatura DTD Atributos tipodelatributo CDATA El valor es una cadena de caracteres (val1,val2) El valor debe ser uno de la lista de enumerados ID El valor es un ID único IDREF El valor es el ID de otro elemento IDREFS El valor es una lista de otros IDs 47

Nomenclatura DTD Atributos tipodelatributo NMTOKEN El valor debe comenzar con una letra, un dígito, '.', '-', '_', o ': y no contener espacios NMTOKENS El valor es una lista de NMTOKEN separados por espacios ENTITY El valor es una entidad (definida en el DTD) ENTITIES El valor es una lista de ENTITY separada por espacios 48

Nomenclatura DTD Atributos tipodelatributo NOTATION El valor es el nombre de una notación» <!NOTATION vrml PUBLIC "VRML 1.0"> <!ATTLIST code lang NOTATION (vrml) #REQUIRED> <code lang="vrml">some VRML instructions</code> Xml: El valor es un valor XML predefinido» <!ATTLIST description xml:lang NMTOKEN #FIXED "en"> <description xml:lang="en"> 49

Nomenclatura DTD Atributos valordelatributo valor El valor por defecto de un atributo» DTD: <!ELEMENT square EMPTY> <!ATTLIST square width CDATA "0">» XML: <square width="100" /> #REQUIRED Calificador que indica que el atributo es requerido» <!ATTLIST nombredelelemento nombredelatributo tipodelatributo #REQUIRED> DTD: <!ATTLIST person number CDATA #REQUIRED> <person number="5677" /> <person /> 50

Nomenclatura DTD Atributos valordelatributo #IMPLIED Calificador que indica que el atributo no es requerido» <!ATTLIST nombredelelemento nombredelatributo tipodelatributo #IMPLIED>» DTD: <!ATTLIST contact fax CDATA #IMPLIED>» <contact fax="555-667788" />» <contact /> 51

Nomenclatura DTD Atributos valordelatributo #FIXED value Calificador que indica que el valor es fijo» <!ATTLIST nombredelelemento nombredelatributo tipodelatributo #FIXED "value"> DTD: <!ATTLIST sender company CDATA #FIXED "Microsoft"> <sender company="microsoft" /> <sender company= UTU" /> 52

Nomenclatura DTD Atributos Enumerados <!ATTLIST nombredelelemento nombredelatributo (en1 en2..) valorpordefecto> DTD: <!ATTLIST payment type (check cash) "cash"> <payment type="check" /> <payment type="cash" /> 53

Nomenclatura DTD ENTITY Las entidades se utilizan como placeholders <!ENTITY nombredelaentidad valordelaentidad"> DTD: <!ENTITY writer Bugs Bunny "> <!ENTITY copyright "Copyright 2013."> <author>&writer;&copyright;</author> Eq. <author>bugs Bunny Copyright 2013.</author> 54

Nomenclatura DTD ENTITY Una entidad también se puede definir en otro archivo DTD <!ENTITY nombredelaentidad SYSTEM "URI/URL"> DTD <!ENTITY writer SYSTEM "http://www.utu.edu.uy/entities.dtd"> <!ENTITY copyright SYSTEM "http://www.fing.edu.uy/entities.dtd"> 55

XSD XML Schema Definition Alternativa a DTD <?xml version="1.0"?> <nota xmlns:xsi="http://www.w3.org/2001/xmlschemainstance" xsi:nonamespaceschemalocation="nota.xsd"> <de>juan</de> <para>pedro</para> <asunto>créditos asignatura XML</asunto> <mensaje>son 4 créditos</mensaje> </nota> 56

XSD nota.xsd <xs:element name="nota"> <xs:complextype> <xs:sequence> <xs:element name="e" type="xs:string"/> <xs:element name="para" type="xs:string"/> <xs:element name="asunto" type="xs:string"/> <xs:element name="mensaje" type="xs:string"/> </xs:sequence> </xs:complextype> </xs:element> 57

XSD Sucesor de DTD Extensible Mayor riqueza expresiva que DTD Soporte a Tipos de datos Namespaces Definidos en un XML No hay que aprender un nuevo lenguaje 58

Nomenclatura XSD El nodo raíz en un XSD es el elemento <schema> con algunos atributos <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema targetnamespace="http://www.utu.edu.uy" xmlns="http://www.utu.edu.uy" elementformdefault="qualified">...... </xs:schema> 59

Nomenclatura XSD xmlns:xs= http://www.w3.org/2001/xmlschema Significa que los elementos y tipos utilizados en este xsd provienen del namespace especificado y que todos estos estarán prefijados con xs: targetnamespace="http://www.utu.edu.uy" Significa que todos los elementos definidos en este xsd provienen del namespace especificado xmlns="http://www.utu.edu.uy" Indica que el namespace por defecto es el especificado elementformdefault="qualified"> Indica que los elementos utilizados en este XSD deben ser calificados con su namespace 60

Nomenclatura XSD Elemento simple Elemento primitivo <xs:element name= nombredelelemento" type= tipodelelemento"/> Tipos mas comunes para poner en tipodelelemento xs:string xs:decimal xs:integer xs:boolean xs:date xs:time Ejemplo <mesa>4 patas</mesa> <xs:element name= mesa type= xs:string /> 61

Nomenclatura XSD Elemento simple Los elementos simples pueden tener un valor por defecto <xs:element name="color" type="xs:string" default= rojo"/> Si no se especifica ningún valor, entonces se asume rojo O un valor fijo <xs:element name="color" type="xs:string" fixed= rojo"/> No se puede especificar otro mas que rojo 62

Nomenclatura XSD Atributos Los atributos son declarados como tipos simples Los elementos simples, no tienen atributos, en caso de que los tengan, pasan a ser elementos complejos <xs:attribute name= nombredelatributo" type= tipodelatributo"/> Tipos mas comunes para poner en tipodelatributo xs:string xs:decimal xs:integer xs:boolean xs:date xs:time 63

Nomenclatura XSD Atributos Ejemplo <apellido lang="en">perez</apellido> <xs:attribute name="lang" type="xs:string"/> Los atributos como los elementos simples, pueden tener un valor por defecto <xs:attribute name="lang" type="xs:string" default="en"/> O un valor fijo <xs:attribute name="lang" type="xs:string" fixed="en"/> 64

Nomenclatura XSD Atributos Los atributos, por defecto, son opcionales Para especificar que un atributo es requerido <xs:attribute name="lang" type="xs:string" use="required"/> 65

Nomenclatura XSD Restricciones Se utilizan para definir valores validos para elementos o atributos Ejemplo valor comprendido: <xs:element name="age"> <xs:simpletype> <xs:restriction base="xs:integer"> <xs:mininclusive value="0" /> <xs:maxinclusive value="120" /> </xs:restriction> </xs:simpletype> </xs:element> Define que la edad debe estar entre 0 y 120 66

Nomenclatura XSD Restricciones Ejemplo valor enumerado: <xs:element name= car"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:enumeration value= Audi" /> <xs:enumeration value= Ford" /> <xs:enumeration value= Nissan" /> </xs:restriction> </xs:simpletype> </xs:element> Define que los valores posibles para el elemento auto son: Audi, Ford o Nissan 67

Nomenclatura XSD Restricciones Ejemplo patrón: <xs:element name= iniciales"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:pattern value= [A-Z] [A-Z] [A-Z]" /> </xs:restriction> </xs:simpletype> </xs:element> Define que las iniciales de una persona deben ser siempre 3 letras en mayusculas, comprendidas entre la A y la Z 68

Nomenclatura XSD Restricciones Ejemplo patrón + exp. regulares: <xs:element name= carta"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:pattern value= (a-z)*" /> </xs:restriction> </xs:simpletype> </xs:element> Define que el contenido de una carta son caracteres de la a a la z cuantas veces sean necesarios 69

Nomenclatura XSD Restricciones Ejemplo patrón + exp. regulares: ( )+ male female ( ){8} 70

Nomenclatura XSD Restricciones Caracteres en blanco: Se quieren mantener <xs:element name= direccion"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:whitespace value= preserve" /> </xs:restriction> </xs:simpletype> </xs:element> 71

Nomenclatura XSD Restricciones Caracteres en blanco, CR, LF, TAB: Se quieren remplazar por espacios <xs:element name= direccion"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:whitespace value= replace" /> </xs:restriction> </xs:simpletype> </xs:element> 72

Nomenclatura XSD Restricciones Caracteres en blanco, CR, LF, TAB: Se quieren comprimir <xs:element name= direccion"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:whitespace value= collapse" /> </xs:restriction> </xs:simpletype> </xs:element> LF, CR, TAB son remplazados por espacios Los primeros y últimos espacios (antes y después de la primer y ultima palabra) son eliminados Múltiples espacios contiguos son colapsados a 1 único espacio 73

Nomenclatura XSD Restricciones Largos: Ejemplo <xs:element name= nombre"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:length value= 8" /> </xs:restriction> </xs:simpletype> </xs:element> El nombre de una persona no puede superar los 8 caracteres 74

Nomenclatura XSD Restricciones Largos: Ejemplo <xs:element name= nombre"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:minlength value= 8" /> <xs:maxlength value= 16" /> </xs:restriction> </xs:simpletype> </xs:element> El nombre de una persona no puede ser menor a 8 caracteres ni mayor a 16 75

Nomenclatura XSD Elementos complejos Es un elemento que contiene otros elementos y/o atributos Hay 4 tipos de elementos complejos Elementos vacíos <br/> Elementos que contienen otros elementos <nota><de>juan</de></nota> Elementos que contienen solo texto <de>juan</de> Elementos que contienen texto y otros elementos <valido>esto es un <elemento/> que es valido</valido> 76

Nomenclatura XSD Elementos complejos Como se definen? <xs:element name="empleado"> <xs:complextype> <xs:sequence> <xs:element name="apellido" type="xs:string" /> <xs:element name="nombre" type="xs:string" /> </xs:sequence> </xs:complextype> </xs:element> El elemento <xs:sequence> indica que los elementos apellido y nombre deben aparecer en ese orden 77

Nomenclatura XSD Elementos complejos Se pueden definir así también: <xs:element name="empleado" type="personinfo" /> <xs:complextype name="personinfo"> <xs:sequence> <xs:element name="apellido" type="xs:string" /> <xs:element name="nombre" type="xs:string" /> </xs:sequence> </xs:complextype> Ventajas? 78

Nomenclatura XSD Elementos complejos También se puede tomar como base (extender) otro elemento complejo para agregarle mas elementos <xs:element name="employee" type="fullpersoninfo" /> <xs:complextype name="personinfo"> <xs:sequence> <xs:element name="apellido" type="xs:string" /> <xs:element name="nombre" type="xs:string" /> </xs:sequence> </xs:complextype> <xs:complextype name="fullpersoninfo"> <xs:complexcontent> <xs:extension base="personinfo"> <xs:sequence> <xs:element name="direccion" type="xs:string" /> <xs:element name="ciudad" type="xs:string" /> <xs:element name="pais" type="xs:string" /> </xs:sequence> </xs:extension> </xs:complexcontent> </xs:complextype> 79

Nomenclatura XSD Elementos complejos vacíos Sólo pueden tener atributos <product prodid="1345" /> <xs:element name="producto"> <xs:complextype> <xs:attribute name="prodid" type="xs:positiveinteger"/> </xs:complextype> </xs:element> 80

Nomenclatura XSD Elementos complejos que solo contienen elementos <person> <firstname>john</firstname> <lastname>smith</lastname> </person> <xs:element name="person"> <xs:complextype> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:sequence> </xs:complextype> </xs:element> 81

Nomenclatura XSD Elementos complejos que solo contienen elementos <person> <firstname>john</firstname> <lastname>smith</lastname> </person> xs:sequence indica que los elementos firsname y lastname deben aparecer en ese orden <xs:element name="person"> <xs:complextype> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:sequence> </xs:complextype> </xs:element> 82

Nomenclatura XSD Otra forma de definir lo mismo <xs:element name="person" type="persontype" /> <xs:complextype name="persontype"> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:sequence> </xs:complextype> Ventajas/Desventajas? 83

Nomenclatura XSD Ventaja <xs:element name= empleado" type="persontype" /> <xs:element name= gerente" type="persontype" /> <xs:complextype name="persontype"> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:sequence> </xs:complextype> 84

Nomenclatura XSD Elementos complejos de contenido simple Solo tienen atributos y texto <xs:element name= algunnombre"> <xs:complextype> <xs:simplecontent> <xs:extension base= tipobase">... </xs:extension> </xs:simplecontent> </xs:complextype> </xs:element> O <xs:element name= algunnombre"> <xs:complextype> <xs:simplecontent> <xs:restriction base=" tipobase ">... </xs:restriction> </xs:simplecontent> </xs:complextype> </xs:element> 85

Nomenclatura XSD Ejemplo de elemento complejo de contenido simple <shoesize country="france">35</shoesize> <xs:element name="shoesize"> <xs:complextype> <xs:simplecontent> <xs:extension base="xs:integer"> <xs:attribute name="country" type="xs:string" /> </xs:extension> </xs:simplecontent> </xs:complextype> </xs:element> 86

Nomenclatura XSD Elementos complejos de contenido mixto Pueden contener atributos, texto u otros elementos <letter> Dear Mr. <name>john Smith</name>. Your order <orderid>1032</orderid> will be shipped on <shipdate>2001-07-13</shipdate>. </letter> 87

Nomenclatura XSD XSD para el elemento complejo de contenido mixto letter <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> 88

Indicadores en XSD Para controlar como se utilizan los elementos en un XML se utilizan 7 tipos de indicadores De orden All Choice Sequence De ocurrencia maxoccurrs minoccurrs De grupo Group name attributegroup name 89

Indicadores de orden Se utilizan para definir el orden de los elementos All Los elementos agrupados bajo este indicador pueden aparecer en cualquier orden, pero deben aparecer como máximo 1 vez <xs:element name="person"> <xs:complextype> <xs:all> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:all> </xs:complextype> </xs:element> 90

Indicadores de orden Choice Especifica que puede ocurrir un elemento u otro <xs:element name="person"> <xs:complextype> <xs:choice> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:choice> </xs:complextype> </xs:element> 91

Indicadores de orden Choice Especifica que puede ocurrir un elemento u otro <xs:element name="person"> <xs:complextype> <xs:choice> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:choice> </xs:complextype> </xs:element> 92

Indicadores de orden Sequence Los elementos deben aparecer en el orden especificado <xs:element name="person"> <xs:complextype> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:sequence> </xs:complextype> </xs:element> 93

Indicadores de orden Sequence Los elementos deben aparecer en el orden especificado <xs:element name="person"> <xs:complextype> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:sequence> </xs:complextype> </xs:element> 94

Indicadores de ocurrencia Definen cuantificaciones sobre las ocurrencias de los elementos Para todos los indicadores de orden y de grupo, el valor por defecto de maxoccurs y minoccurs es 1 maxoccurs Especifica cuantas veces como máximo puede aparecer un elemento minoccurs Especifica cuantas veces como mínimo debe aparecer un elemento 95

Indicadores de ocurrencia Ejemplo <xs:element name="person"> <xs:complextype> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> <xs:element name="childname" type="xs:string" maxoccurs="10" /> <xs:element name="parentname" type="xs:string" minoccurs="2" maxoccurs="2" /> <xs:element name="age" type="xs:int" minoccurs="0"/> </xs:sequence> </xs:complextype> </xs:element> 96

Indicadores de ocurrencia Como hacer para que un elemento pueda aparecer infinitas veces maxoccurs= unbounded 97

Indicadores de grupo Definen elementos que están relacionados <xs:group name="nombredelgrupo">...</xs:group> Dentro de un grupo se debe definir o un indicador de orden (all, choice, sequence) Ejemplo <xs:group name="persongroup"> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> <xs:element name="birthday" type="xs:date" /> </xs:sequence> </xs:group> 98

Indicadores de grupo Para que sirven los grupos? Una vez definidos, se pueden referenciar <xs:element name="person" type="personinfo" /> <xs:complextype name="personinfo"> <xs:sequence> <xs:group ref="persongroup" /> <xs:element name="country" type="xs:string" /> </xs:sequence> </xs:complextype> 99

Indicadores de grupo Además de los grupos de elementos, existen también los grupos de atributos <xs:attributegroup name="nombredelgrupo">...</xs:attributegroup> Ejemplo <xs:attributegroup name="personattrgroup"> <xs:attribute name="firstname" type="xs:string" /> <xs:attribute name="lastname" type="xs:string" /> <xs:attribute name="birthday" type="xs:date" /> </xs:attributegroup> 100

Indicadores de grupo Para que se usan los grupos de atributos? También para referenciarlos <xs:element name="person"> <xs:complextype> <xs:attributegroup ref="personattrgroup" /> </xs:complextype> </xs:element> 101

Elemento <any> El elmento <any> permite extender un documento XML con elementos que no aparecen en el XSD <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> 102

Elemento <any> <person> <firstname>juan</firstname> <lastname>perez</lastname> <children> <childname>cecilia</childname> </children> </person> <xs:any> definido en <person> 103

Elemento <anyattribute> El elmento <anyattribute> es el analogo al <any> pero aplica a atributos <xs:element name="person"> <xs:complextype> <xs:sequence> <xs:element name="firstname" type="xs:string" /> <xs:element name="lastname" type="xs:string" /> </xs:sequence> <xs:anyattribute /> </xs:complextype> </xs:element> 104

Elemento <anyattribute> <person gender="male"> <firstname>claudia</firstname> <lastname>suarez</lastname> </person> <xs:anyattribute> definido en <person> 105