Esquemas XML
Esquema XML Mecanismo 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
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>.
●
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.
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
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)
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
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>
Componentes básicos de un esquema ●
xs:schema
●
xs:element
●
xs:attribute
xs:schema ●
Declaración de esquema y elemento raíz
Atributos: xmlns URI 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).
Estructura de cualquier esquema: <?xml version=”1.0”?> <xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”> …. </xs:schema>
xs:element â&#x2014;?
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> ref Indica que la descripciĂłn del elemento se encuentra en otro lugar del esquema. No se puede usar si el elemento padre es <xs:schema>
type Indica el tipo de elemento. default Valor del elemento, si no se indica otro. S贸lo se puede usar si el contenido del elemento es textual fixed Valor del elemento. No puede contener otro valor. S贸lo se puede usar si el contenido del elemento es textual.
minOccurs, maxOccurs Indica 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).
xs:attribute ●
Declaración de atributos de elementos.
Atributos: name Nombre del atributo No puede aparecer simultaneamente con ref ref Indica que la descripción del atributo se encuentra en otro lugar del esquema. No se puede usar simpleType>
con los atributos type, form ni podrá contener un componente <xs:
type Tipo de elemento use Indica si el atributo es opcional (optional) (por defecto), obligatorio (required) o prohibido (prohibited) default Valor del atributo, si no se indica otro. No puede aparecer simultรกneamente con fixed fixed Valor del atributo. No puede contener otro valor No puede aparecer simultรกneamente con default
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
Tipos de datos predefinidos xs: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 genérica.
cualquier
tipo
simple
de
manera
Se puede usar para cualquier elemento o atributo Cuanto más se desciende en la jerarquía más restrictivos son los tipos.
Tipos de datos predefinidos primitivos string length, pattern, maxLength, minLength, enumeration,whiteSpace Representa cadenas de caracteres. Boolean pattern, whiteSpace Representa valores booleanos, que son true o false.
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.
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.
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.
time enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace Representa una instancia de tiempo que se repite cada dĂa. El modelo de time es hh:mm:ss.sss con un indicador opcional de zona horaria. date enumeration, pattern, minInclusive, minExclusive, maxInclusive,maxExclusive, whiteSpace Representa una fecha de calendario. El modelo de date es CCYY-MM-DD con un indicador opcional de zona horaria como se permite en dateTime.
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.
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.
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.
base64Binary length, pattern, maxLength, minLength, enumeration,whiteSpace Representa datos binarios arbitrarios codificados en Base64. base64Binaryes el conjunto de secuencias de longitud finita de octetos binarios. anyURI length, pattern, maxLength, minLength, enumeration,whiteSpace Representa un identificador URI como lo define RFC 2396. Un valor anyURIpuede ser absoluto o relativo, y puede tener un identificador de fragmento opcional.
QName length, enumeration, pattern, maxLength, minLength,whiteSpace Representa un nombre completo, que se compone de un prefijo y un nombre local separados por un signo de dos puntos. Tanto el prefijo como los nombres locales deben ser un NCName. El prefijo debe estar asociado con una referencia a un identificador URI de espacio de nombres, mediante una declaraci贸n de espacio de nombres. NOTATION length, enumeration, pattern, maxLength, minLength,whiteSpace Representa un tipo de atributo NOTATION. Conjunto de QNames.
Tipos de datos predefinidos no primitivos normalizedString 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.
Tipos de datos predefinidos no primitivos ENTITIES 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.
Tipos de datos predefinidos no primitivos Name 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.
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.
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.
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.
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.
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.
positiveInteger enumeration, fractionDigits, pattern, minInclusive,minExclusive, maxInclusive, maxExclusive, totalDigits,whiteSpace Representa un nĂşmero entero mayor que cero. Este tipo de datos se deriva de nonNegativeInteger.
Tipos de datos simples vs. complejos Tipos 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)
Definición de tipos simples <xs:sympleType> Atributos: name Nombre 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. id Identificador único para el componente.
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
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
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.
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.
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.
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.
Patrones o expresiones regulares Para indicar en una expresi贸n regular la aparici贸n literal de caracteres especiales ({, }, [,], (, ), ?, *, +, -, |, ^, ., \ ...) hay que anteponer el car谩cter de escape (\).
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
DerivaciĂłn de tipos simple: Listas â&#x2014;?
Una lista es un tipo de dato compuesto por listas de valores de un tipo de datos base.
â&#x2014;?
La lista de valores debe aparecer separada por espacios. <xs:list> Atributos itemType Tipo base de los elementos de la lista
Tipos de datos simples vs. complejos 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. 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.
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
Definici贸n de tipos complejos <xs:complexType> Atributos: name Nombre del tipo Obligatorio si es hijo de <xs:schema>, en otro caso no se puede usar mixed Indica si se intercala contenido textual con los elementos descendientes (contenido mixto) Valores: False (por defecto), True id Identificador 煤nico para el componente
abstract Indica 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. final Indica si el tipo puede ser derivable por extensi贸n, por restricci贸n o por ambas. Valores: extension, restriction, #all
Compositores o modelos de contenido Indica 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
●
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.
Declaración de Elementos ELEMENTOS 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)
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.
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.
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.
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
Modelos de diseño de esquemas Existen 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
●
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
Control de la integridad referencial Se 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>
<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
<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
<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
<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.
<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.