PDF de programación - XML Schema

Imágen de pdf XML Schema

XML Schemagráfica de visualizaciones

Publicado el 29 de Mayo del 2018
174 visualizaciones desde el 29 de Mayo del 2018
209,4 KB
26 paginas
Creado hace 13a (23/07/2006)
XML Schema

Departamento de Informática

Universidad de Oviedo

Lenguajes de Esquemas

Esquema = definición de estructura de un conjunto de

documentos XML

Validar = Chequear que un documento sigue un esquema

Principal Ventaja: Protección de errores
Otras aplicaciones: Edición, compresión, etc.

DTDs = un ejemplo de esquemas (con varias limitaciones)
XML Schema = desarrollo posterior del W3c
Existen Otros:

RELAX-NG, Schematron, etc.

1

Características de DTD’s

Especifican estructura del documento:
Elementos, atributos, anidamientos, etc.

Integridad referencial mínima (ID, IDREF)
Mecanismo sencillo de abstracción

Entidades ≈ Macros

Inclusión de documentos externos
Integrados en XML (Parte de la especificación)
Sencillos de comprender (≈ Expresiones regulares)

Limitaciones de DTD’s

La Sintaxis no es XML (difíciles de manipular)
No soportan Espacios de nombres
No permiten especificar tipos de datos (por ejemplo: enteros, flotantes,

fechas, etc.

No permiten especificar secuencias no ordenadas
((e1,e2,e3)|(e1,e3,e2)|(e2,e1,e3)|...(e3,e2,e1))

No hay soporte para declaraciones sensibles al contexto: Los elementos

se definen todos a nivel de documento, ejemplo, contenido con el mismo
nombre cuya estructura cambia en diferentes contextos

Soporte limitado para Referencias cruzadas, no es posible formar claves a

partir de varios atributos o de elementos

No son extensibles (una vez definido, no es posible añadir nuevos

vocabularios a un DTD)

2

XML Schema
Objetivos de Diseño

Sintaxis XML
Soporte para Espacios de Nombres
Mayor expresividad

Restricciones numéricas
Integridad dependientes del contexto

Tipos de datos

Gran cantidad de tipos de datos predefinidos
Creación de tipos de datos por el usuario

Extensibilidad

Inclusión/Redefinición de esquemas
Herencia de tipos de datos
Soporte a Documentación

Ejemplo

alumnos.xsd

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

targetNamespace="http://www.uniovi.es/alumnos"
xmlns="http://www.uniovi.es/alumnos">

<xs:element name="alumnos">
<xs:complexType>
<xs:sequence>
<xs:element name="alumno" minOccurs="1" maxOccurs="200"
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="TipoAlumno">

type="TipoAlumno"/>

<xs:sequence>

<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>
<xs:element name="nacim" type="xs:gYear"/>
</xs:sequence>
<xs:attribute name="dni" type="xs:integer"/>
</xs:complexType>
</xs:schema>

Elemento raíz schema y

espacio de nombres

determinado

Permite especificar
rangos de inclusión

Permite especificar

tipos

3

Estructura del Schema

El esquema está formado por:

Elemento raíz: schema del espacio de nombres

http://www.w3.org/2001/XMLSchema

Atributo: targetNamespace indica el espacio de nombres que se

está definiendo

Subelementos:

Declaraciones globales de elementos y atributos
Definiciones de tipos de elementos y atributos
Anotaciones

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

targetNamespace="http://www.uniovi.es/alumnos"
xmlns="http://www.uniovi.es/alumnos">

<xs:element name="alumnos">
. . .
</xs:element>
. . .

</xs:schema>

Tipos Complejos vs
Simples
Pueden declararse 2 tipos:

Complejos: Pueden contener sub-elementos y atributos

Ejemplo de Tipo Complejo

<alumno
dni=“9873435”>

<nombre>Jose</nombr
e>

Simples: No contienen sub-elementos ni atributos

Simples
<apellidos>Bueno</apel
lidos>
</alumno>
Pueden aparecer dentro de elementos o

en valores de atributos

4

Validación: esquemas e
Instancias

Un documento XML Schema define un conjunto de documentos con

una determinada estructura

Un documento XML puede validarse contra varios esquemas

Puede asociaciarse explícitamente mediante el atributo

schemaLocation

Utiliza 2 cadenas, el espacio de nombres y la URL del documento

Si no se utiliza espacio de nombres, puede usarse

noNamespaceSchemaLocation

alumnos.xml

xmlns="http://www.uniovi.es/alumnos”
xsi:SchemaLocation=“http://www.uniovi.es/alumnos
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance">

alumnos.xsd”

<alumnos

. . .
</alumnos>

Validación: esquemas e
instancias

alumnos.xsd

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

targetNamespace="http://www.uniovi.es/alumnos"
xmlns="http://www.uniovi.es/alumnos">

<xs:element name="alumnos">
<xs:complexType>
<xs:sequence>
<xs:element name="alumno" minOccurs="1" maxOccurs="200"
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="TipoAlumno">

type="TipoAlumno"/>

<alumnos

alumnos.xml

Los espacios de nombres
deben coincidir.
También puede usarse:
xsi:noNameSpaceLocation

<xs:sequence>

xmlns="http://www.uniovi.es/alumnos”
xsi:schemaLocation=“http://www.uniovi.es/alumnos
<xs:element name="nombre" type="xs:string"/>
alumnos.xsd”
<xs:element name="apellidos" type="xs:string"/>
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance">
<xs:element name="nacim" type="xs:gYear"/>
</xs:sequence>
<xs:attribute name="dni" type="xs:integer"/>
</xs:complexType>
</xs:schema>

. . .
</alumnos>

5

Tipos Anónimos vs.
con nombre

<xs:element name="alumno">
<xs:sequence>

Otra posibilidad:
Referencias

<xs:element name="alumno">
<xs:sequence>

<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>

</xs:sequence>

</xs:element>
<xs:element name="alumnos">
<xs:sequence>
</xs:sequence>
</xs:element>

<xs:element ref="alumno" />

<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>

</xs:sequence>

</xs:element>

<xs:element name="alumno" type="TipoAlumno"/>

<xs:ComplexType name="TipoAlumno">
<xs:sequence>

<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>

</xs:sequence>
</xs:ComplexType>

+ legible

+ Reutilizable

6

Tipos complejos: Creación
a partir de tipos simples

<xs:extension base="xs:decimal">
<xs:attribute name="moneda" type="xs:string" />

<xs:element name="precio">
<xs:simpleContent>

<xs:complexType>

</xs:extension>
</xs:simpleContent>

</xs:complexType>

</xs:element>

<precio moneda=“euros">23.45</precio>

Tipos Complejos:
Secuencia

Construcción básica mediante secuencia de elementos
<xs:element name=“alumno”>

<xs:complexType>
<xs:sequence>

<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>
<xs:element name="nacim" type="xs:gYear"
minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="dni" type="xs:integer"/>
</xs:complexType>
</xs:element>

<alumno dni="9399390">
<nombre>Juan</nombre>
<apellidos>García García</apellidos>
<nacim>1985</nacim>
</alumno>

7

Tipos Complejos:
Alternativa
choice: Representa alternativas

OJO: Es una o-exclusiva
<xs:complexType name="Transporte">

<xs:choice>
<xs:element name="coche" type="xs:string"/>
<xs:element name="tren" type="xs:string"/>
<xs:element name="avión" type="xs:string"/>

</xs:choice>

</xs:complexType>

<transporte>
<coche>Renault R23</coche>
</transporte>

Tipos Complejos:
Contenido Mixto
El contenido Mixto permite mezclar texto con

elementos
<xs:complexType name="TCom" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="emph" type="xs:string"/>

</xs:choice>

</xs:complexType>

<xs:element name="comentarios" type="TCom" />

<comentarios>
Es un poco <emph>listillo</emph>
</comentarios>

8

Secuencias no ordenadas

all = Todos los elementos en cualquier orden
En DTDs requería enumerar las combinaciones:

(A,B,C)|(A,C,B)|...|(C,B,A)
<xs:complexType name="TipoLibro">

<xs:all>

</xs:all>

<xs:element name="autor" type="xs:string"/>
<xs:element name="título" type="xs:string"/>

</xs:complexType>
<xs:element name="libro" type="TipoLibro" />

<libro>
<autor>Juanita la Loca</autor>
<título>No estoy loca</título>
</libro>

<libro>

<título>El kigote</título>
<autor>Cerbantes</autor>
</libro>

Agrupaciones

Es posible nombrar agrupaciones de elementos y de

atributos para hacer referencias a ellas
<xs:group name="nombApell">

<xs:sequence>

</xs:sequence>

<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>

</xs:group>
<xs:complexType name="TipoAlumno">
<xs:group ref="nombApell" />
<xs:element name="carrera" type="xs:string"/>
</xs:complexType>

9

Tipos Simples

Los tipos simples no pueden contener elementos o

atributos
Pueden ser:

Predefinidos o built-in (Definidos en la especificación)

Primitivos
Derivados

Definidos por el usuario

Restringiendo facetas de tipos predefinidos

Tipos simples Primitivos

string
boolean
number, float, double
duration, dateTime, time, date, gYearMonth, gYear,

gMonthDay, gDay, gMonth

hexBinary, base64Binary
anyURI
QName = Nombre cualificado con espacio de

nombres

NOTATION = Notación binaria (similar a DTD)

10

Jerarquía de tipos

Creación de nuevos tipos
simples
Facetas

Los nuevos tipos se construyen mediante restricción de facetas:

length, minlength, maxlength: Longitud del tipo de datos
pattern: Restricciones sobre valores mediante expresiones

regulares

enumeration: Restringe a una determinada enumeración de valores
whitespace: Define política de tratamiento de espacios

(preserve/replace, collapse)

(max/min)(in/ex)clusive: Límites superiores/inferiores del tipo de

datos

totaldigits, fractionDigits: número de dígitos totales y decimales

11

Enumeraciones y
Restricciones

Enumeración

<xs:simpleType name="TipoCarrera">
<xs:restriction base="xs:token">
<xs:enumeration value="Gestión"/>
<xs:enumeration value="Sistemas"/>
</xs:restriction>
</xs:simpleType>

Restricciones sobre valores

<xs:simpleType name="mes">
<xs:restriction base=“xs:integer">

<xs:minInclusive value="1" />
<xs:maxInclusive value="31" />

</xs:restriction>
</xs:simpleType>

Listas

<xs:simpleType name="ComponentesRGB">
<xs:list itemType="ComponenteRGB"/>
</xs:simpleType>
<xs:simpleType name="ComponenteRGB">
<xs:restriction base="xs:nonNegativeInteger">
</xs:restriction>
</xs:simpleType>

<xs:maxInclusive
  • Links de descarga
http://lwp-l.com/pdf11398

Comentarios de: XML Schema (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad