SINTAXIS DE LOS XML SCHEMA



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

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

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

Modelado de datos XML: XML-Schema

Validación de un XML

Análisis de esquemas XML [1]

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

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

Realizar un esquema para el almacenamiento de CD musicales con las

Creación de documentos XML

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Contenido. Complemento Vales de Despensa

Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech

XML para FP : Introducción

XML Schema. Sergio Luján Mora.

UTILIZACION DE ESQUEMAS XML DE LA AGENCIA TRIBUTARIA PARA CALCULO RETENCIONES

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

XML Schema. Definición y validación

XML Namespaces. Sergio Luján Mora.

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

Estructura. Elementos Elemento: Dividendos Diagrama

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.

TABLA DE CONTENIDO LISTA DE FIGURAS

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

INSTRUCTIVO DEL COMANDO MAKE

Práctica 4 Manejo avanzado de Bison

Modulo 1 El lenguaje Java

DIRECCIONAMIENTO IPv4

Listados y Etiquetas personalizados de PrefGest WhitePaper Julio 2008

CÓMO CREAR NUESTRO CATÁLOGO

Para crear formularios se utiliza la barra de herramientas Formulario, que se activa a través del comando Ver barra de herramientas.

EDWIN KÄMMERER ORCASITA INGENIERO ELECTRÓNICO

Plantilla de texto plano

La ventana de Microsoft Excel

Hoja1!C4. Hoja1!$C$4. Fila

BANCOS. Manejo de Bancos. Como crear una ficha de Banco? Como modificar los datos de una ficha de Banco? Como borrar una ficha de Banco?

Proceso de Gestión de la Información Sectorial. Manual de Usuario - Herramienta de cargue de Archivos - SIUST. Elaborado por:

Centro de Capacitación en Informática

VAST: Manual de usuario. Autores: Francisco J. Almeida-Martínez Jaime Urquiza-Fuentes

Instrucción IrA (GoTo). Saltos no naturales en el flujo normal de un programa. Pseudocódigo y diagramas de flujo. (CU00182A)

RESOLUCIÓN DE ERRORES EN MOODLE CAMPUS VIRTUAL-BIRTUALA UPV-EHU

Índice general de materias LECCIÓN 7 74

Manual Usuario Wordpress. Índice

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Instructivo de Microsoft Excel 2003

Fundamentos de las tecnologías de la información

Tema 2 : Códigos Binarios

Contenido. Formato catálogo de cuentas

MATERIAL 2 EXCEL 2007

Combinar comentarios y cambios de varios documentos en un documento

Requisitos para la generación de Xml válido

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

Estructura. Elementos Elemento: Retenciones Diagrama

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

PrefDataImporter Manual de Usuario Noviembre de 2013

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Comercial Cartas de Fidelización

3.2 Operaciones aritmético-lógicas en Pascal

LAS BARRAS. La barra de acceso rápido

extensible Markup Language (XML)

TEMA 3: EN QUÉ CONSISTE?

Definición de XQuery.

EDICIÓN Y FORMATO (II)

A continuación en la figura D.1 se verá el código de una implementación del archivo struts-config.xml:

Creación de Funciones de Conducción

Universidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS

Transformación de documentos XML con

PROPUESTAS COMERCIALES

En la actualidad ASCII es un código de 8 bits, también conocido como ASCII extendido, que aumenta su capacidad con 128 caracteres adicionales

Instalación del programa PSPP y obtención de una distribución de frecuencias.

INVENTARIO INTRODUCCIÓN RESUMEN DE PASOS

Gestión de usuarios en la web educativa del centro con JOOMLA!

TALLER No.1 AUDITORÍA A CUENTAS POR COBRAR DE COMFAPOPAYAN UTILIZANDO SOFTWARE DE AUDITORÍA - IDEA.

GENERAR DOCUMENTOS HTML USANDO LENGUAJE PHP. EJERCICIO RESUELTO EJEMPLO SENCILLO. (CU00733B)

- Access es un gestor de bases de datos relacionales gráfico e interactivo.

Manual del Profesor Campus Virtual UNIVO

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

MACROS Y FORMULARIOS

Servicios de Formación:

COMO HACER UN CUMENTO DE WORD PARA TRABAJOS LARES

El proceso de edición digital en Artelope y CTCE

