XSD
-
Upload
aurora-gomez -
Category
Documents
-
view
221 -
download
3
description
Transcript of XSD
Esquemas XML
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
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:
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).
Estructura de cualquier esquema:
<?xml version=”1.0”?><xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>….</xs:schema>
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>
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.
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).
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>
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
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 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.
Tipos de datos predefinidos primitivosstring
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 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.
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.
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.
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. 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)
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.
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 regularesPara 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● 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
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.
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:
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
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
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
● 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 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)
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 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
● 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 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>
<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.