La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · www.captiva.es Modelos de documento (Schema)

Presentaciones similares


Presentación del tema: "Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · www.captiva.es Modelos de documento (Schema)"— Transcripción de la presentación:

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…)


Descargar ppt "Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · www.captiva.es Modelos de documento (Schema)"

Presentaciones similares


Anuncios Google