Manual para Empresas Prácticas Curriculares

Inteligencia Artificial II. Razonamiento con ontologías

TEMA 7: DIAGRAMAS EN UML

Programación: QBASIC

Funciones en Excel (II)

Práctica de introducción a

MANUAL DE AYUDA MÓDULO GOTELGEST.NET PREVENTA/AUTOVENTA

XML. Necesitamos un formato de datos: Posibles usos. Estandard Robusto Extensible

Imágenes y objetos IMÁGENES

Instituto Mar de Cortés Elaborar Documentos en Procesador de Texto

Región de Murcia Consejería de Educación, Ciencia e Investigación. Manual Usuario FCT

Introducción a la programación orientada a objetos

BOLETÍN OFICIAL DEL ESTADO

Programa Presupuestos de Sevillana de Informática.

Manual de operación Radix Spot Manager v3

Descripción técnica del Servicio Web para el envío de los datos de la Encuesta de Ocupación en Apartamentos Turísticos del Instituto Nacional de

Transcripción:

SINTAXIS DE LOS XML SCHEMA

Introducción Qué es XML Schema: es un conjunto de reglas que sirve para forzar la estructura y las restricciones de los contenidos de los documentos XML de una forma muy precisa es un documento XML con un vocabulario especializado Ventajas con respecto a los documentos DTD : se basa en XML y no en una sintaxis especializada puede ser analizado sintácticamente y manipulado como cualquier otro documento XML se pueden combinar distintos esquemas fácilmente soporta más tipos de datos que tienen una analogía directa con lenguajes de programación y Bases de Datos (string, int, float, boolean, date,...) en los DTD no se puede forzar el orden y la cantidad de elementos hijos soporta integración con los espacios de nombres (Name Space) ESPACIOS DE NOMBRES : permiten escribir esquemas y validar documentos que usan elementos y atributos de múltiples vocabularios XML. Se utilizan los espacios de nombres para evitar conflictos entre nombres de elementos o nombres de atributos con igual nombre, pero significado distinto.

ESTRUCTURA DE UN ESQUEMA (1) titulo.xsd <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema elementformdefault="qualified"> <xsd:element name= TITULO type= xsd:string /> </xsd:schema> **************************************************** <xsd:schema> este elemento se utiliza como elemento raíz del documento y actúa como contenedor del resto del contenido del esquema xmlns:xsd todos los elementos en el esquema tienen el prefijo xsd:, el cual está asociado al espacio de nombre del XML Schema a través de la declaración xmlns:xsd Atributo elementformdefaut: qualified : los elementos de un documento XML instancia de un esquema deberán ir todos precedidos de un prefijo del namespace (a menos que haya namespace por defecto) unqualified : sólo llevará prefijo el elemento raíz, y los elementos hijo lo herederán (salvo que se les indique expresamente otro prefijo) Atributo attributeformdefault: unqualified : en los atributos no hace falta indicar un prefijo (salvo que difiera del del elemento en el que se encuadran), ya que su namespace será el mismo del elemento. qualified : en los atributos se debe incluir siempre el prefijo del namespace. los prefijos xsd: o xs: son usados por convención para denotar el espacio de nombre del XML Schema, aunque cualquier otro prefijo podría ser usado

ESTRUCTURA DE UN ESQUEMA (2) Definir un namespace por defecto para un elemento nos evita tener que usar prefijos en todos los elementos hijo. La sintaxis es: <xmlns="namespaceuri">. Hay dos formas distintas de declarar espacios de nombres: declaración explícita se declara con un prefijo, y todos los nombres de elementos y atributos que estén asociados con el espacio de nombre deberán utilizar el prefijo como parte de sus nombres cualificados resultan útiles cuando se quiere crear un documento que se apoya en múltiples espacios de nombre declaración predeterminada (namespace por defecto) se declara sin un prefijo, y se hace referencia a todos los nombres de atributos y elementos que haya en su ámbito con nombres no cualificados, y se presupone que estos se encuentran en el espacio de nombre Los prefijos no tienen que coincidir en el Schema en y los documentos instancia, sólo tienen que coincidir los espacios de nombres a los que se refieren. De hecho, uno podría usar prefijos y el otro podría usar el espacio de nombres por defecto. Sólo los elementos del nivel más alto de un esquema pueden ser los elementos raíz de los documentos instancia de un esquema, aunque en general no tienen por qué ser el elemento raíz.

DECLARACION DE UN ESQUEMA Hay dos maneras de declarar un esquema en un documento XML instancia de un esquema: A) Si se quiere que los elementos del documentos instancia referencien a un único esquema <?xml version="1.0"?> <TITULO xsi:nonamespaceschemalocation= http://igae.pap.meh.es/xml/titulo.xsd" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> CURSO XML </TITULO> B) Si se quiere que los elementos del documento instancia puedan referenciar a uno o varios espacios de nombres <?xml version="1.0"?> <TITULO xmlns= http://igae.pap.meh.es/xml/titulo " xmlns:xsi="http://www.w3.org/2001/xmlschema-instance xsi:schemalocation= http://igae.pap.meh.es/xml/titulo http://igae.pap.meh.es/xml/titulo.xsd > CURSO XML </TITULO> El elemento raíz sólo puede tener un atributo xsi:schemalocation, y por tanto si hubiera varios espacios de nombres en el esquema, en ese atributo se recogerían todas las parejas URI_del espacio_de_nombre / URL (los dos componentes de la pareja se separan con un espacio en blanco, al igual que las parejas). En el caso B, es necesario que el fichero.xsd del esquema defina un espacio de nombre destino mediante targetnamespace <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema xmlns= http://igae.pap.meh.es/xml/titulo targetnamespace= http://igae.pap.meh.es/xml/titulo elementformdefault="qualified"> El atributo targetnamespace (que es una URI) permite especificar el espacio de nombres para el cual un esquema define componentes. Hay que declarar en el esquema un espacio de nombres igual que el valor del atributo targetnamespace del esquema, con o sin prefijo, según se quiera o no anteponer éste a los tag de xml.

COMPOSICION DE ESQUEMAS Si la mayoría de la información que se necesita en un esquema ya está contenida en otro fichero XSD, no tiene sentido duplicarla en el resto de ficheros que la usen, ya que además se producirían problemas cuando haya que modificar una parte de un esquema que se repita en otros. Para importar un fichero de esquema XSD en otro fichero se utiliza el elemento <include>, si ambos ficheros tienen el mismo espacio de nombres de destino : <include schemalocation= ficheroejemplo.xsd /> Para importar un fichero de esquema XSD, con un espacio de nombres de destino diferente, en otro fichero XSD, se usa el elemento <import>: <import namespace= espacio_de_nombres" schemalocation= URI_del_esquema_XSD"/> El atributo namespace es opcional. Indica que el documento de esquema contenedor puede contener referencias completas a los componentes del esquema en el espacio de nombres (a través de uno o varios prefijos declarados con atributos xmlns). Si falta este atributo, el esquema en el que está contenido puede incluir referencias sin cualificar a componentes del espacio de nombres importado.

TIPOS DE ELEMENTOS DECLARACION DE UN ELEMENTO : <xsd:element name="nombreelemento" type="tiposimple/tipocompuesto" minoccurs="valor" maxoccurs="valor"/> El valor por defecto de minoccurs y maxoccurs es 1 Tipos simples y tipos complejos tipos complejos : pueden contener elementos, atributos y texto los elementos se declaran utilizando el elemento <xsd:element> los atributos se declaran utilizando el elemento <xsd:attribute> se definen utilizando el elemento <xsd:complextype> este elemento puede tener los siguientes subelementos <xsd:sequence>, <xsd:choice>, <xsd:all> tipos simples : no contienen elementos ni atributos sólo contienen texto estos son algunos de los tipos simples más comunes xsd:string, xsd:integer, xsd:positiveinteger, xsd:int, xsd:long, xsd:short, xsd:decimal, xsd:float, xsd:double, xsd:boolean, xsd:time, xsd:date,...

ELEMENTOS GLOBALES (1) Para facilitar la legibilidad de los XML Schemas y reutilizar definiciones de otros esquemas, nos puede ser útil crear un elemento global, y hacer referencias al mismo. Los elementos globales son elementos que son hijos inmediatos del elemento schema. Los elementos locales son elementos anidados dentro de otros elementos. Un elemento global : tiene que estar declarado como un subelemento del elemento <xsd:schema>, pero nunca como parte de un elemento de tipo complejo no puede contener referencias es decir no pueden albergar el atributo ref no pude indicar el número de ocurrencias que tiene que aparecer un elemento Esta es la sintaxis de una declaración local que hace referencia a un elemento global <xsd:element ref="nombreelementoglobalyaexistente" minoccurs="valor"> el atributo ref hace referencia a un elemento global (que puede estar definido en otro fichero xsd, al que se referencia mediante un espacio de nombres) en la declaración local, si queremos podemos indicar la cardinalidad del elemento global con los atributos minoccurs y maxoccurs

ELEMENTOS GLOBALES (2) EJEMPLO SIN REFERENCIAS A ELEMENTOS GLOBALES: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema targetnamespace= http://igae.meh.es/cancion elementformdefault="qualified"> <xsd:element name= CANCION type= Tipocancion /> <xsd:complextype name= Tipocancion > <xsd:sequence> <xsd:element name= NOMBRE type= xsd:string > <xsd:element name= AUTOR type= xsd:string > </xsd:sequence> </xsd:complextype> </xsd:schema> Ahora vamos a definir otro esquema que agregará a sus elementos y atributos locales otros procedentes del esquema http://igae.meh.es/cancion. Esto se hace mediante un elemento xsd:import EJEMPLO CON REFERENCIAS A ELEMENTOS GLOBALES: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema xmlns:cc= http://igae.meh.es/cancion elementformdefault="qualified"> <xsd:import namespace= http://igae.meh.es/cancion schemalocation=" http://igae.meh.es/cancion.xsd" /> <xsd:element name= DISCO"> <xsd:complextype> <xsd:sequence> <xsd:element ref= cc:cancion maxoccurs= unbounded /> <element name= EDITORIAL type= xsd:string /> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema>

TIPOS DE DATOS SIMPLES NUMERICOS xsd:float xsd:double xsd:decimal xsd:integer xsd:nonpositiveinteger xsd:negativeinteger xsd:long xsd:int xsd:short xsd:byte xsd:nonnegativeinteger xsd:positiveinteger xsd:unsignedlong xsd:unsignedint xsd:unsignedshort xsd:unsignedbyte Número en coma flotante de 32 bits Número en coma flotante de 64 bits Números decimales de precisión arbitraria Entero arbitrariamente grande o pequeño Entero menor o igual que cero Entero estrictamente menor que cero Entero de 8 bytes en complemento a dos Entero de 4 bytes en complemento a dos Entero de 2 bytes en complemento a dos Entero de 1 byte en complemento a dos Entero mayor o igual que cero Entero estrictamente mayor que cero Entero sin signo de ocho bytes Entero sin signo de cuatro bytes Entero sin signo de dos bytes Entero sin signo de un byte

TIPOS DE DATOS SIMPLES (2) TEMPORALES xsd:datetime xsd:date xsd:time xsd:gday xsd:gmonth xsd:gyear xsd:gyearmonth Xsd:gMonthDay xsd:duration Un momento específico en Coordinated Universal Time hasta una fracción arbitrariamente pequeña de segundo Un día específico en la historia Un momento específico del día que se repite cada día Un día de cada mes, o de ningún mes concreto Un mes en ningún año concreto Un año concreto Un mes concreto de un año específico Un día de ningún año concreto, o de cada año Duración de un intervalo de tiempo sin extremos fijos, hasta una fracción arbitraria de un segundo

TIPOS DE DATOS SIMPLES (3) TIPOS DE DATOS XML (1) xsd:id xsd:idref xsd:entity xsd:notation xsd:idrefs xsd:entities xsd:nmtoken xsd:nmtokens atributo que es único entre los atributos de tipo ID y elementos Tipo atributo. Cualquier nombre XML que se usa como valor de un atributo o elemento de tipo ID situado en cualquier otro lugar del documento Atributo con una entidad no parseada. Permiten incluir contenido no-xml en un documento XML. Las ENTIDADES resultan muy útiles para repetir información o bloques grandes de texto que pueden estar guardados en archivos separados. Tipo atributo. definición de una notación para describir el formato de datos no XML dentro de un documento XML (ef: GIF, jpeg, pdf, etc) Tipo atributo. Lista de nombres separados por comas que se usan como valores de un atributo o elemento de tipo ID situado en cualquier otro lugar del documento Tipo atributo. Lista de nombres tipo ENTITY separados por comas Atributo Cadena de caracteres. Sólo puede contener letras, dígitos, punto [. ], guión [ - ], subrayado [ _ ] y dos puntos [ : ] Atributo Cadena de caracteres. Mismos caracteres que NMTOKEN más espacio en blanco.

TIPOS DE DATOS SIMPLES (4) TIPOS DE DATOS XML (2) xsd:language xsd:name xsd:qname xsd:ncname Nombre válidos de idiomas según xml_lang (en, en-gb, en-us, fr, sp, etc) Un nombre XML, que puede contener : (pero no se le da a este carácter ningún significado). Se puede usar como un nombre de tipo de elemento o nombre de atributo. El tipo de caracteres que permite coincide con NMTOKEN. Un nombre con prefijo. Ej: song:title Un nombre local sin ningún carácter :

TIPOS DE DATOS SIMPLES (5) CADENA xsd:string xsd:normalizedstring xsd:token Una secuencia de cero o más caracteres Unicode permitidos en documentos XML NOTA -> no se permiten en XML los caracteres: ",',&,<,>, á,é, í,ó,ú,ñ,á,é,í,ó,ú,ñ Una cadena que no contiene tabuladores, ni retornos de carro, ni saltos de línea Una cadena sin espacios en blanco iniciales ni finales, sin tabuladores, sin saltos de línea, y sin más de un espacio en blanco consecutivo BINARIO xsd:hexbinary xsd:base64binary Codifica cada byte de la entrada como dos dígitos hexadecimales (usa sólo los dígitos 0-9 y las letras A-F) Utiliza un conjunto de caracteres más amplio (65 caracteres ASCII), que pasan a través de todos los gateways, relays de correo y servidores de terminales. Base64 codifica cada 3 bytes en 4 caracteres.

TIPOS DE DATOS SIMPLES (6) URI xsd:anyuri Representa una referencia URI(Uniform Resource Identifier). Las URIs se usan para identificar recursos, y pueden ser absolutas o relativas. Las URIs Relativas se especifican como la diferencia respecto a una URI de base, tal como :../prod.html. También es posible especificar un identificador de fragmento, usando el carácter #, tal como :../prod.html#shirt.

ELEMENTOS COMPLEJOS El elemento <xsd:sequence> Utilizamos este elemento para indicar que la secuencia de elementos anidados tienen que aparecer en el documento XML y con el mismo orden. Este es un ejemplo : <xsd:element name="camiseta"> <xsd:complextype> <xsd:sequence> <xsd:element name="color" type="xsd:string"/> <xsd:element name="talla" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element name="camiseta"> El elemento <xsd:choice> Este elemento es muy útil cuando tenemos una lista de elementos y queremos que en el documento XML aparezca solamente uno de ellos Este es un ejemplo : <xsd:element name="vehiculomotor"> <xsd:complextype> <xsd:choice> <xsd:element name="coche" type="xsd:string"/> <xsd:element name="moto" type="xsd:string"/> <xsd:element name="fugoneta" type="xsd:string"/> <xsd:element name="camion" type="xsd:string"/> </xsd:choice> </xsd:complextype> </xsd:element name= vehiculomotor">

ELEMENTOS COMPLEJOS (2) El elemento <xsd:all> Se comporta igual que el elemento <xsd:sequence>, pero no es obligado que la secuencia de elementos anidados aparezcan en el documento XML con el mismo orden. Este es un ejemplo : <xsd:element name="camiseta"> <xsd:complextype> <xsd:all> <xsd:element name="color" type="xsd:string"/> <xsd:element name="talla" type="xsd:string"/> </xsd:all> </xsd:complextype> </xsd:element name="camiseta">

ELEMENTOS COMPLEJOS (3) ATRIBUTOS (I) Esta es la declaración de un atributo <xsd:attribute name="nombreatributo" type="tiposimple" use="valor" default="valor" fixed="valor"/> type los atributos sólo pueden contener tipos simples use (Opcional) conjunto de valores de use required el atributo debe aparecer en el documento XML optional (valor por defecto) el atributo puede aparecer o no aparecer en el documento XML prohibited el atributo no debe aparecer en el documento XML default (Opcional) si el atributo no aparece en el documento instanciado, el parser del esquema se encarga de ofrecer el valor contenido en el atributo default los valores por defecto sólo se permiten si el atributo es opcional fixed (Opcional) si el valor del atributo está presente en la instancia del documento XML, el valor debe ser el mismo que el que indica el atributo fixed si el atributo no está presente en el documento XML, el parser del esquema ofrecerá el valor contenido en el atributo fixed los valores de los atributos default y fixed son mutuamente exclusivos por lo tanto habrá un error si una declaración contiene ambos

ELEMENTOS COMPLEJOS (4) ATRIBUTOS (II) Un elemento con atributos tiene por definición un tipo complejo. Los elementos xsd:attribute deben venir después del grupo xsd:sequence, xsd:choice o xsd:all que forma el cuerpo de un elemento. <xsd:complextype name= Tipopersona"> <xsd:sequence> <xsd:element name= Nombre"> <xsd:complextype> <xsd:all> <xsd:element name= Nombre de pila" type="xsd:string"/> <xsd:element name= Apellido" type="xsd:string"/> </xsd:all> </xsd:complextype> </xsd:element> </xsd:sequence> <xsd:attribute name="id" type="xsd:id"/> </xsd:complextype>

ELEMENTOS COMPLEJOS (5) ATRIBUTOS (III) Para añadir atributos a elementos que contienen sólo texto, se genera un nuevo tipo complejo a partir de uno simple, dándole al elemento xsd:complextype un elemento hijo xsd:simplecontent en vez de un elemento xsd:sequence, xsd:choice o xsd:all. El elemento xsd:simplecontent tiene un elemento hijo xsd:extension, cuyo atributo base identifica el tipo simple a extender (como xsd:string). Los atributos xsd:attribute se sitúan dentro del elemento xsd:extension. <xsd:complextype name= CadenaConID"> <xsd:simplecontent> <xsd:extension base="xsd:string"> <xsd:attribute name="id" type="xsd:id"/> </xsd:extension> </xsd:simplecontent> </xsd:complextype>

ELEMENTOS COMPLEJOS (6) CONTENIDO MIXTO Permite introducir en un elemento compuesto texto extra que no pertenezca a sus elementos hijo. Se configura mediante atributo Mixed= true en los elementos complextype del esquema Ej: <xsd:element name= COMPOSITOR"> <xsd:complextype mixed= true > <xsd:all> <xsd:element name= NOMBRE" type="xsd:string"/> <xsd:element name= APELLIDO" type="xsd:string"/> </xsd:all> </xsd:complextype> </xsd:element name= COMPOSITOR"> En este caso, en un documento instancia del esquema podría figurar (el texto extra es Sr ) : <COMPOSITOR> Sr. <NOMBRE> Antonio </NOMBRE> <APELLIDO> Vivaldi </APELLIDO> </COMPOSITOR>

ELEMENTOS GRUPO El elemento grupo se usa para definir un grupo de elementos que pueden reutilizarse en varias definiciones de tipos complejos. <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:group name="custgroup"> <xs:sequence> <xs:element name="customer" type="xs:string"/> <xs:element name="orderdetails" type="xs:string"/> <xs:element name="billto" type="xs:string"/> <xs:element name="shipto" type="xs:string"/> </xs:sequence> </xs:group> <xs:element name="order" type="ordertype"/> <xs:complextype name="ordertype"> <xs:group ref="custgroup"/> <xs:attribute name="status" type="xs:string"/> </xs:complextype> </xs:schema> En un documento XML instancia de un esquema, no se pueden definir elementos que sean de un tipo correspondiente al group del esquema, sino que tienen que ser de un tipo elemento complejo que incluya en su interior al grupo en cuestión. También existen grupos de atributos, que se definirían mediante xs:attributegroup, de manera análoga

RESTRICCIONES EN TIPOS SIMPLES <xsd:restriction base="tiposimple"> propiedades </xsd:restricion> PROPIEDADES para limitar valores numéricos : <xsd:minexclusive>, <xsd:mininclusive>, <xsd:maxexclusive>, <xsd:maxinclusive> para limitar la longitud de una string : <xsd:length>, <xsd:minlength>, <xsd:maxlength> para limitar un tipo simple a un conjunto acotado de valores <xsd:enumeration> para aplicar expresiones regulares : <xsd:pattern> Ejemplo : <xsd:pattern value= \p{sc}\p{nd}+(\.\p{nd}\p{nd})? > Símbolo monetario + uno o más digitos + parte opcional compuesta de : punto y dos decimales Ejemplo propiedades <xsd:mininclusive> y <xsd:maxinclusive> De esta forma por ejemplo se puede restringir un tipo simple que se basará en un integer que queremos que tenga un rango entre 28 y 210 <xsd:simpletype name="miinteger"> <xsd:restriction base="xsd:integer"> <xsd:mininclusive value= 28"/> <xsd:maxinclusive value= 210"/> </xsd:restriction> </xsd:simpletype>

RESTRICCIONES TIPOS SIMPLES (2) La propiedad <xsd:enumeration> se utiliza para restringir el valor de casi todos los tipos simples. Esta propiedad limita un tipo simple a un conjunto acotado de valores. En este ejemplo el elemento diasdelasemana está restringido a los 7 días de la semana : <xsd:element name="diasdelasemana"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:enumeration value="lunes"/> <xsd:enumeration value="martes"/> <xsd:enumeration value="miércoles"/> <!-- y así sucesivamente... --> </xsd:restriction> <xsd:simpletype> </xsd:simpletype> Definiciones de tipos anónimos Un tipo anónimo es útil cuando se quiere usar un tipo solamente una vez, y no se quieren crear muchos elementos diferentes con el mismo tipo. Se evita la sobrecarga de tener que nombrarlo y referenciarlo explícitamente. Para crear una definición de tipo anónimo, simplemente se incrusta un elemento <xsd:simpletype> o <xsd:complextype> dentro de una declaración de elemento <xsd:element>. No hay que nombrar el tipo ni asignar un valor explícito al atributo type de <xsd:element>. Además, permite dar a elementos con el mismo nombre diferentes tipos cuando se usan en diferentes elementos. Por ejemplo, puedes decir que el NOMBRE de una PERSONA contiene elementos hijos NOMBRE DE PILA y FAMILIA, mientras que el NOMBRE de una PELICULA contiene un xsd:string, y el NOMBRE de una VARIABLE contiene una cadena que posee sólo caracteres alfanuméricos del conjunto de caracteres ASCII. También permiten evitar que determinados tipos de elementos puedan ser hijos de cualquier otro elemento, sino únicamente de aquellos dentro de los cuales se definan.

EJEMPLO CON TIPOS ANONIMOS <?xml version="1.0 encoding='iso-8859-1'?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name= CANCION" type= TipoCancion"/> <xsd:complextype name="tipopersona"> <xsd:sequence> <xsd:element name="nombre"> <xsd:complextype> <xsd:sequence> <xsd:element name="nombre DE PILA" type="xsd:string"/> <xsd:element name="familia" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> <xsd:complextype name="tipocancion"> <xsd:sequence> <xsd:element name="titulo" type="xsd:string"/> <xsd:element name="compositor" type="tipopersona" maxoccurs="unbounded"/> <xsd:element name="productor" type="tipopersona" minoccurs="0" maxoccurs="unbounded"/> <xsd:element name="editorial" type="xsd:string" minoccurs="0"/> <xsd:element name="duracion" type="xsd:string"/> <xsd:element name="artista" type="xsd:string" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> </xsd:schema>

HERENCIA: EXTENSION DE ELEMENTOS Un elemento de tipo complejo se puede extender, ya sea añadiéndole atributos (como vimos anteriormente), o bien incluyendo nuevos elementos dentro del tipo extendido : <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> </xs:schema> <xs:element name="employee" type= infopersonacompleta"/> <xs:complextype name="infopersona"> <xs:sequence> <xs:element name="nombre" type="xs:string"/> <xs:element name= apellido" type="xs:string"/> </xs:sequence> </xs:complextype> <xs:complextype name="infopersonacompleta"> <xs:complexcontent> <xs:extension base="infopersona"> <xs:sequence> <xs:element name= direccion" type="xs:string"/> <xs:element name="ciudad" type="xs:string"/> <xs:element name= provincia" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexcontent> </xs:complextype>

FACETAS Además de las restricciones anteriores de los tipos simples, existen otras facetas o propiedades : xsd:totaldigits : el número máximo de dígitos permitidos en un elemento numérico xsd:fractiondigits : el número máximo de dígitos permitidos en la parte decimal xsd:whitespace : especifica el tratamiento de los espacios en blanco. Se aplica a elementos de tipo xsd:string, xsd:normalizedstring y xsd:token. Esta faceta tiene tres posibles valores : preserve : los espacios en blanco del documento se mantienen replace : cada tabulador, retorno de carro y salto de línea se reemplaza con un solo espacio. collapse: cada tabulador, retorno de carro y salto de línea se reemplaza con un solo espacio. Una vez hecho esto, todas las series de múltiples espacios se condensan en uno solo. Se borran los espacios en blanco iniciales y finales.

LISTAS El elemento <xsd:list> define un elemento de tipo simple como una lista de valores de un tipo especificado. El siguiente ejemplo muestra un tipo simple que es una lista de enteros : <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name= valoresenteros" type="listavalores /> <xs:simpletype name= listavalores"> <xs:list itemtype="xs:integer"/> </xs:simpletype> </xs:schema> El elemento "valoresenteros" en un documento podría tener este aspecto (observar que la lista tendrá 5 items): <valoresenteros>100 34 56-23 1567</valoresenteros> NOTA: el espacio en blanco se trata como separador de los elementos de la lista.

COMENTARIOS A LOS ESQUEMAS Además de los comentarios XML, que comienzan por la cadena "<!--" y terminan con "-->, XML Schema también proporciona un mecanismo más formal para comentar esquemas. Todos los elementos de un esquema pueden contener elementos hijo xsd:annotation que describan esa parte del esquema para lectores humanos o programas de ordenador. Este elemento tiene dos tipos de hijos : El elemento hijo <xsd:documentation> describe el esquema para lectores humanos. El elemento hijo <xsd:appinfo source=cualquierurl> describe información sobre el esquema para ser usada por programas de ordenador. Por ejemplo, puede contener instrucciones sobre qué hojas de estilo aplicar al esquema. Por ejemplo, el siguiente comentario podría añadirse al esquema de canción visto anteriormente : <xsd:annotation> <xsd:documentation> Esquema de Cancion para el Curso de XML Schema Copyright 2011 Blancanieves </xsd:documentation> </xsd:annotation>

REFERENCIAS CRUZADAS Se puede utilizar el lenguaje de vínculos XML XLink para crear enlaces entre elementos y archivos (por ejemplo imágenes) situados en Internet u otras redes. Por ejemplo, se podría definir dentro de un esquema el tipo de dato TipoFoto que emplea XLink: <xsd:element name= FOTO type= TipoFoto > <xsd:complextype name= TipoFoto"> <xsd:attribute name= ANCHURA" type="xsd:positiveinteger" use="required" /> <xsd:attribute name= ALTURA" type="xsd:positiveinteger" use="required" /> <xsd:attribute name="alt" type="xsd:string" use="required" /> <xsd:attribute ref="xlink:type"/> <xsd:attribute ref="xlink:href" use="required"/> <xsd:attribute ref="xlink:actuate"/> <xsd:attribute ref="xlink:show"/> </xsd:complextype> (Habiendo incluido en el elemento xsd:schema la definición del espacio de nombres xmlns:xlink= http://www.w3.org/1999/xlink )

REFERENCIAS CRUZADAS (2) En el documento instancia del esquema XML en el que se ha definido el tipo de dato TipoFoto puede figurar el siguiente elemento : <FOTO xlink:type= simple xlink:href= disfrazpolicia.jpg xlink:show= embed xlink:actuate= onload ALT= Jose Garcia en disfraz de policia verano 2008 ANCHURA= 100 ALTURA= 200 /> xlink:type="simple" crea un enlace simple unidireccional entre dos puntos ( de aquí a allí ) xlink:href define la URL a la que se enlaza. xlink:show -> Con este atributo podemos describir cómo se verá el resultado del hecho de seguir el enlace new: se abre una nueva ventana y se muestra la URI enlazada replace: muestra el recurso en la ventana actual, sustituyendo el documento embed: incrusta el recurso enlazado en el documento actual, en la ubicación del elemento enlace. none: no se proporcionan detalles xlink:actuate -> define cuándo se lee y se muestra el recurso enlazado onload: se debería seguir el enlace en cuanto lo ve la aplicación onrequest: se debería seguir el enlace cuando lo pide el usuario none: no se proporcionan detalles