Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porHernando Lastra Modificado hace 9 años
1
Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · www.captiva.es Modelos de documento (Schema)
2
Introducción XML Schema Descripción formal de un documento XML en XML El más utilizado W3C XML Schema Otros Relax NG, Schematron Un XML documento que cumple con schema instancia Métodos para asociar instancia a schema Atributo xsi:schemaLocation lista de namespaces y schema para cada uno Atributo xsi:noNamespaceSchemaLocation schema para elementos sin namespace Otros prefijándoselo al parser, etc.
3
Introducción (II) Schema vs DTD Tipos de datos simples y complejos (en DTD PCDATA) para contenido y atributos Derivación y herencia de tipos Declaración de elementos y atributos sensibles al namespace Schema no dispone de ENTITIES Más sencillo en DTD. Alternativa Xinclude Namespaces Especificación posterior a XML 1.0 No soportado por DTDs Uso Reutilización de nombres para diferentes contextos. P.e. Kiko Nombre de persona, equipo, etc. Los schemas combinan nombre con namespace
4
Principios Ejemplo de XML (direccion.xml): <nombre xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="direccion-schema.xsd"> Don Pimpón Ejemplo de Schema (direccion-schema.xsd): Significado: El documento contiene elemento y admite contenido de tipo xs:string (xs namespace del propio schema). noNamespaceSchemaLocation No hemos definido un namespace para nombre. Requiere hacer referencia al ns que lo define
5
Principios (II) Cómo validamos nuestros ejemplos: Editores Jedit, Cooktop Validadores MSV (MultiSchemaValidator), XSV Organización del documento Elemento raíz Hijo de elemento raíz Definición de elementos raíz para instancias XML Anotaciones Elementos orientados a documentación del schema A su vez contiene (hombres) ó (máquinas, p.e. ayuda contextual) Ejemplo Ejemplo de XML schema para curso XML (c) 2005 Captiva Soluciones y Seguridad S.L.
6
Principios (III) Declaración de elementos Formato Tipos de contenidos Simples Tipos predefinidos Complejos Tipos definidos por el usuario
7
Principios (IV) TipoDescripción stringCadena unicode normalizedStringCadena con tabuladores y cambios de linea normalizados a espacios tokenIgual que anterior pero con multiples espacios substituidos por uno único y eliminados los iniciales y finales NameNombre XML languageMismo valor que atributo xml:lang. P.e.: en, es-es anyURIURI booleantrue | false | 0 | 1 byte127 = -128 integerNúmero entero positivo o negativo decimalNumero flotante de precisión arbitraria base64BinaryDatos binarios codificados Base64 dateTimeFecha y hora durationCantidad de tiempo relativa en años, días, meses, etc. ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS Igual que XML DTD 1.0 Algunos tipos básicos
8
Principios (V) Declaración de atributos Siempre son tipos básicos no pueden contener elementos Pega Un elemento de tipo básico no puede tener atributos Se declaran mediante: Posible definir atributos “globales” o locales a la definición de “complexType” de un elemento Ejemplo
9
Principios (VI) Grupos de atributos DTDs Parameter entities Definición de un xs:attributeGroup global identificado por id único name Dentro del complex type se hace referencia al attributeGroup Ejemplo:...
10
Namespaces Un namespace se identifica con una URL Por abreviar se suele asignar un prefijo Hace referencia a elementos de ese namespace El prefijo no identifica el namespace, es la URL ¿Cómo se asocia un Schema con un namespace? Declaración tipica <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace=“http://www.captiva.es” xmlns=“http://www.captiva.es”> xmlns:xs = … Este documento usa namespace de XMLSchema (http://.../XMLSchema) y se usará el prefijo xshttp://.../XMLSchema targetNamespace = … Los elementos definidos en este schema pertenecen al namespace “http://www.captiva.es” xmlns = … Identifica el namespace por defecto.
11
Namespaces (II) ¿Cómo se asocia una instancia con un namespace? Declaración tipica <nombre xmlns:xsi="http://www.w3.org/2001/XMLSchema“ xsi:schemaLocation=“http://www.captiva.es direccion.xsd” xmlns=“http://www.captiva.es” elementFormDefault="qualified" >Yo mismo xmlns:xsi = … XMLSchema en sí es una instancia XML. La hacemos accesible a través de prefijo “xsi” xsi:schemaLocation = “schema fich-schema.xsd” Token list con el schema a utilizar (debe coincidir con targetSchema) y fichero que contiene la def del schema xmlns = … Identifica el namespace por defecto. elementFormDefault = “qualified” -> Los nombres simpre son cualificados Evita errores
12
Tipos Complejos Tipos complejos Sólo para elementos Definición de nuevos tipos xs:complexType Alternativas Declaración global (fuera definición de cualquier elemento) Se puede referenciar a través de atributo name Declaración dentro de definición de elementos Ejemplo: Fulano de Tal y Cual
13
Tipos Complejos (II) Restricción de ocurrencias Equivalente a modificadores de DTDs (+ * ?) Parámetros minOccurs y maxOccurs de xs:element Ejemplo: Alternativas para contenido de un elemento Vacío Contenido simple Contenido mixto Cualquier tipo
14
Elementos vacíos Elemento vacío ó Ejemplo de elemento vacío Tipo complejo sin más elementos anidados Ejemplo definición de elemento img:
15
Elementos con contenido simple Se especifican con modificador Se permite definir tipos simples derivados de los que incorpora Schema Declaramos un tipo complejo con contenido simple y lo usamos para definir el elemento “nombre” con atributo “dni”:
16
Elementos con contenido simple (II) Defininición de tipos simples En vez de definir tipo complejo con contenido simple podemos definir tipo simple Ej: Facetas Son posibles valores para los tipos simples Para ello se emplean restricciones de valores xs:restriction
17
Tipos simples: Facetas Lista de posibles facetas length (o minLength y maxLength ) pattern enumeration whiteSpace maxInclusive y maxExclusive minInclusive y minExclusive totalDigits fractionDigits
18
Tipos simples: Facetas (II) Espaciado Antes de “parsear” el dato se normalizan los espacios Con whiteSpace podemos determinar cómo se normalizan Posibles valores: preserve Deja todos los espacios intactos replace Substituye \t \r \n por espacio (#x20) collapse Hace replace y luego substituye multiples espacios por uno sólo
19
Tipos simples: Facetas (III) Longitud Tres alternativas: length Fija longitud exacta permitida minLength Fija longitud mínima maxLength Fija longitud máxima Ejemplo Ejemplo direccion-tipobasico.xml y direccion-schema- tipobasico.xsd
20
Tipos simples: Facetas (IV) Enumeraciones Lista de valores válidos (DTD (a | b | c) )
21
Tipos simples: Facetas (V) Restricciones numéricas Rangos: minInclusive ( =), maxExclusive (>) Control de valores decimales: totalDigits, fractionDigits Ejemplo restricción decimal a XXX.XX
22
Tipos simples: Facetas (VI) Formato específico de cadenas Se utiliza para especificar el patrón que ha se seguir la cadena Algunos ejemplos de patrones: [a-z] Letras de la ‘a’ a la ‘z’ \d Dígito numérico \D Cualquier carácter que no sea un dígito . Cualquier carácter excepto CR LF \s Espacio, tabulador o CR o LF Más información: http://www.w3.org/TR/xmlschema-2/#regexshttp://www.w3.org/TR/xmlschema-2/#regexs Ejemplo definición tipo DNI:
23
Tipos simples: Facetas (VII) Listas Lista de elementos de tipo básico separados por espacios Sintaxis: Atención: No va dentro de restriction. Se pueden aplicar restricciones que se aplican a todos los elementos Ejemplo lista de DNIs:
24
Tipos simples: Facetas (VIII) Uniones Alternativa entre varios tipos posibles Sintaxis: Atención: No va dentro de restriction Ejemplo:
25
Elementos con contenido mixto Contenido mixto Texto y elementos DTD Número ilimitado de combinación texto elementos Schema Además control del número y secuencia de elementos mezclados con texto ¿Cómo se permite contenido mixto?
26
Elementos con contenido mixto (II) Mezclado de texto con secuencia de elementos Ejemplo: carta.xml y carta-schema.xsd Ejercicio: Abrir carta.xml y validar. Después cambiar en xsd mixedContent=“false” y repetir.
27
Elementos con contenido mixto (II) Mezclado de texto con elementos alternativos En vez de mezclar con utilizamos Ejemplo
28
Elementos con contenido mixto (III) Mezclado de texto con secuencias desordenadas Se utiliza la construcción Implica que todos los elementos han de estar presentes pero en cualquier orden Ejemplo Fragmento XML que es válido de acuerdo al schema Puedes traerme 3 kg de alubias, unos 5 kg de pimientos y quizá también 8 kg de naranjas
29
Elementos con contenido mixto (IV) Una vuelta más de tuerca: Agrupaciones Utlizando la construcción podemos combinar y Ejemplo
30
Cualquier contenido Cualquier elemento, incluso de schemas externos Sintaxis: Cualquier elemento Ejemplo podemos incluir texto XHTML dentro de nuestro doc. XML: <xs:any namespace="http://www.w3.org/1999/xhtml“ minOccurs="0" maxOccurs="unbounded“ processContents="skip"/>
31
Cualquier contenido (II) Inclusión de declaraciones en ficheros externos Sintaxis: El fichero incluido no es un fragmento es un schema completo Para utlizar elementos definidos externamente Utilizar correctamente namespaces Ejemplos: carta-partida.xml se valida contra carta-partida-schema.xsd que incluye carta- partida-include-schema.xsd, donde se define el tipo tipoCarta carta-partida-schema.xsd
32
Cualquier contenido (III) Inclusión de definiciones de otros namespaces Para ello utilizamos namespace Redefinición de tipos de otros schemas Se utiliza Funciona como pero adicionalmente permite redefinir tipos Ejemplo, redefinimos tipoCarta (secuencia con saludo, cuerpo, despedida):
33
Derivación de tipos complejos Alternativas para derivar tipos complejos Por extensión Equivale a añadir contenidos a los contenidos de la declaración base Ej. Añadimos código postal a tipoDireccionFisica para formar el nuevo tipo tipoDireccionPostal
34
Derivación de tipos complejos Alternativas para derivar tipos complejos (II) Por restricción Si el tipo derivado es subtipo del original Con tipos simples es sencilla su utilización (facets) Con tipos complejos hay que volver a definir el tipo base eliminando los elementos o atributos que deseamos restringir
35
Derivación de tipos complejos (II) Polimorfismo Característica interesante de tipos derivados Permite instanciar objetos derivados como si fueran hijos. El atributo xsi:type permite especificar a qué tipo derivado conforma una instancia. Ejemplo: <nombreCompleto xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.captiva.es nombre.xsd“ xmlns=http://www.captiva.eshttp://www.captiva.es xsi:type=“tipoNombreCorto”> Pedro Ruiz
36
Derivación de tipos complejos (III) Grupos de substitución Mediante el atributo substitutionGroup de podemos crear formas de llamar al mismo elemento con otro nombre. Ejemplo trozo schema: Serían igualmente válidos: Madrid 43 Berlin 34
37
Control sobre derivación Elementos y tipos abstractos Si atributo abstract=true en definición de elemento o tipo No puede instanciarse el mismo Atributo final Si atributo final de complexType puede tener los valores #all, extension, restriction para restringir la derivación. P.e.: Evita que se derive por extension este tipo Facetas fijas Algunas facetas admiten atributo fixed=“true” Evita que futuras derivaciones anulen la restricción impuesta por ella
38
Control sobre derivación (II) Valores únicos El elemento xs:unique permite definir valores únicos para elementos y atributos. Funcionamiento Se utiliza una expresión xpath para coger subcojunto del documento xs:selector Se utiliza otra expresión xpath para seleccionar el campo determinado dentro de subgrupo xs:field Si dos campos son iguales se genera un error Ejemplo. Vamos a limitar en “contactos” contactos con mismo nombre:
39
Control sobre derivación (III) Claves Igual que xs:unique pero no pueden ser nulas y se crean con xs:key Referencias Con xs:keyref puede referenciarse una clave definida previamente Ejemplo: Definimos clave única nombre del personaje Definimos campo “amigo-de” que debe apuntar a un nombre de personaje <xs:keyref name=“nomPersonajeRef” refer=“nomPersonaje”> Mortadelo Filemón Pi camaleónico
40
Ejemplo: articulo Articulo-schema.xsd (1/3):
41
Ejemplo: articulo (II) Articulo-schema.xsd (2/3):
42
Ejemplo: articulo (II) Articulo-schema.xsd (3/3):
43
Ejercicio (1/3) Partir de casino.xml de 2º capítulo y modificarlo ligeramente Añadir un elemento a cada jugador (detrás de las cartas): 12.23 Añadir al elemento “jugador” un atributo “dni” con el formato visto en los ejemplos Crear un XML Schema que permita verificar el fichero casino.xml. Para crearlo ir definiendo primero tipos simples y luego tipos complejos De tal forma que no sea necesario definir tipos complejos dentro de elementos La última línea del fichero ha de ser de la forma:
44
Ejercicio (2/3) Tipos simples a ir definiendo en orden: tipoCadena xs:string que “colapsa” espacios tipoNombreCarta Derivada de tipoCadena con valores: “As”, “Dos”, … ”Rey” tipoPalo “oros”, “copas”, “espadas”, “bastos” tipoDNI Copiar de ejemplo tipoJuego “brisca”, “tute”, “poker”, “mus” tipoMoneda “€”, “$” tipoValorDinero Decimal con 2 números decimales máximo
45
Ejercicio (3/3) Tipos complejos (Nota Todos los atributos han de tener atributo use=“required”) tipoCarta Contenido: Simple de tipo “tipoNombreCarta” Atributos: “palo” de tipo “tipoPalo” tipoDinero Contenido: Simple de tipo “tipoValorDinero” Atributos: “moneda” de tipo “tipoMoneda” tipoJugador Contenido: Secuencia de “nombre”, “carta” (1-10), “apuesta” Atributos: “dni” de tipo “tipoDNI” tipoMesa Contenido: Secuencia de “jugador” (2-infinito) Atributos: “juego” de tipo “tipoJuego” tipoCasino Contenido: Secuencia de “bienvenida”, ”mesa” (1-infinito) Restricciones: El atributo “dni” de cada jugador es una clave única xs:key Hacer pruebas sobre casino.xml (poner apuestas sin tipo de moneda, poner formato incorrecto en campos, repetir DNIs, etc…)
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.