XSD

68
Esquemas XML

description

Teoría de esquemas XML o documentos XSD

Transcript of XSD

Page 1: XSD

Esquemas XML

Page 2: XSD

Esquema XMLMecanismo para comprobar la validez de un documento XML.

Alternativa a los DTD.

Ventajas sobre los DTD:

● Al ser un documento XML se puede comprobar si está bien formado.

● Extenso catálogo de tipos de datos predefinidos para elementos y atributos. Pueden ser

ampliados o restringidos para crear nuevos tipos.

● Permite precisar la cardinalidad de los elementos.

● Permite mezclar distintos vocabularios (espacios de nombres)

Inconveniente:

● Más difíciles de interpretar

Page 3: XSD

En un esquema XML o documento XSD:

● Los elementos XML que se utilizan para generarlo han de pertenecer al espacio de nombres

XML Schema (http://www.w3.org/2001/XMLSchema).

● Podrá usarse u omitirse el prefijo correspondiente al anterior espacio de nombres, xs

● Siempre tiene un elemento raíz <schema> que contendrá declaraciones para todos los

elementos y atributos que puedan aparecer en un documento XML asociado válido.

○ Sus elementos hijos inmediatos son <xs:element>.

Page 4: XSD

● Puede haber un esquema con múltiples elementos raíz declarados para sus documentos

instancia.

<?xml version=1.0?>

<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>

<xs:element name=”raiz1” />

<xs:element name=”raiz2” />

</xs:schema>Cualquier documentos XML cuyo elemento raíz sea raiz1 o raiz2 se considerará conforme con el esquema anterior

● El orden en que se declaran los componentes (elementos, atributos, tipos, …) en un esquema

no es significativo ni afecta a su funcionamiento.

Page 5: XSD

Instanciación de un esquema

Vinculación de un esquema a una instancia (documento XML)

Se realiza en el elemento raíz del documento XML (documento instancia de un esquema) a través de los siguientes atributos:

<!-- Espacio de nombres asociado a documentos instancia (tiene asociado el prefijo xsi) -->

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

<!-- Se indica la ubicación del documento del esquema ( a través de un atributo del espacio de nombres anterior) →

<!-- Si no está asociado a un espacio de nombres -->

xsi:noNamespaceSchemaLocation=”fichero.xsd”

<!-- Si el esquema está asociado a un espacio de nombres -->

xsi:schemaLocation

Page 6: XSD

Atributos xsi (Documento instancia)

Otros atributos del espacio de nombres http://www.w3.org/2001/XMLSchema-instance

xsi:nil

Asociado a un elemento indica que es vacío.

Valores: True o False (por defecto)

Para poder ponerlo a true se debe activar el atributo nillable (en la definición del elemento

en el esquema asociado)

Page 7: XSD

xsi:type

Definición de un tipo de elemento (pg 204)

xsi:schemaLocation

Localización de un esquema con un espacio de nombres asociado.

Se pueden indicar varios esquemas separados por espacios

xsi:noNamespaceSchemaLocation

Localización de un esquema sin un espacio de nombres asociado.

Se pueden indicar varios esquemas separados por espacios

Page 8: XSD

Esquema:<xs:element name=”fechaCompra” type=”xs:date” nillable=”true”/>

Documento instancia XML:Se debe explicitar que el contenido de <fechaCompra> debe ser vacio

<fechaCompra xsi:nil=”true”></fechaCompra>

Page 9: XSD

Componentes básicos de un esquema

● xs:schema

● xs:element

● xs:attribute

Page 10: XSD

xs:schema

● Declaración de esquema y elemento raíz

Atributos:

xmlnsURI que indica uno o más espacios de nombres a usar en el esquema

Si no se especifica ningún prefijo, los componentes del esquema del espacio de nombres

pueden usarse de manera no cualificada (sin prefijo, normalmente xs o xsd).

Page 11: XSD

Estructura de cualquier esquema:

<?xml version=”1.0”?><xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>….</xs:schema>

Page 12: XSD

xs:element● Declaración de elemento, representa la existencia de un elemento en un documento XML

Atributos:name

Indica el nombre del elemento.Atributo obligatorio si el elemento padre es <xs:schema>

refIndica que la descripción del elemento se encuentra en otro lugar del esquema.No se puede usar si el elemento padre es <xs:schema>

Page 13: XSD

typeIndica el tipo de elemento.

defaultValor del elemento, si no se indica otro.Sólo se puede usar si el contenido del elemento es textual

fixedValor del elemento. No puede contener otro valor.Sólo se puede usar si el contenido del elemento es textual.

Page 14: XSD

minOccurs, maxOccursIndica el número mínimo/máximo de veces que el elemento puede aparecer en el documento XML.No se puede usar este elemento si el elemento padre es <schema>Desde 0 hasta unbounded (ilimitado).

Page 15: XSD

xs:attribute

● Declaración de atributos de elementos.

Atributos:

nameNombre del atributo

No puede aparecer simultaneamente con ref

refIndica que la descripción del atributo se encuentra en otro lugar del esquema.No se puede usar con los atributos type, form ni podrá contener un componente <xs:simpleType>

Page 16: XSD

typeTipo de elemento

useIndica si el atributo es opcional (optional) (por defecto), obligatorio (required) o prohibido (prohibited)

defaultValor del atributo, si no se indica otro.No puede aparecer simultáneamente con fixed

fixedValor del atributo. No puede contener otro valorNo puede aparecer simultáneamente con default

Page 17: XSD

Tipos de datos● Valor del atributo type en elementos y atributos.● Existen dos tipos:

Predefinidos

Integrados en la especificación de los esquemas XML.

Pertenecen al espacio de nombres http://www.w3.org/2001/XMLSchema (xs)

Existen 44 tipos predefinidos diferentes

Se organizan de manera jerárquica (cada tipo es igual que su padre pero añade alguna particularidad)

A su vez, se dividen en:

- Primitivos (19 tipos, Descienden directamente de xs:anySimpleType)

- No primitivos (25 tipos. Derivan de los primitivos)

Construidos

Generados por el usuario basándose en tipos predefinidos y construidos

● Otra clasificación de tipos de datos:○ Simples○ Complejos

Page 18: XSD

Tipos de datos predefinidosxs:anyType

De él se derivan todos los tipos (predefinidos y construidos)

Tipo más genérico, cualquier elemento es de este tipo si no se le asigna un tipo en su declaración

No se pueden declarar atributos de este tipo.

xs:anySimpleType

Representa cualquier tipo simple de manera genérica.

Se puede usar para cualquier elemento o atributo

Cuanto más se desciende en la jerarquía más restrictivos son los tipos.

Page 20: XSD

decimal

enumeration, pattern, totalDigits, fractionDigits, minInclusive,minExclusive, maxInclusive, maxExclusive, whiteSpace

Representa números de precisión arbitraria.

float

pattern, enumeration, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa números de punto flotante de 32 bits de precisión simple.

double

pattern, enumeration, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa números de punto flotante de 64 bits de doble precisión.

Page 21: XSD

duration

enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa una duración de tiempo.

El modelo de duration es PnYnMnDTnHnMnS, donde nY representa el número de años, nM el número de meses, nD el número de días, T el separador de fecha y hora, nH el número de horas, nM el número de minutos y nS el número de segundos.

Page 22: XSD

dateTime

enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa una instancia específica de tiempo.

El modelo de dateTime es CCYY-MM-DDThh:mm:ss donde CC representa el siglo, YY el año, MM el mes y DD el día, precedido por un carácter negativo (-) inicial opcional para indicar un número negativo. Si se omite el carácter negativo, se supone positivo (+). La T es el separador de fecha y hora, y hh, mm y ss representan la hora, minutos y segundos, respectivamente. Se pueden utilizar dígitos adicionales para aumentar la precisión de los segundos decimales, si se desea. Por ejemplo, se admite el formato ss.ss... con cualquier número de dígitos después del separador decimal. Es opcional la parte de segundos decimales.

Esta representación puede estar seguida inmediatamente por una "Z" para indicar el horario universal coordinado (UTC) o la zona horaria. Por ejemplo, la diferencia entre la hora local y el horario universal coordinado, seguido por un signo, + o -, seguido por la diferencia con respecto a UTC representada como hh:mm (se requieren los minutos). Si se incluye la zona horaria, tanto las horas como los minutos deben estar presentes.

Page 24: XSD

gYearMonth

enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa un mes gregoriano específico de un año gregoriano específico. Conjunto de instancias no periódicas de un mes de duración.

El modelo de gYearMonth es CCYY-MM con un indicador opcional de zona horaria.

gYear

enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa un año gregoriano. Conjunto de instancias no periódicas de un año de duración.

El modelo de gYear es CCYY con un indicador opcional de zona horaria como se permite en dateTime.

Page 25: XSD

gMonthDay

enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa una fecha gregoriana determinada que se repite, específicamente, un día del año, por ejemplo el tres de mayo. Un gMonthDay es el conjunto de fechas de calendario. Específicamente, es un conjunto de instancias de periodicidad anual y de un día de duración.

El modelo de gMonthDay es --MM-DD con un indicador opcional de zona horaria como se permite en date.

gDay

enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa un día gregoriano que se repite, específicamente, un día del mes, por ejemplo el quinto. Un gDay es el espacio de un conjunto de fechas del calendario. Específicamente, es un conjunto de instancias de periodicidad mensual y de un día de duración.

El modelo de gDay es ---DD con un indicador opcional de zona horaria como el que se permite en date.

Page 26: XSD

gMonth

enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace

Representa un mes gregoriano que se repite cada año. gMonth es el espacio de un conjunto de meses de calendario. Específicamente, es un conjunto de instancias periódicas anualmente de un mes de duración.

El modelo de gMonth es --MM-- con un indicador opcional de zona horaria como el que se permite en date.

hexBinary

length, pattern, maxLength, minLength, enumeration,whiteSpace

Representa datos binarios arbitrarios codificados en hexadecimal. hexBinary es el conjunto de secuencias de longitud finita de octetos binarios. Cada octeto binario se codifica como una tupla de caracteres que se compone de dos dígitos hexadecimales ([0-9a-fA-F]) y representa el código del octeto.

Page 29: XSD

Tipos de datos predefinidos no primitivosnormalizedString

length, pattern, maxLength, minLength, enumeration,whiteSpace

Representa cadenas normalizadas de espacios en blanco. Este tipo de datos se deriva de string.

token

enumeration, pattern, length, minLength, maxLength,whiteSpace

Representa cadenas convertidas en símbolos. Este tipo de datos se deriva de normalizedString.

language

length, pattern, maxLength, minLength, enumeration,whiteSpace

Representa identificadores de lenguaje natural (definidos por RFC 1766). Este tipo de datos se deriva de token.

IDREFS

length, maxLength, minLength, enumeration, whiteSpace

Representa el tipo de atributo IDREFS. Contiene un conjunto de valores de tipo IDREF.

Page 30: XSD

Tipos de datos predefinidos no primitivosENTITIES

length, maxLength, minLength, enumeration, whiteSpace

Representa el tipo de atributo ENTITIES. Contiene un conjunto de valores de tipo ENTITY.

NMTOKEN

length, pattern, maxLength, minLength, enumeration,whiteSpace

Representa el tipo de atributo NMTOKEN. NMTOKEN es un conjunto de caracteres de nombres (letras, dígitos y otros caracteres) en cualquier combinación. A diferencia de Name y NCName, NMTOKEN no tiene restricciones del carácter inicial. Este tipo de datos se deriva de token.

NMTOKENS

length, maxLength, minLength, enumeration, whiteSpace

Representa el tipo de atributo NMTOKENS. Contiene un conjunto de valores de tipo NMTOKEN.

Page 31: XSD

Tipos de datos predefinidos no primitivosName

length, pattern, maxLength, minLength, enumeration,whiteSpace

Representa nombres en XML. Name es un token que empieza con una letra, carácter de subrayado o signo de dos puntos, y continúa con caracteres de nombre (letras, dígitos y otros caracteres). Este tipo de datos se deriva de token.

NCName

length, pattern, maxLength, minLength, enumeration,whiteSpace

Representa nombres sin el signo de dos puntos. Este tipo de datos es igual que Name, excepto en que no puede empezar con el signo de dos puntos. Este tipo de datos se deriva de Name.

ID

length, enumeration, pattern, maxLength, minLength,whiteSpace

Representa el tipo de atributo ID definido en la recomendación de XML 1.0. El ID no debe incluir un signo de dos puntos (NCName) y debe ser único en el documento XML. Este tipo de datos se deriva de NCName.

Page 32: XSD

IDREF

length, enumeration, pattern, maxLength, minLength,whiteSpace

Representa una referencia a un elemento que tiene un atributo ID que coincide con el ID especificado. IDREF debe ser un NCName y tiene que ser un valor de un elemento o atributo del tipo ID dentro del documento XML. Este tipo de datos se deriva de NCName.

ENTITY

length, enumeration, pattern, maxLength, minLength,whiteSpace

Representa el tipo de atributo ENTITY definido en la recomendación de XML 1.0. Es una referencia a una entidad sin analizar con un nombre que coincide con el especificado. ENTITY debe ser un NCName y declararse en el esquema como nombre de entidad sin analizar. Este tipo de datos se deriva de NCName.

Page 33: XSD

integer

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa una secuencia de dígitos decimales con un signo inicial (+ o -) opcional. Este tipo de datos se deriva de decimal.

nonPositiveInteger

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero menor o igual que cero. nonPositiveInteger consta de un signo negativo (-) y una secuencia de dígitos decimales. Este tipo de datos se deriva de integer.

negativeInteger

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero menor que cero. Consta de un signo negativo (-) y una secuencia de dígitos decimales. Este tipo de datos se deriva de nonPositiveInteger.

Page 34: XSD

long

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero con un valor mínimo de -9223372036854775808 y un valor máximo de 9223372036854775807. Este tipo de datos se deriva de integer.

int

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero con un valor mínimo de -2147483648 y un valor máximo de 2147483647. Este tipo de datos se deriva de long.

short

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero con un valor mínimo de -32768 y un valor máximo de 32767. Este tipo de datos se deriva de int.

Page 35: XSD

byte

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero con un valor mínimo de -128 y un valor máximo de 127. Este tipo de datos se deriva de short.

nonNegativeInteger

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero mayor o igual que cero. Este tipo de datos se deriva de integer.

unsignedLong

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero con un valor mínimo de cero y un valor máximo de 18446744073709551615. Este tipo de datos se deriva de nonNegativeInteger.

Page 36: XSD

unsignedInt

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero con un valor mínimo de cero y un valor máximo de 4294967295. Este tipo de datos se deriva de unsignedLong.

unsignedShort

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero con un valor mínimo de cero y un valor máximo de 65535. Este tipo de datos se deriva de unsignedInt.

unsignedByte

enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace

Representa un número entero con un valor mínimo de cero y un valor máximo de 255. Este tipo de datos se deriva de unsignedShort.

Page 38: XSD

Tipos de datos simples vs. complejosTipos de datos:

Predefinidos (son simples y atómicos)

Primitivos

No primitivos

Construidos.

Otra clasificación:

Simples

Representan valores atómicos.

Excepcionalmente, se construyen no atómicos (lista)

Se pueden construir derivando de un tipo base predefinido al que se le introducen restricciones.

Complejos

Sólo se pueden asignar a elementos que tengan elementos descendientes y/o atributos

……. (falta pg 215)

Page 39: XSD

Definición de tipos simples

<xs:sympleType>Atributos:

nameNombre del tipo.Obligatorio si el componente es hijo de <xs:schema>, en caso contrario no está permitido.Se recomienda definir tipos de datos con nombre que puedan ser referenciados en múltiples ocasiones. Pudiéndose crear librerías de tipos de datos.

idIdentificador único para el componente.

Page 40: XSD

Podemos limitar el rango de valores de un tipo, a través del elemento restrictión mediante la inclusión de facetas.

<xs:restriction>

Atributos:

base

Nombre del tipo base a partir del que se construirá en nuevo tipo

id

Identificador único para el componente

Page 41: XSD

Facetas Se usan para limitar el rango de valores que puede tener un tipo base, lo que resulta en un tipo limitado o facetado.

Van dentro de un elemento <xs:restriction>

Todas tienen el atributo value

xs:minInclusive

Especifica el límite inferior del rango de valores aceptable.

El propio valor está incluido

xs:maxInclusive

Especifica el límite superior del rango de valores aceptable.

El propio valor está incluido

Page 42: XSD

xs:minExclusive

Igual que minInclusive pero el propio valor no está incluido.

xs:maxExclusive

Igual que maxInclusive pero el propio valor no está incluido.

xs:enumeration

Especifica una lista de valores aceptable.

Page 43: XSD

xs:pattern

Especifica un patrón o expresión regular que deben cumplir los valores aceptables.

xs:whiteSpace

Indica cómo se tratan los espacios en blanco, saltos de línea y tabuladores.

Valores: preserve, replace y collapse.

Page 44: XSD

xs:length

Indica el número exacto de caracteres o elementos de una lista permitidos.

Debe ser mayor o igual a 0.

xs:minLength

Indica el número mínimo de caracteres o elementos de una lista permitidos.

Debe ser mayor o igual a 0.

xs:maxLength

Indica el número máximo de caracteres o elementos de una lista permitidos.

Debe ser mayor o igual a 0.

Page 45: XSD

xs:fractionDigits

Especifica el número máximo de posiciones decimales permitidas en números reales.

Debe ser mayor o igual a 0.

xs:totalDigits

Indica el número exacto de dígitos permitidos en números.

Debe ser mayor que 0.

Page 46: XSD

Patrones o expresiones regularesPara indicar en una expresión regular la aparición literal de caracteres especiales ({, }, [,], (, ), ?, *, +, -, |, ^, ., \ ...) hay que anteponer el carácter de escape (\).

Page 47: XSD

Derivación de tipos simple: Uniones● Una unión es un tipo de dato creado a partir de una colección de tipos de datos base.

● Un valor es válido para una unión, si es válido para al menos uno de los tipos de datos que

forman la unión.

<xs:union>

Atributos

memberTypes

Nombres de los tipos de datos que forman la unión

Page 48: XSD

Derivación de tipos simple: Listas● Una lista es un tipo de dato compuesto por listas de valores de un tipo de datos base.

● La lista de valores debe aparecer separada por espacios.

<xs:list>

Atributos

itemType

Tipo base de los elementos de la lista

Page 49: XSD

Tipos de datos simples vs. complejosSimples

● Representan valores atómicos.

● Excepcionalmente se construyen no atómicos (lista)

● Se pueden construir derivando de un tipo base predefinido al que se le introducen restricciones.

Complejos● Sólo se pueden asignar a elementos que tengan elementos descendientes y/o atributos. Estos elementos

pueden tener contenido textual.

● Por defecto, un elemento con un tipo de datos complejo contiene contenido complejo, lo que significa que tiene

elementos descendientes.

● Un tipo de datos complejo se puede limitar a tener contenido simple, lo que significa que sólo contiene texto y

atributos. Se diferencia de los tipos de datos simples en que tiene atributos.

● Se pueden limitar para que no tengan contenido, es decir que sean vacíos, aunque pueden tener atributos.

● Pueden tener contenido mixto: contenido textual con elementos descendientes.

Page 50: XSD
Page 51: XSD

Tipos de contenidos Contenido de un elemento es lo que va entre sus etiquetas de apertura y cierre, puede ser:

Contenido simple: <xs:simpleContent>

El elemento declarado sólo tiene contenido textual, sin elementos descendientes con o sin atributos.

Contenido complejo:<xs:complexContent>

El elemento declarado tiene elementos descendientes y puede tener o no contenido textual o atributos. También para elementos sin elementos descendientes, sin atributos y sin contenido textual todo a la vez.

Sólo se puede asignar a elementos

Page 52: XSD

Definición de tipos complejos

<xs:complexType>Atributos:

nameNombre del tipoObligatorio si es hijo de <xs:schema>, en otro caso no se puede usar

mixedIndica si se intercala contenido textual con los elementos descendientes (contenido mixto)Valores: False (por defecto), True

idIdentificador único para el componente

Page 53: XSD

abstractIndica si se puede usar directamente como tipo de un elemento de un documento instancia XML. Con valor True, indica que no puede usarse directamente y el tipo debe derivarse para generar otro tipo que sí se pueda usar.

finalIndica si el tipo puede ser derivable por extensión, por restricción o por ambas. Valores: extension, restriction, #all

Page 54: XSD

Compositores o modelos de contenidoIndica la distribución que tienen los elementos descendientes de uno dado. La distribución de elementos descendientes siempre aparece conformando un tipo de dato complejo.

Existen tres posibilidades:

● Secuencia:<xs:sequence>

○ Los elementos aparecen unos detrás de otros en un orden determinado○ Se pueden emplear los atributos minOccurs y maxOccurs para indicar el número de veces

que aparece la secuencia

Page 55: XSD

● Alternativa<xs:choice>

● De los elementos que aparecen sólo se elige uno.● Se pueden emplear los atributos minOccurs y maxOccurs para indicar el número de veces

que aparece la alternativa

● Los elementos aparecen en cualquier orden <xs:all>

● El uso de este modelo de contenido no se recomienda por la pérdida de control sobre el orden en que aparecen los elementos

● Los elemento pueden aparecer cualquier número de veces en cualquier orden.

Page 56: XSD

Declaración de ElementosELEMENTOS VACIOS

Elementos que no tienen contenido textual ni elementos descendientes (pueden tener atributos)

Tenemos dos formas posibles de definirlos:

● Como un tipo simple derivado de xs:string con longitud 0

● Como un tipo complejo sin contenido, que no contiene elementos descendientes

(recomendable)

Page 57: XSD

ELEMENTOS CON CONTENIDO TEXTUAL Y ATRIBUTOS

● Se declara con un tipo de datos complejo con contenido simple que contenga algún atributo

● Se toma un contenido simple y, mediante un componente de declaración de extensión <xs:

extension base=”tipo_base”>, se le añade uno o más atributos. Esto hace que el tipo se

convierta en complejo.

ELEMENTOS CON SÓLO ATRIBUTOS

● Se declara con un tipo de datos complejo con contenido complejo que contenga algún atributo.

Pero se puede omitir la declaración de contenido complejo.

Page 58: XSD

ELEMENTOS CON SÓLO ELEMENTOS DESCENDIENTES

● Se declara con un tipo de datos complejo con contenido complejo que contenga algún

elemento.

ELEMENTOS CON ATRIBUTOS Y ELEMENTOS DESCENDIENTES

● Se declara con un tipo de datos complejo con contenido complejo que contenga algún elemento

descendiente y algún atributo.

Page 59: XSD

ELEMENTOS CON CONTENIDO TEXTUAL Y ELEMENTOS DESCENDIENTES

● Se declara con un tipo de datos complejo con contenido complejo que contenga algún elemento

descendiente y contenido textual.

ELEMENTOS CON ATRIBUTOS, DESCENDIENTES Y CONTENIDO TEXTUAL

● Se declara con un tipo de datos complejo con contenido complejo que contenga algún elemento

descendiente, atributos y contenido textual.

Page 60: XSD

Extensión de tipos complejos

● Similar a la herencia en programación orientada a objetos: se pueden añadir nuevos elementos

y atributos a tipos complejos ya existentes.

● Los elementos añadidos aparecerán al final de los elementos del tipo base.

● El nuevo tipo extendido será un tipo complejo <xs:complexType> con contenido complejo <xs:

complexContent>

● La extensión del tipo se describe utilizando el componente de extensión <xs:extension base=”

Tipo_a_extender”> el atributo base permite indicar el tipo de datos a extender. Dentro de este

componente se definen los atributos y/o elementos de extensión

Page 61: XSD

Modelos de diseño de esquemasExisten varios modelos de estructuración de las declaraciones al construir esquemas.El orden en que aparecen los componentes en un esquema no es representativo.

● Diseño anidado

○ Se anidan las declaraciones unas dentro de otras.

○ Se describe cada elemento y atributo donde se declara.

○ Inconveniente: produce duplicidades en la descripción de elementos con tipos iguales.

Puede haber elementos con igual nombre y distintas descripciones.

○ Los esquemas son más cortos pero su lectura es más compleja

Page 62: XSD

● Diseño plano

○ Se declaran los elementos y los atributos y se indica una referencia a su definición que se

realiza en otro lugar del documento.

● Diseño con tipos con nombres reutilizables

○ Se definen tipos de datos simples o complejos a los que se identifica con un nombre. De

manera que al declarar elementos y atributos se indica que son de alguno de los tipos con

nombre previamente definidos

Page 63: XSD

Control de la integridad referencialSe pretende simular el comportamiento de las restricciones de clave primaria, clave ajena y unicidad

que permiten preservar la integridad referencial en los SGBD.

La integridad referencial asegura que un elemento que deba estar relacionado con otro no pueda

estarlo con un elemento inexistente (Ejemplo: empleado asociado a departamento que no existe).

Sentencias empleadas:

<xs:key><xs:unique><xs:keyref>

Las anteriores se apoyan en <xs:selector> y <xs:field>

Page 64: XSD

<xs:key>Permite definir un elemento o atributo como clave (el valor de la clave no puede ser nulo ni repetirse).

Un elemento o atributo definido como clave no podrá omitirse.

Se declara de manera conjunta con <xs:keyref> que permitirá a otro elemento o atributo referenciar a

la clave.

Elemento padre: <xs:element>

Atributos:

name Nombre de la clave

Page 65: XSD

<xs:keyref>Permite referenciar claves primarias (xs:key) o claves únicas (xs:unique) compuestas por elementos

y/o atributos (similar a clave ajena en bases de datos relacionales)

Se declara de manera conjunta con <xs:key> (define una clave primaria) ocon <xs:unique> (define

una clave única)

Elemento padre: <xs:element>

Atributos:

name

Nombre de la clave

refer

Nombre de la clave primaria o única a la que se referencia

Page 66: XSD

<xs:unique>Permite definir un elemento o atributo como de valor único(similar a una clave única en bases de

datos relacionales)

Se declara de manera conjunta con <xs:keyref> (permite a un elemento o atributo referenciar a la

clave única)

Elemento padre: <xs:element>

Atributos:

name

Nombre de la clave

Page 67: XSD

<xs:selector>Especifica una expresión XPath que selecciona un conjunto de elementos para usarlos en la

definición de una clave primaria <xs:key>, única <xs:unique> o ajena <xs:keyref>

Elemento padre: <xs:key>, <xs:unique> o <xs:keyref>

Atributos:

xpath

Expresión Xpath relativa a la ubicación del elemento sobre el que se aplica la restricción.

Page 68: XSD

<xs:field>Especifica una expresión XPath que indica los elementos o atributos que formarán parte de la clave

que se está definiendo, sea esta primaria <xs:key>, única <xs:unique> o ajena <xs:keyref>

Elemento padre: <xs:key>, <xs:unique> o <xs:keyref>

Atributos:

xpath

Identifica un único elemento (a través de su nombre) o atributo (@nombreAtributo) cuyo contenido o valor se usa para la restricción.