SlideShare una empresa de Scribd logo
1 de 58
Jose Emilio Labra Gayo - Universidad de Oviedo 
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.
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
<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> 
Elemento raíz schema y 
espacio de nombres 
determinado 
<xs:sequence> 
<xs:element name="alumno" minOccurs="1" maxOccurs="200" 
type="TipoAlumno"/> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 
<xs:complexType name="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> 
Ejemplo 
Permite especificar 
rangos de inclusión 
Permite especificar 
tipos 
alumnos.xsd
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</nombre> 
<apellidos>Bueno</apellidos> 
</alumno> 
Simples 
Simples: No contienen sub-elementos ni atributos 
Pueden aparecer dentro de elementos o en valores de 
atributos
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 
xmlns="http://www.uniovi.es/alumnos” 
xsi:schemaLocation=“http://www.uniovi.es/alumnos 
alumnos.xsd” 
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"> 
. . . 
</alumnos> 
alumnos.xml
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" 
type="TipoAlumno"/> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 
<xs:complexType <alumnos 
name="TipoAlumno"> 
<xs:sequence> 
alumnos.xml 
xmlns="http://www.uniovi.es/alumnos” 
xsi:schemaLocation=“http://www.uniovi.es/alumnos 
<xs:element name="nombre" type="xs:string"/> 
<xs:element name="apellidos" type="alumnos.xs:string"/> 
xsd” 
<xs:element name="nacim" type="xs:gYear"/> 
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"> 
. . . 
</alumnos> 
</xs:sequence> 
<xs:attribute name="dni" type="xs:integer"/> 
</xs:complexType> 
</xs:schema> 
Los espacios de nombres 
deben coincidir. 
También puede usarse: 
xsi:noNameSpaceLocation
Tipos Anónimos vs. 
con nombre 
<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="alumno" type="TipoPersona"/> 
… 
<xs:ComplexType name="TipoPersona"> 
<xs:sequence> 
<xs:element name="nombre" type="xs:string"/> 
<xs:element name="apellidos" type="xs:string"/> 
</xs:sequence> 
</xs:ComplexType> 
+ legible 
+ Reutilizable
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:element ref="alumno" /> 
</xs:sequence> 
</xs:element>
Tipos complejos: Creación a partir de tipos 
simples 
<xs:element name="precio"> 
<xs:complexType> 
<xs:simpleContent> 
<xs:extension base="xs:decimal"> 
<xs:attribute name="moneda" type="xs:string" /> 
</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>
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>
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:element name="autor" type="xs:string"/> 
<xs:element name="título" type="xs:string"/> 
</xs:all> 
</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:group name="nombApell"> 
<xs:sequence> 
<xs:sequence> 
<xs:element name="nombre" type="xs:string"/> 
<xs:element name="apellidos" type="xs:string"/> 
<xs:element name="nombre" type="xs:string"/> 
<xs:element name="apellidos" type="xs:string"/> 
</xs:sequence> 
</xs:sequence> 
</xs:group> 
</xs:group> 
<xs:complexType name="TipoAlumno"> 
<xs:group ref="nombApell" /> 
<xs:element name="carrera" type="xs:string"/> 
</xs:complexType> 
<xs:complexType name="TipoAlumno"> 
<xs:group ref="nombApell" /> 
<xs:element name="carrera" type="xs:string"/> 
</xs:complexType>
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)
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
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> 
<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:simpleType name="mes"> 
<xs:restriction base=“xs:integer"> 
<xs:minInclusive value="1" /> 
<xs:maxInclusive value="31" /> 
<xs:minInclusive value="1" /> 
<xs:maxInclusive value="31" /> 
</xs:restriction> 
</xs:simpleType> 
</xs:restriction> 
</xs:simpleType>
Listas 
<xs:simpleType name=“ListaComponentes"> 
<xs:list itemType=“TipoComponente"/> 
</xs:simpleType> 
<xs:simpleType name=“ListaComponentes"> 
<xs:list itemType=“TipoComponente"/> 
</xs:simpleType> 
<xs:simpleType name=“Tipoomponente"> 
<xs:restriction base="xs:nonNegativeInteger"> 
<xs:simpleType name=“Tipoomponente"> 
<xs:restriction base="xs:nonNegativeInteger"> 
<xs:maxInclusive value="255" /> 
<xs:maxInclusive value="255" /> 
</xs:restriction> 
</xs:simpleType> 
</xs:restriction> 
</xs:simpleType> 
Se pueden aplicar las facetas: length, maxLength, minLength, enumeration 
<xs:simpleType name="ColorRGB"> 
<xs:simpleType name="ColorRGB"> 
<xs:restriction base="ListaComponentes"> 
<xs:restriction base="ListaComponentes"> 
<xs:length value="3" /> 
<xs:length value="3" /> 
</xs:restriction> 
</xs:restriction> 
</xs:simpleType> 
</xs:simpleType> 
<<ccoolloorr>>225555 225555 00<<//ccoolloorr>>
Uniones 
<xs:simpleType name="TipoNota"> 
<xs:union> 
<xs:simpleType name="TipoNota"> 
<xs:union> 
<xs:simpleType> 
<xs:simpleType> 
<xs:restriction base="xs:float"> 
<xs:restriction base="xs:float"> 
<xs:maxInclusive value="10" /> 
<xs:minInclusive value="0" /> 
<xs:maxInclusive value="10" /> 
<xs:minInclusive value="0" /> 
</xs:restriction> 
</xs:restriction> 
</xs:simpleType> 
<xs:simpleType> 
</xs:simpleType> 
<xs:simpleType> 
<xs:restriction base="xs:string"> 
<xs:restriction base="xs:string"> 
<xs:enumeration value="No presentado" /> 
<xs:enumeration value="No presentado" /> 
</xs:restriction> 
</xs:restriction> 
</xs:simpleType> 
</xs:simpleType> 
</xs:union> 
</xs:simpleType> 
</xs:union> 
</xs:simpleType> 
<nota> 5.75 </nota> 
<nota> No presentado </nota> 
<xs:element name="nota" type="TipoNota" /> 
<xs:element name="nota" type="TipoNota" />
Expresiones regulares 
Ejemplos de expresiones regulares 
<xs:simpleType name="NIF"> 
<xs:restriction base="xs:token"> 
<xs:simpleType name="NIF"> 
<xs:restriction base="xs:token"> 
<xs:pattern value="d{7,8}[A-Z]" /> 
<xs:pattern value="d{7,8}[A-Z]" /> 
</xs:restriction> 
</xs:simpleType> 
</xs:restriction> 
</xs:simpleType> 
<xs:element name="nif" type="NIF" /> 
<xs:element name="nif" type="NIF" /> 
<nif>9394173J</nif> 
<nif>11079845M</nif> 
Expresión Posibles valores 
Elemento 2 
b, ab, aab, aaab, … 
xb, yb, zb 
b, ab 
ab, aab, aaab, … 
ax, bx, cx 
Elemento d 
a*b 
[xyz]b 
a?b 
a+b 
[a-c]x
Expresiones Regulares 
[a-c]x 
[^0-9]x 
Dx 
(pa){2}rucha 
.abc 
(a|b)+x 
a{1,3}x 
n 
p{Lu} 
p{Sc} 
ax, bx, cx 
Carácter ¹ dígito seguido de x 
Carácter ¹ dígito seguido de x 
paparucha 
Cualquier carácter (1) seguido de abc 
ax, bx, aax, bbx, abx, bax,... 
ax, aax, aaax 
Salto de línea 
Letra mayúscula 
Símbolo de moneda
Tipos Derivados por Extensión 
Similar a las subclases de POO: Añadir elementos a un tipo base 
<xs:complexType name="Figura" > 
<xs:complexType name="Figura" > 
<xs:attribute name="color" type="Color"/> 
</xs:complexType> 
<xs:attribute name="color" type="Color"/> 
</xs:complexType> 
<xs:complexType name="Rectángulo"> 
<xs:complexContent> 
<xs:extension base="Figura"> 
<xs:attribute name="base" type="xs:float" /> 
<xs:attribute name="altura" type="xs:float" /> 
</xs:extension> 
</xs:complexContent> 
</xs:complexType> 
<xs:complexType name="Rectángulo"> 
<xs:complexContent> 
<xs:extension base="Figura"> 
<xs:attribute name="base" type="xs:float" /> 
<xs:attribute name="altura" type="xs:float" /> 
</xs:extension> 
</xs:complexContent> 
</xs:complexType> 
<xs:complexType name="Círculo"> 
...similar pero incluyendo el radio 
</xs:complexType> 
<xs:complexType name="Círculo"> 
...similar pero incluyendo el radio 
</xs:complexType>
Tipos Derivados por Extensión 
Los tipos derivados pueden utilizarse en los mismos sitios que la clase 
base 
<xs:element name="figuras"> 
<xs:element name="figuras"> 
<xs:complexType> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="figura" type="Figura" 
<xs:sequence> 
<xs:element name="figura" type="Figura" 
maxOccurs="unbounded" /> 
maxOccurs="unbounded" /> 
</xs:sequence> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:complexType> 
</xs:element> 
<figuras> 
<figura base="23" altura="3" xsi:type="Rectángulo" /> 
<figura radio="3" xsi:type="Círculo" /> 
</figuras> 
<figuras> 
<figura base="23" altura="3" xsi:type="Rectángulo" /> 
<figura radio="3" xsi:type="Círculo" /> 
</figuras> 
Es necesario especificar el 
tipo mediante xsi:type
Tipos Abstractos 
Mediante abstract="true" se declara un tipo como abstracto. 
Ese tipo no puede usarse directamente 
<xs:complexType name="Figura" abstract="true"> 
<xs:complexType name="Figura" abstract="true"> 
<xs:attribute name="color" type="Color"/> 
</xs:complexType> 
<xs:attribute name="color" type="Color"/> 
</xs:complexType> 
También es posible limitar la derivación de tipos 
final="restriction"
Declaración de Atributos 
<xs:complexType name="Círculo"> 
<xs:attribute name="radio" 
<xs:complexType name="Círculo"> 
<xs:attribute name="radio" 
type="xs:float" 
use="required" /> 
type="xs:float" 
use="required" /> 
<xs:attribute name="color" 
<xs:attribute name="color" 
type="Color" 
default="255 0 0"/> 
type="Color" 
default="255 0 0"/> 
<xs:attribute name="tipo" 
<xs:attribute name="tipo" 
type="xs:string" 
fixed="jpeg" /> 
type="xs:string" 
fixed="jpeg" /> 
</xs:complexType> 
</xs:complexType> 
Por defecto los atributos son 
opcionales. Indicar que son 
obligatorios: use="required" 
Valor por defecto de un atributo. 
Podría definirse otro valor. 
Valor fijo de un atributo. Si no se 
define, se utiliza ése. Si se define, 
debe coincidir.
Inclusión de Esquemas 
include permite incluir elementos de otros esquemas 
Los elementos deben estar en el mismo espacio de nombres 
Es como si se hubiesen tecleado todos en un mismo fichero 
Alumnos.xsd Profesores.xsd 
<xsd:schema …> 
<xsd:include schemaLocation="Alumnos.xsd"/> 
<xsd:include schemaLocation="Profesores.xsd"/> 
… 
</xsd:schema> 
Universidad.xsd
Importación de Esquemas 
import permite incluir elementos de otros esquemas 
con distintos espacios de nombres 
Espacio de 
nombres A 
Alumnos.xsd 
Espacio de 
nombres P 
Profes.xsd 
<xsd:schema …> 
<xsd:import namespace="A" schemaLocation="Alumnos.xsd"/> 
<xsd:import namespace="P" schemaLocation="Profes.xsd"/> 
… 
</xsd:schema> 
Universidad.xsd
Redefinición de Esquemas 
redefine es similar a include pero permite modificar los 
elementos incluidos. 
Alumnos.xsd 
Añade el elemento nota 
<xs:redefine schemaLocation="Alumnos.xsd"> 
<xs:complexType name="TipoAlumno"> 
<xs:complexContent> 
<xs:extension base="TipoAlumno"> 
<xs:sequence> 
<xs:element name="nota" type="Nota" /> 
</xs:sequence> 
</xs:extension> 
</xs:complexContent> 
</xs:complexType> 
</xs:redefine> 
AlumnosConNotas.xsd
Claves y Unicidad 
Los DTDs proporcionaban el atributo ID para marcar 
la unicidad (un valor ID era único en todo el 
documento) 
XML Schema tiene más posibilidades: 
Indicar que un elemento es único (unique) 
Definir atributos únicos 
Definir combinaciones de elementos y atributos como 
únicos 
Distinción entre unicidad y claves (key) 
Clave = además de ser único, debe existir y 
no puede ser nulo. 
Declarar el rango de un documento en el que algo es único
Claves y Unicidad 
<xs:complexType name="Alumnos"> 
<xs:sequence> 
<xs:element name="Alumno" type="TipoAlumno"/> 
</xs:sequence> 
<xs:key name=“ClaveDNI"> 
<xs:selector xpath="a:alumno"/> 
<xs:field xpath="a:dni"/> 
</xs:key> 
</xs:complexType> 
Es necesario incluir el espacio 
de nombres (XPath) 
La clave puede formarse para 
atributos y elementos 
<xs:key name=“ClaveDNI"> 
<xs:selector xpath="a:alumno"/> 
<xs:field xpath="a:apells"/> 
<xs:field xpath="a:nombre"/> 
</xs:key> 
Una clave puede estar formada 
por varios elementos
Claves y Unicidad 
<xs:complexType name="Alumnos"> 
<xs:sequence> 
<xs:element name="Alumno" type="TipoAlumno"/> 
</xs:sequence> 
<xs:unique name="DNI"> 
<xs:selector xpath="a:alumno"/> 
<xs:field xpath="a:dni"/> 
</xs:unique> 
</xs:complexType> 
Unique especifica que debe 
ser único, pero podría no existir
Referencias a Claves 
keyref especifica que debe hacer referencia a una clave (Claves Externas) 
<xs:element name="clase"> 
<xs:sequence> 
<xs:element name="clase"> 
<xs:sequence> 
<xs:element name="alumnos" ... 
<xs:element name="delegado" ... 
</xs:sequence> 
<xs:element name="alumnos" ... 
<xs:element name="delegado" ... 
</xs:sequence> 
<xs:key name="DNI"> 
<xs:selector xpath="a:alumnos/a:alumno"/> 
<xs:field xpath="a:dni"/> 
</xs:key> 
<xs:key name="DNI"> 
<xs:selector xpath="a:alumnos/a:alumno"/> 
<xs:field xpath="a:dni"/> 
</xs:key> 
<xs:keyref name="Delegado" refer="DNI"> 
<xs:keyref name="Delegado" refer="DNI"> 
<xs:selector xpath="a:delegado"/> 
<xs:field xpath="a:dni"/> 
<xs:selector xpath="a:delegado"/> 
<xs:field xpath="a:dni"/> 
</xs:keyref> 
</xs:keyref>
Valores Nulos 
Indicar que un elemento puede ser nulo sin estar vacío. 
Vacío (Empty): Un elemento sin contenido 
Nulo (Nil): Un elemento que indica que no hay valor 
<xsd:element name="Persona"> 
<xsd:element name="Persona"> 
<xsd:complexType> 
<xsd:element name="nombre" type="xsd:NMTOKEN"/> 
<xsd:element name="primerApell" type="xsd:NMTOKEN"/> 
<xsd:element name="segundoApell" type="xsd:NMTOKEN" 
<xsd:complexType> 
<xsd:element name="nombre" type="xsd:NMTOKEN"/> 
<xsd:element name="primerApell" type="xsd:NMTOKEN"/> 
<xsd:element name="segundoApell" type="xsd:NMTOKEN" 
nillable="true"/> 
</xsd:complexType> 
</xsd:element> 
nillable="true"/> 
</xsd:complexType> 
</xsd:element> 
<<persona> 
persona> 
<nombre>John</nombre> 
<primerApell>Smith</primerApell> 
<segundoApell xsi:nil="true"/> 
<nombre>John</nombre> 
<primerApell>Smith</primerApell> 
<segundoApell xsi:nil="true"/> 
</persona> 
</persona> 
El segundo apellido puede 
ser un NMTOKEN o estar 
indefinido
Incluir cualquier contenido... 
any indica cualquier contenido de un determinado espacio de nombres 
anyAttribute cualquier atributo de un espacio de nombres 
<xs:complexType name="Comentario"> 
<xs:sequence> 
<xs:complexType name="Comentario"> 
<xs:sequence> 
<xs:any namespace="http://www.w3.org/1999/xhtml" 
<xs:any namespace="http://www.w3.org/1999/xhtml" 
minOccurs="1" 
processContents="skip" /> 
minOccurs="1" 
processContents="skip" /> 
</xs:sequence> 
<xs:anyAttribute 
</xs:sequence> 
<xs:anyAttribute 
namespace="http://www.w3.org/1999/xhtml"/> 
namespace="http://www.w3.org/1999/xhtml"/> 
</xs:complexType> 
</xs:complexType> 
<comentarios> 
<html:p>Es un 
<html:emph>Listillo</html:emph> 
</html:p> 
</comentarios> 
También puede declararse 
##any, ##local, ##other 
Otros valores 
strict = obliga a validar 
lax = valida si es posible
XML Schema 
Limitaciones 
No soporta entidades. Mecanismo para crear macros 
<!ENTITY &texto; "Esto texto se repite muchas veces" > 
Es necesario seguir usando los DTDs  
Lenguaje de Restricciones limitado 
Ejemplo: ¿Verificar valor total = suma de valores parciales? 
Sensibilidad al contexto limitada 
Por ejemplo: Especificar que el contenido depende del valor de un 
atributo 
<transporte tipo="coche"> ...</transporte> 
<transporte tipo="avión"> ...</transporte> 
Tamaño de archivos XML Schema puede ser excesivo 
Legibilidad de las especificaciones...XML no siempre es legible 
Complejidad de la especificación: 
Muchas situaciones/combinaciones excepcionales
Otras Técnicas 
Relax NG 
Schematron
Otras técnicas 
Relax NG 
Relax NG. Desarrollado por OASIS a partir de TREX y 
RELAX 
Estandarizado por ISO como parte 2 del DSDL (Document 
Schema Definition Languages) 
Soporta mayor número de restricciones y gramáticas 
ambigüas 
Incluye una sintaxis abreviada (no XML)
Otras Técnicas 
Relax NG 
<element name="a:alumnos" 
<element name="a:alumnos" 
xmlns="http://relaxng.org/ns/structure/1.0" 
xmlns:a="http://www.uniovi.es/alumnos" 
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
xmlns="http://relaxng.org/ns/structure/1.0" 
xmlns:a="http://www.uniovi.es/alumnos" 
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
<zeroOrMore> 
<element name="a:alumno"> 
<attribute name="dni"> 
<zeroOrMore> 
<element name="a:alumno"> 
<attribute name="dni"> 
<data type="nonNegativeInteger" /> 
</attribute> 
<element name="a:nombre"><text/></element> 
<element name="a:apellidos"><text/></element> 
<element name="a:nota"><data type="double" /></element> 
<element name="a:email"><text/></element> 
</element> 
</zeroOrMore> 
</element> 
<data type="nonNegativeInteger" /> 
</attribute> 
<element name="a:nombre"><text/></element> 
<element name="a:apellidos"><text/></element> 
<element name="a:nota"><data type="double" /></element> 
<element name="a:email"><text/></element> 
</element> 
</zeroOrMore> 
</element>
Otras Técnicas 
Relax NG 
Relax NG permite mayor expresividad 
Ejemplo: 
Un alumno debe tener un atributo DNI o un elemento DNI, pero 
no ambos
Otras Técnicas 
Relax NG 
<element name="a:alumnos" 
xmlns="http://relaxng.org/ns/structure/1.0" 
xmlns:a="http://www.uniovi.es/alumnos" 
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
<zeroOrMore> 
<element name="a:alumno"> 
<choice> 
<attribute name="dni"><data type="nonNegativeInteger" /></attribute> 
<element name="a:dni"><data type="nonNegativeInteger" /></element> 
</choice> 
<element name="a:nombre"><text/></element> 
<element name="a:apellidos"><text/></element> 
<element name="a:nota"><data type="double" /></element> 
<element name="a:email"><text/></element> 
</element> 
</zeroOrMore> 
</element>
Otras Técnicas 
Relax NG 
Otro ejemplo: 
Los alumnos de tipo=“delegado” solamente tienen nombre y 
apellidos.
Otras Técnicas 
Relax NG 
<element name="a:alumnos" 
xmlns="http://relaxng.org/ns/structure/1.0" 
xmlns:a="http://www.uniovi.es/alumnos" 
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
<zeroOrMore> 
<choice> 
<element name="a:alumno"> 
<attribute name="tipo"><value>delegado</value></attribute> 
<element name="a:nombre"><text/></element> 
<element name="a:apellidos"><text/></element> 
</element> 
<element name="a:alumno"> 
<element name="a:nombre"><text/></element> 
<element name="a:apellidos"><text/></element> 
<element name="a:nota"><data type="double" /></element> 
</element> 
</choice> 
</zeroOrMore> 
</element>
Otras Técnicas 
Schematron 
Schematron fue desarrollado por Rick Jelliffe 
Estandarizado por ISO como parte 3 del DSDL (Document 
Schema Definition Languages) 
Utiliza un modelo basado en reglas (en vez de gramáticas) 
Asocia reglas de validación a expresiones XPath 
Puede expresar restricciones arbitrarias
Otras Técnicas Schematron 
<?xml version="1.0" encoding="UTF-8"?> 
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron"> 
<sch:pattern name="Chequear DNIs"> 
<sch:rule context="alumno"> 
<sch:assert test="@dni &gt; 10000000 and @dni &lt; 99999999"> 
El dni debe estar entre 10000000 y 99999999</sch:assert> 
</sch:rule> 
</sch:pattern> 
<sch:pattern name="Chequear nota"> 
<sch:rule context="media"> 
<sch:assert test="sum(//alumno/nota) div count(//alumno/nota) = ."> 
No encaja la media 
</sch:assert> 
</sch:rule> 
</sch:pattern> 
</sch:schema>
Otras Técnicas 
Fundamentos teóricos 
Taxonomy of XML Schema languages using Formal Language Theory, M. 
Murata, D. Lee, M. Mani, K. Kawaguchi, ACM Transactions on Internet 
Technology, 2005 
Relax NG ≈ Regular tree grammars 
XML Schema ≈ Simple type tree grammars 
DTDs ≈ local tree grammars
Ejercicios 
Herramientas: 
xmllint: Contiene la opción --schema que valida contra un esquema 
xmllint --schema alumnos.xsd alumnos.xml 
xsv (http://www.ltg.ed.ac.uk/~ht/xsv-status.html) 
Herramienta desarrollada en Python 
Funcionamiento a través de Web o en línea de 
comandos 
Salida en formato XML (difícil de leer al principio)
Diseño Vocabularios XML
Diseño 
Vocabularios XML 
Separación tradicional de dos mundos 
Sistemas orientados a Datos 
Información uniforme y fuertemente estructurada (ej. 
Tablas) 
Mucha cantidad de información repetida 
Objetivo: Procesamiento eficiente (Almacenes de 
datos) 
Sistemas orientados a Documentación 
Información poco uniforme y entrelazada (ej. Libros) 
No existe un patrón uniforme 
Objetivo: Comunicación, Presentación (Mensajes) 
Se podría añadir un tercer mundo: 
Programación Orientada a Objetos 
Propuestas para añadir capacidad de programación a documentos 
XML: Información semi-estructurada (Lugar intermedio) 
Estructuras jerárquicas entrelazadas
Orientación del esquema 
Datos vs. Documentos 
<factura> 
<emisión>23-2-2006</emisión> 
<envío>3-3-2006</envío> 
<dirección> 
<nombre>Luis Caro</nombre> 
<calle>Uría</calle> 
<numero>2</numero> 
<ciudad>Gijón</ciudad> 
<cp>33021</cp> 
</dirección> 
<tlfno>985102012</tlfno> 
</factura> 
<nota fecha=“23-2-2006”> 
<de>Juan Lopez</de> 
<para>Luis Caro</para> 
<asunto>Encargo</asunto> 
<msg> 
Necesito darte el encargo. 
Puedes enviarme un correo a 
<email>caro@gijon.com</email> 
o me llamas al 
<tlfno>985102012</tlfno> 
</msg> 
</nota> 
Orientado a Datos Orientado a Documentos
Diseño 
Vocabularios XML 
Características a tener en cuenta 
Tamaño de documentos 
Facilidad de escritura 
Facilidad de procesamiento 
Flexibilidad (ej. HTML es muy flexible, Bases de Datos = menos) 
Consistencia: Evitar características incoherentes 
Nivel de abstracción: Buscar término medio en nivel de detalle 
<fecha>10 Marzo 2003</fecha> 
<fecha><día>10</dia><mes>Marzo</mes><año>2003</año>< 
/fecha> 
Patrones de diseño: 
www.xmlpatterns.com
Ejemplo de Discusión 
¿Atributos o Elementos? <pizza 
nombre="Margarita" 
precio=“6” /> 
<pizza> 
<nombre>Margarita </nombre> 
<precio>6</precio> 
</pizza> 
Representación de propiedades 
Razones filosóficas: 
Atributos: valores asociados con objetos sin identidad propia (edad) 
Subelementos: valores con identidad propia (fecha-nacimiento) 
Orígenes (SGML): 
Atributos: meta-información (información sobre el contenido) 
Subelementos: Contenido
Ejemplo de Discusión 
¿Atributos o Elementos? <pizza 
nombre="Margarita" 
precio=“6” /> 
<pizza> 
<nombre>Margarita </nombre> 
<precio>6</precio> 
</pizza> 
Representación de propiedades 
En los DTDs 
Pueden incluirse restricciones sobre su valor 
Ej. valor “si” o “no” 
Pueden definirse valores por defecto 
Pueden validarse los valores ID e IDREF 
Pueden definirse restricciones sobre espacios 
en blanco (NMTOKENS) 
Ocupan menos espacio 
Más fáciles de procesar (SAX y DOM) 
Acceso a entidades externas (datos binarios) 
Soportan valores arbitrariamente complejos y 
repetidos 
Establecen un orden 
Soportan atributos de atributos 
Mayor flexibilidad ante modificaciones
Diseño Vocabularios 
En resumen... 
...Aparición de una nueva torre de Babel... 
Algunos Consejos: 
Estudiar dominio de la Aplicación (ver estándares ya definidos!!!) 
Considerar futuras ampliaciones (extensibilidad) 
Validar antes de que sea tarde 
Usar espacios de nombres 
etc. etc.
Fin

Más contenido relacionado

La actualidad más candente

CSS Dasar #8 : Pseudo-class
CSS Dasar #8 : Pseudo-classCSS Dasar #8 : Pseudo-class
CSS Dasar #8 : Pseudo-classSandhika Galih
 
SQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics CoveredSQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics CoveredDanish Mehraj
 
Modelos de Base de Datos - Indice invertido y Jerárquico
Modelos de Base de Datos - Indice invertido y JerárquicoModelos de Base de Datos - Indice invertido y Jerárquico
Modelos de Base de Datos - Indice invertido y JerárquicoLuis Moli
 
CSS Layouting #4 : Float
CSS Layouting #4 : FloatCSS Layouting #4 : Float
CSS Layouting #4 : FloatSandhika Galih
 
Media queries A to Z
Media queries A to ZMedia queries A to Z
Media queries A to ZShameem Reza
 
Typescript: Beginner to Advanced
Typescript: Beginner to AdvancedTypescript: Beginner to Advanced
Typescript: Beginner to AdvancedTalentica Software
 
Class and object in c++
Class and object in c++Class and object in c++
Class and object in c++NainaKhan28
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clasesjmachado614
 
Encapsulation in C++
Encapsulation in C++Encapsulation in C++
Encapsulation in C++Hitesh Kumar
 
Use Amazon Rekognition to Build a Facial Recognition System
Use Amazon Rekognition to Build a Facial Recognition SystemUse Amazon Rekognition to Build a Facial Recognition System
Use Amazon Rekognition to Build a Facial Recognition SystemAmazon Web Services
 
9- Learn CSS Fundamentals / Pseudo-classes
9- Learn CSS Fundamentals / Pseudo-classes9- Learn CSS Fundamentals / Pseudo-classes
9- Learn CSS Fundamentals / Pseudo-classesIn a Rocket
 
Unidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacionUnidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacionLuiS YmAY
 
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a  Programación Orientada a Objetos (OOP): Clases y ObjetosIntroducción a  Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a Programación Orientada a Objetos (OOP): Clases y ObjetosKudos S.A.S
 

La actualidad más candente (20)

Apuntes de XSD
Apuntes de XSDApuntes de XSD
Apuntes de XSD
 
CSS Dasar #1 : Intro
CSS Dasar #1 : IntroCSS Dasar #1 : Intro
CSS Dasar #1 : Intro
 
CSS media types
CSS media typesCSS media types
CSS media types
 
CSS Dasar #8 : Pseudo-class
CSS Dasar #8 : Pseudo-classCSS Dasar #8 : Pseudo-class
CSS Dasar #8 : Pseudo-class
 
cc302modulo2
cc302modulo2cc302modulo2
cc302modulo2
 
SQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics CoveredSQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics Covered
 
Modelos de Base de Datos - Indice invertido y Jerárquico
Modelos de Base de Datos - Indice invertido y JerárquicoModelos de Base de Datos - Indice invertido y Jerárquico
Modelos de Base de Datos - Indice invertido y Jerárquico
 
CSS Layouting #4 : Float
CSS Layouting #4 : FloatCSS Layouting #4 : Float
CSS Layouting #4 : Float
 
Media queries A to Z
Media queries A to ZMedia queries A to Z
Media queries A to Z
 
Typescript: Beginner to Advanced
Typescript: Beginner to AdvancedTypescript: Beginner to Advanced
Typescript: Beginner to Advanced
 
Class and object in c++
Class and object in c++Class and object in c++
Class and object in c++
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
XSLT
XSLTXSLT
XSLT
 
Encapsulation in C++
Encapsulation in C++Encapsulation in C++
Encapsulation in C++
 
Html tutorials
Html tutorialsHtml tutorials
Html tutorials
 
Use Amazon Rekognition to Build a Facial Recognition System
Use Amazon Rekognition to Build a Facial Recognition SystemUse Amazon Rekognition to Build a Facial Recognition System
Use Amazon Rekognition to Build a Facial Recognition System
 
9- Learn CSS Fundamentals / Pseudo-classes
9- Learn CSS Fundamentals / Pseudo-classes9- Learn CSS Fundamentals / Pseudo-classes
9- Learn CSS Fundamentals / Pseudo-classes
 
Unidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacionUnidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacion
 
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a  Programación Orientada a Objetos (OOP): Clases y ObjetosIntroducción a  Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
 
modelo entidad-relacion
modelo entidad-relacionmodelo entidad-relacion
modelo entidad-relacion
 

Destacado

Ejercicio - Personal de departamentos (XSD - XML Schema)
Ejercicio - Personal de departamentos (XSD - XML Schema)Ejercicio - Personal de departamentos (XSD - XML Schema)
Ejercicio - Personal de departamentos (XSD - XML Schema)Abrirllave
 
Ejercicios de XSD
Ejercicios de XSDEjercicios de XSD
Ejercicios de XSDAbrirllave
 
A missa– parte por parte
A missa– parte por parteA missa– parte por parte
A missa– parte por parteJean
 
Tutorial XML
Tutorial XMLTutorial XML
Tutorial XMLyumaniko
 
A santa missa para crianças.
A santa missa   para crianças.A santa missa   para crianças.
A santa missa para crianças.Izabel Sampaio
 

Destacado (8)

XML Schema
XML SchemaXML Schema
XML Schema
 
XML y DTDs
XML y DTDsXML y DTDs
XML y DTDs
 
Chuleta de DTD
Chuleta de DTDChuleta de DTD
Chuleta de DTD
 
Ejercicio - Personal de departamentos (XSD - XML Schema)
Ejercicio - Personal de departamentos (XSD - XML Schema)Ejercicio - Personal de departamentos (XSD - XML Schema)
Ejercicio - Personal de departamentos (XSD - XML Schema)
 
Ejercicios de XSD
Ejercicios de XSDEjercicios de XSD
Ejercicios de XSD
 
A missa– parte por parte
A missa– parte por parteA missa– parte por parte
A missa– parte por parte
 
Tutorial XML
Tutorial XMLTutorial XML
Tutorial XML
 
A santa missa para crianças.
A santa missa   para crianças.A santa missa   para crianças.
A santa missa para crianças.
 

Similar a XML Schema: Introducción a los esquemas XML

Pyxser, Serialización XML en Python (paper)
Pyxser, Serialización XML en Python (paper)Pyxser, Serialización XML en Python (paper)
Pyxser, Serialización XML en Python (paper)damowe
 
Poo 1 concepto_basico
Poo 1 concepto_basicoPoo 1 concepto_basico
Poo 1 concepto_basicojlmanmons
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2Velmuz Buzz
 
Diseño i realizacion resumen
Diseño  i realizacion resumenDiseño  i realizacion resumen
Diseño i realizacion resumenxoshitha
 
Diseño i realizacion resumen
Diseño  i realizacion resumenDiseño  i realizacion resumen
Diseño i realizacion resumenxoshitha
 
Programación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxProgramación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxhassanbadredun
 
Crear Esquema
Crear EsquemaCrear Esquema
Crear EsquemaAntonio
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosAntonio Palomares Sender
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Sorey García
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentacionesmary taipe
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentacionesmary taipe
 
6. PROGRAMACION OO.pptx
6. PROGRAMACION OO.pptx6. PROGRAMACION OO.pptx
6. PROGRAMACION OO.pptxDieguess
 
Poo1conceptobasicoconinstanciacion
Poo1conceptobasicoconinstanciacionPoo1conceptobasicoconinstanciacion
Poo1conceptobasicoconinstanciacionjlmanmons
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDesarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDidier Granados
 

Similar a XML Schema: Introducción a los esquemas XML (20)

Pyxser, Serialización XML en Python (paper)
Pyxser, Serialización XML en Python (paper)Pyxser, Serialización XML en Python (paper)
Pyxser, Serialización XML en Python (paper)
 
Poo 1 concepto_basico
Poo 1 concepto_basicoPoo 1 concepto_basico
Poo 1 concepto_basico
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2
 
Diseño i realizacion resumen
Diseño  i realizacion resumenDiseño  i realizacion resumen
Diseño i realizacion resumen
 
Diseño i realizacion resumen
Diseño  i realizacion resumenDiseño  i realizacion resumen
Diseño i realizacion resumen
 
Xml
XmlXml
Xml
 
Programación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptxProgramación II_modulo1lolololololo9oo.pptx
Programación II_modulo1lolololololo9oo.pptx
 
Crear Esquema
Crear EsquemaCrear Esquema
Crear Esquema
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetos
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)
 
XSLT
XSLTXSLT
XSLT
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentaciones
 
Maria taipe..presentaciones
Maria taipe..presentacionesMaria taipe..presentaciones
Maria taipe..presentaciones
 
6. PROGRAMACION OO.pptx
6. PROGRAMACION OO.pptx6. PROGRAMACION OO.pptx
6. PROGRAMACION OO.pptx
 
Poo1conceptobasicoconinstanciacion
Poo1conceptobasicoconinstanciacionPoo1conceptobasicoconinstanciacion
Poo1conceptobasicoconinstanciacion
 
Poo
PooPoo
Poo
 
Lectura de un archivo xml de manera local en wp
Lectura de un archivo xml de manera local en wpLectura de un archivo xml de manera local en wp
Lectura de un archivo xml de manera local en wp
 
Almdedat
AlmdedatAlmdedat
Almdedat
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDesarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
 

Más de Jose Emilio Labra Gayo

Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctoradoJose Emilio Labra Gayo
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapesJose Emilio Labra Gayo
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data qualityJose Emilio Labra Gayo
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesJose Emilio Labra Gayo
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesJose Emilio Labra Gayo
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosJose Emilio Labra Gayo
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorJose Emilio Labra Gayo
 

Más de Jose Emilio Labra Gayo (20)

Publicaciones de investigación
Publicaciones de investigaciónPublicaciones de investigación
Publicaciones de investigación
 
Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctorado
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapes
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data quality
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectives
 
Wikidata
WikidataWikidata
Wikidata
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologies
 
ShEx by Example
ShEx by ExampleShEx by Example
ShEx by Example
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
Introducción a la Web Semántica
Introducción a la Web SemánticaIntroducción a la Web Semántica
Introducción a la Web Semántica
 
RDF Data Model
RDF Data ModelRDF Data Model
RDF Data Model
 
2017 Tendencias en informática
2017 Tendencias en informática2017 Tendencias en informática
2017 Tendencias en informática
 
RDF, linked data and semantic web
RDF, linked data and semantic webRDF, linked data and semantic web
RDF, linked data and semantic web
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazados
 
16 Alternativas XML
16 Alternativas XML16 Alternativas XML
16 Alternativas XML
 
XPath
XPathXPath
XPath
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el Servidor
 
RDF validation tutorial
RDF validation tutorialRDF validation tutorial
RDF validation tutorial
 

Último

institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenajuniorcuellargomez
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdflauradbernals
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdfedwinmelgarschlink2
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfOscarBlas6
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAdanielaerazok
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenadanielaerazok
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfisrael garcia
 
Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webDecaunlz
 

Último (8)

institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalena
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdf
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdf
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalena
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
 
Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la web
 

XML Schema: Introducción a los esquemas XML

  • 1. Jose Emilio Labra Gayo - Universidad de Oviedo XML Schema Departamento de Informática Universidad de Oviedo
  • 2. 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.
  • 3. 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
  • 4. <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> Elemento raíz schema y espacio de nombres determinado <xs:sequence> <xs:element name="alumno" minOccurs="1" maxOccurs="200" type="TipoAlumno"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="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> Ejemplo Permite especificar rangos de inclusión Permite especificar tipos alumnos.xsd
  • 5. 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>
  • 6. Tipos Complejos vs Simples Pueden declararse 2 tipos: Complejos: Pueden contener sub-elementos y atributos Ejemplo de Tipo Complejo <alumno dni=“9873435”> <nombre>Jose</nombre> <apellidos>Bueno</apellidos> </alumno> Simples Simples: No contienen sub-elementos ni atributos Pueden aparecer dentro de elementos o en valores de atributos
  • 7. 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 xmlns="http://www.uniovi.es/alumnos” xsi:schemaLocation=“http://www.uniovi.es/alumnos alumnos.xsd” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"> . . . </alumnos> alumnos.xml
  • 8. 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" type="TipoAlumno"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType <alumnos name="TipoAlumno"> <xs:sequence> alumnos.xml xmlns="http://www.uniovi.es/alumnos” xsi:schemaLocation=“http://www.uniovi.es/alumnos <xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="alumnos.xs:string"/> xsd” <xs:element name="nacim" type="xs:gYear"/> xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"> . . . </alumnos> </xs:sequence> <xs:attribute name="dni" type="xs:integer"/> </xs:complexType> </xs:schema> Los espacios de nombres deben coincidir. También puede usarse: xsi:noNameSpaceLocation
  • 9. Tipos Anónimos vs. con nombre <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="alumno" type="TipoPersona"/> … <xs:ComplexType name="TipoPersona"> <xs:sequence> <xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="xs:string"/> </xs:sequence> </xs:ComplexType> + legible + Reutilizable
  • 10. 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:element ref="alumno" /> </xs:sequence> </xs:element>
  • 11. Tipos complejos: Creación a partir de tipos simples <xs:element name="precio"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:decimal"> <xs:attribute name="moneda" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <precio moneda=“euros">23.45</precio>
  • 12. 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>
  • 13. 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>
  • 14. 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>
  • 15. 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:element name="autor" type="xs:string"/> <xs:element name="título" type="xs:string"/> </xs:all> </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>
  • 16. Agrupaciones Es posible nombrar agrupaciones de elementos y de atributos para hacer referencias a ellas <xs:group name="nombApell"> <xs:group name="nombApell"> <xs:sequence> <xs:sequence> <xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="xs:string"/> <xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="xs:string"/> </xs:sequence> </xs:sequence> </xs:group> </xs:group> <xs:complexType name="TipoAlumno"> <xs:group ref="nombApell" /> <xs:element name="carrera" type="xs:string"/> </xs:complexType> <xs:complexType name="TipoAlumno"> <xs:group ref="nombApell" /> <xs:element name="carrera" type="xs:string"/> </xs:complexType>
  • 17. 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
  • 18. 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)
  • 20. 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
  • 21. 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> <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:simpleType name="mes"> <xs:restriction base=“xs:integer"> <xs:minInclusive value="1" /> <xs:maxInclusive value="31" /> <xs:minInclusive value="1" /> <xs:maxInclusive value="31" /> </xs:restriction> </xs:simpleType> </xs:restriction> </xs:simpleType>
  • 22. Listas <xs:simpleType name=“ListaComponentes"> <xs:list itemType=“TipoComponente"/> </xs:simpleType> <xs:simpleType name=“ListaComponentes"> <xs:list itemType=“TipoComponente"/> </xs:simpleType> <xs:simpleType name=“Tipoomponente"> <xs:restriction base="xs:nonNegativeInteger"> <xs:simpleType name=“Tipoomponente"> <xs:restriction base="xs:nonNegativeInteger"> <xs:maxInclusive value="255" /> <xs:maxInclusive value="255" /> </xs:restriction> </xs:simpleType> </xs:restriction> </xs:simpleType> Se pueden aplicar las facetas: length, maxLength, minLength, enumeration <xs:simpleType name="ColorRGB"> <xs:simpleType name="ColorRGB"> <xs:restriction base="ListaComponentes"> <xs:restriction base="ListaComponentes"> <xs:length value="3" /> <xs:length value="3" /> </xs:restriction> </xs:restriction> </xs:simpleType> </xs:simpleType> <<ccoolloorr>>225555 225555 00<<//ccoolloorr>>
  • 23. Uniones <xs:simpleType name="TipoNota"> <xs:union> <xs:simpleType name="TipoNota"> <xs:union> <xs:simpleType> <xs:simpleType> <xs:restriction base="xs:float"> <xs:restriction base="xs:float"> <xs:maxInclusive value="10" /> <xs:minInclusive value="0" /> <xs:maxInclusive value="10" /> <xs:minInclusive value="0" /> </xs:restriction> </xs:restriction> </xs:simpleType> <xs:simpleType> </xs:simpleType> <xs:simpleType> <xs:restriction base="xs:string"> <xs:restriction base="xs:string"> <xs:enumeration value="No presentado" /> <xs:enumeration value="No presentado" /> </xs:restriction> </xs:restriction> </xs:simpleType> </xs:simpleType> </xs:union> </xs:simpleType> </xs:union> </xs:simpleType> <nota> 5.75 </nota> <nota> No presentado </nota> <xs:element name="nota" type="TipoNota" /> <xs:element name="nota" type="TipoNota" />
  • 24. Expresiones regulares Ejemplos de expresiones regulares <xs:simpleType name="NIF"> <xs:restriction base="xs:token"> <xs:simpleType name="NIF"> <xs:restriction base="xs:token"> <xs:pattern value="d{7,8}[A-Z]" /> <xs:pattern value="d{7,8}[A-Z]" /> </xs:restriction> </xs:simpleType> </xs:restriction> </xs:simpleType> <xs:element name="nif" type="NIF" /> <xs:element name="nif" type="NIF" /> <nif>9394173J</nif> <nif>11079845M</nif> Expresión Posibles valores Elemento 2 b, ab, aab, aaab, … xb, yb, zb b, ab ab, aab, aaab, … ax, bx, cx Elemento d a*b [xyz]b a?b a+b [a-c]x
  • 25. Expresiones Regulares [a-c]x [^0-9]x Dx (pa){2}rucha .abc (a|b)+x a{1,3}x n p{Lu} p{Sc} ax, bx, cx Carácter ¹ dígito seguido de x Carácter ¹ dígito seguido de x paparucha Cualquier carácter (1) seguido de abc ax, bx, aax, bbx, abx, bax,... ax, aax, aaax Salto de línea Letra mayúscula Símbolo de moneda
  • 26. Tipos Derivados por Extensión Similar a las subclases de POO: Añadir elementos a un tipo base <xs:complexType name="Figura" > <xs:complexType name="Figura" > <xs:attribute name="color" type="Color"/> </xs:complexType> <xs:attribute name="color" type="Color"/> </xs:complexType> <xs:complexType name="Rectángulo"> <xs:complexContent> <xs:extension base="Figura"> <xs:attribute name="base" type="xs:float" /> <xs:attribute name="altura" type="xs:float" /> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Rectángulo"> <xs:complexContent> <xs:extension base="Figura"> <xs:attribute name="base" type="xs:float" /> <xs:attribute name="altura" type="xs:float" /> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Círculo"> ...similar pero incluyendo el radio </xs:complexType> <xs:complexType name="Círculo"> ...similar pero incluyendo el radio </xs:complexType>
  • 27. Tipos Derivados por Extensión Los tipos derivados pueden utilizarse en los mismos sitios que la clase base <xs:element name="figuras"> <xs:element name="figuras"> <xs:complexType> <xs:complexType> <xs:sequence> <xs:element name="figura" type="Figura" <xs:sequence> <xs:element name="figura" type="Figura" maxOccurs="unbounded" /> maxOccurs="unbounded" /> </xs:sequence> </xs:sequence> </xs:complexType> </xs:element> </xs:complexType> </xs:element> <figuras> <figura base="23" altura="3" xsi:type="Rectángulo" /> <figura radio="3" xsi:type="Círculo" /> </figuras> <figuras> <figura base="23" altura="3" xsi:type="Rectángulo" /> <figura radio="3" xsi:type="Círculo" /> </figuras> Es necesario especificar el tipo mediante xsi:type
  • 28. Tipos Abstractos Mediante abstract="true" se declara un tipo como abstracto. Ese tipo no puede usarse directamente <xs:complexType name="Figura" abstract="true"> <xs:complexType name="Figura" abstract="true"> <xs:attribute name="color" type="Color"/> </xs:complexType> <xs:attribute name="color" type="Color"/> </xs:complexType> También es posible limitar la derivación de tipos final="restriction"
  • 29. Declaración de Atributos <xs:complexType name="Círculo"> <xs:attribute name="radio" <xs:complexType name="Círculo"> <xs:attribute name="radio" type="xs:float" use="required" /> type="xs:float" use="required" /> <xs:attribute name="color" <xs:attribute name="color" type="Color" default="255 0 0"/> type="Color" default="255 0 0"/> <xs:attribute name="tipo" <xs:attribute name="tipo" type="xs:string" fixed="jpeg" /> type="xs:string" fixed="jpeg" /> </xs:complexType> </xs:complexType> Por defecto los atributos son opcionales. Indicar que son obligatorios: use="required" Valor por defecto de un atributo. Podría definirse otro valor. Valor fijo de un atributo. Si no se define, se utiliza ése. Si se define, debe coincidir.
  • 30. Inclusión de Esquemas include permite incluir elementos de otros esquemas Los elementos deben estar en el mismo espacio de nombres Es como si se hubiesen tecleado todos en un mismo fichero Alumnos.xsd Profesores.xsd <xsd:schema …> <xsd:include schemaLocation="Alumnos.xsd"/> <xsd:include schemaLocation="Profesores.xsd"/> … </xsd:schema> Universidad.xsd
  • 31. Importación de Esquemas import permite incluir elementos de otros esquemas con distintos espacios de nombres Espacio de nombres A Alumnos.xsd Espacio de nombres P Profes.xsd <xsd:schema …> <xsd:import namespace="A" schemaLocation="Alumnos.xsd"/> <xsd:import namespace="P" schemaLocation="Profes.xsd"/> … </xsd:schema> Universidad.xsd
  • 32. Redefinición de Esquemas redefine es similar a include pero permite modificar los elementos incluidos. Alumnos.xsd Añade el elemento nota <xs:redefine schemaLocation="Alumnos.xsd"> <xs:complexType name="TipoAlumno"> <xs:complexContent> <xs:extension base="TipoAlumno"> <xs:sequence> <xs:element name="nota" type="Nota" /> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:redefine> AlumnosConNotas.xsd
  • 33. Claves y Unicidad Los DTDs proporcionaban el atributo ID para marcar la unicidad (un valor ID era único en todo el documento) XML Schema tiene más posibilidades: Indicar que un elemento es único (unique) Definir atributos únicos Definir combinaciones de elementos y atributos como únicos Distinción entre unicidad y claves (key) Clave = además de ser único, debe existir y no puede ser nulo. Declarar el rango de un documento en el que algo es único
  • 34. Claves y Unicidad <xs:complexType name="Alumnos"> <xs:sequence> <xs:element name="Alumno" type="TipoAlumno"/> </xs:sequence> <xs:key name=“ClaveDNI"> <xs:selector xpath="a:alumno"/> <xs:field xpath="a:dni"/> </xs:key> </xs:complexType> Es necesario incluir el espacio de nombres (XPath) La clave puede formarse para atributos y elementos <xs:key name=“ClaveDNI"> <xs:selector xpath="a:alumno"/> <xs:field xpath="a:apells"/> <xs:field xpath="a:nombre"/> </xs:key> Una clave puede estar formada por varios elementos
  • 35. Claves y Unicidad <xs:complexType name="Alumnos"> <xs:sequence> <xs:element name="Alumno" type="TipoAlumno"/> </xs:sequence> <xs:unique name="DNI"> <xs:selector xpath="a:alumno"/> <xs:field xpath="a:dni"/> </xs:unique> </xs:complexType> Unique especifica que debe ser único, pero podría no existir
  • 36. Referencias a Claves keyref especifica que debe hacer referencia a una clave (Claves Externas) <xs:element name="clase"> <xs:sequence> <xs:element name="clase"> <xs:sequence> <xs:element name="alumnos" ... <xs:element name="delegado" ... </xs:sequence> <xs:element name="alumnos" ... <xs:element name="delegado" ... </xs:sequence> <xs:key name="DNI"> <xs:selector xpath="a:alumnos/a:alumno"/> <xs:field xpath="a:dni"/> </xs:key> <xs:key name="DNI"> <xs:selector xpath="a:alumnos/a:alumno"/> <xs:field xpath="a:dni"/> </xs:key> <xs:keyref name="Delegado" refer="DNI"> <xs:keyref name="Delegado" refer="DNI"> <xs:selector xpath="a:delegado"/> <xs:field xpath="a:dni"/> <xs:selector xpath="a:delegado"/> <xs:field xpath="a:dni"/> </xs:keyref> </xs:keyref>
  • 37. Valores Nulos Indicar que un elemento puede ser nulo sin estar vacío. Vacío (Empty): Un elemento sin contenido Nulo (Nil): Un elemento que indica que no hay valor <xsd:element name="Persona"> <xsd:element name="Persona"> <xsd:complexType> <xsd:element name="nombre" type="xsd:NMTOKEN"/> <xsd:element name="primerApell" type="xsd:NMTOKEN"/> <xsd:element name="segundoApell" type="xsd:NMTOKEN" <xsd:complexType> <xsd:element name="nombre" type="xsd:NMTOKEN"/> <xsd:element name="primerApell" type="xsd:NMTOKEN"/> <xsd:element name="segundoApell" type="xsd:NMTOKEN" nillable="true"/> </xsd:complexType> </xsd:element> nillable="true"/> </xsd:complexType> </xsd:element> <<persona> persona> <nombre>John</nombre> <primerApell>Smith</primerApell> <segundoApell xsi:nil="true"/> <nombre>John</nombre> <primerApell>Smith</primerApell> <segundoApell xsi:nil="true"/> </persona> </persona> El segundo apellido puede ser un NMTOKEN o estar indefinido
  • 38. Incluir cualquier contenido... any indica cualquier contenido de un determinado espacio de nombres anyAttribute cualquier atributo de un espacio de nombres <xs:complexType name="Comentario"> <xs:sequence> <xs:complexType name="Comentario"> <xs:sequence> <xs:any namespace="http://www.w3.org/1999/xhtml" <xs:any namespace="http://www.w3.org/1999/xhtml" minOccurs="1" processContents="skip" /> minOccurs="1" processContents="skip" /> </xs:sequence> <xs:anyAttribute </xs:sequence> <xs:anyAttribute namespace="http://www.w3.org/1999/xhtml"/> namespace="http://www.w3.org/1999/xhtml"/> </xs:complexType> </xs:complexType> <comentarios> <html:p>Es un <html:emph>Listillo</html:emph> </html:p> </comentarios> También puede declararse ##any, ##local, ##other Otros valores strict = obliga a validar lax = valida si es posible
  • 39. XML Schema Limitaciones No soporta entidades. Mecanismo para crear macros <!ENTITY &texto; "Esto texto se repite muchas veces" > Es necesario seguir usando los DTDs  Lenguaje de Restricciones limitado Ejemplo: ¿Verificar valor total = suma de valores parciales? Sensibilidad al contexto limitada Por ejemplo: Especificar que el contenido depende del valor de un atributo <transporte tipo="coche"> ...</transporte> <transporte tipo="avión"> ...</transporte> Tamaño de archivos XML Schema puede ser excesivo Legibilidad de las especificaciones...XML no siempre es legible Complejidad de la especificación: Muchas situaciones/combinaciones excepcionales
  • 40. Otras Técnicas Relax NG Schematron
  • 41. Otras técnicas Relax NG Relax NG. Desarrollado por OASIS a partir de TREX y RELAX Estandarizado por ISO como parte 2 del DSDL (Document Schema Definition Languages) Soporta mayor número de restricciones y gramáticas ambigüas Incluye una sintaxis abreviada (no XML)
  • 42. Otras Técnicas Relax NG <element name="a:alumnos" <element name="a:alumnos" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://www.uniovi.es/alumnos" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://www.uniovi.es/alumnos" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <zeroOrMore> <element name="a:alumno"> <attribute name="dni"> <zeroOrMore> <element name="a:alumno"> <attribute name="dni"> <data type="nonNegativeInteger" /> </attribute> <element name="a:nombre"><text/></element> <element name="a:apellidos"><text/></element> <element name="a:nota"><data type="double" /></element> <element name="a:email"><text/></element> </element> </zeroOrMore> </element> <data type="nonNegativeInteger" /> </attribute> <element name="a:nombre"><text/></element> <element name="a:apellidos"><text/></element> <element name="a:nota"><data type="double" /></element> <element name="a:email"><text/></element> </element> </zeroOrMore> </element>
  • 43. Otras Técnicas Relax NG Relax NG permite mayor expresividad Ejemplo: Un alumno debe tener un atributo DNI o un elemento DNI, pero no ambos
  • 44. Otras Técnicas Relax NG <element name="a:alumnos" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://www.uniovi.es/alumnos" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <zeroOrMore> <element name="a:alumno"> <choice> <attribute name="dni"><data type="nonNegativeInteger" /></attribute> <element name="a:dni"><data type="nonNegativeInteger" /></element> </choice> <element name="a:nombre"><text/></element> <element name="a:apellidos"><text/></element> <element name="a:nota"><data type="double" /></element> <element name="a:email"><text/></element> </element> </zeroOrMore> </element>
  • 45. Otras Técnicas Relax NG Otro ejemplo: Los alumnos de tipo=“delegado” solamente tienen nombre y apellidos.
  • 46. Otras Técnicas Relax NG <element name="a:alumnos" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://www.uniovi.es/alumnos" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <zeroOrMore> <choice> <element name="a:alumno"> <attribute name="tipo"><value>delegado</value></attribute> <element name="a:nombre"><text/></element> <element name="a:apellidos"><text/></element> </element> <element name="a:alumno"> <element name="a:nombre"><text/></element> <element name="a:apellidos"><text/></element> <element name="a:nota"><data type="double" /></element> </element> </choice> </zeroOrMore> </element>
  • 47. Otras Técnicas Schematron Schematron fue desarrollado por Rick Jelliffe Estandarizado por ISO como parte 3 del DSDL (Document Schema Definition Languages) Utiliza un modelo basado en reglas (en vez de gramáticas) Asocia reglas de validación a expresiones XPath Puede expresar restricciones arbitrarias
  • 48. Otras Técnicas Schematron <?xml version="1.0" encoding="UTF-8"?> <sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron"> <sch:pattern name="Chequear DNIs"> <sch:rule context="alumno"> <sch:assert test="@dni &gt; 10000000 and @dni &lt; 99999999"> El dni debe estar entre 10000000 y 99999999</sch:assert> </sch:rule> </sch:pattern> <sch:pattern name="Chequear nota"> <sch:rule context="media"> <sch:assert test="sum(//alumno/nota) div count(//alumno/nota) = ."> No encaja la media </sch:assert> </sch:rule> </sch:pattern> </sch:schema>
  • 49. Otras Técnicas Fundamentos teóricos Taxonomy of XML Schema languages using Formal Language Theory, M. Murata, D. Lee, M. Mani, K. Kawaguchi, ACM Transactions on Internet Technology, 2005 Relax NG ≈ Regular tree grammars XML Schema ≈ Simple type tree grammars DTDs ≈ local tree grammars
  • 50. Ejercicios Herramientas: xmllint: Contiene la opción --schema que valida contra un esquema xmllint --schema alumnos.xsd alumnos.xml xsv (http://www.ltg.ed.ac.uk/~ht/xsv-status.html) Herramienta desarrollada en Python Funcionamiento a través de Web o en línea de comandos Salida en formato XML (difícil de leer al principio)
  • 52. Diseño Vocabularios XML Separación tradicional de dos mundos Sistemas orientados a Datos Información uniforme y fuertemente estructurada (ej. Tablas) Mucha cantidad de información repetida Objetivo: Procesamiento eficiente (Almacenes de datos) Sistemas orientados a Documentación Información poco uniforme y entrelazada (ej. Libros) No existe un patrón uniforme Objetivo: Comunicación, Presentación (Mensajes) Se podría añadir un tercer mundo: Programación Orientada a Objetos Propuestas para añadir capacidad de programación a documentos XML: Información semi-estructurada (Lugar intermedio) Estructuras jerárquicas entrelazadas
  • 53. Orientación del esquema Datos vs. Documentos <factura> <emisión>23-2-2006</emisión> <envío>3-3-2006</envío> <dirección> <nombre>Luis Caro</nombre> <calle>Uría</calle> <numero>2</numero> <ciudad>Gijón</ciudad> <cp>33021</cp> </dirección> <tlfno>985102012</tlfno> </factura> <nota fecha=“23-2-2006”> <de>Juan Lopez</de> <para>Luis Caro</para> <asunto>Encargo</asunto> <msg> Necesito darte el encargo. Puedes enviarme un correo a <email>caro@gijon.com</email> o me llamas al <tlfno>985102012</tlfno> </msg> </nota> Orientado a Datos Orientado a Documentos
  • 54. Diseño Vocabularios XML Características a tener en cuenta Tamaño de documentos Facilidad de escritura Facilidad de procesamiento Flexibilidad (ej. HTML es muy flexible, Bases de Datos = menos) Consistencia: Evitar características incoherentes Nivel de abstracción: Buscar término medio en nivel de detalle <fecha>10 Marzo 2003</fecha> <fecha><día>10</dia><mes>Marzo</mes><año>2003</año>< /fecha> Patrones de diseño: www.xmlpatterns.com
  • 55. Ejemplo de Discusión ¿Atributos o Elementos? <pizza nombre="Margarita" precio=“6” /> <pizza> <nombre>Margarita </nombre> <precio>6</precio> </pizza> Representación de propiedades Razones filosóficas: Atributos: valores asociados con objetos sin identidad propia (edad) Subelementos: valores con identidad propia (fecha-nacimiento) Orígenes (SGML): Atributos: meta-información (información sobre el contenido) Subelementos: Contenido
  • 56. Ejemplo de Discusión ¿Atributos o Elementos? <pizza nombre="Margarita" precio=“6” /> <pizza> <nombre>Margarita </nombre> <precio>6</precio> </pizza> Representación de propiedades En los DTDs Pueden incluirse restricciones sobre su valor Ej. valor “si” o “no” Pueden definirse valores por defecto Pueden validarse los valores ID e IDREF Pueden definirse restricciones sobre espacios en blanco (NMTOKENS) Ocupan menos espacio Más fáciles de procesar (SAX y DOM) Acceso a entidades externas (datos binarios) Soportan valores arbitrariamente complejos y repetidos Establecen un orden Soportan atributos de atributos Mayor flexibilidad ante modificaciones
  • 57. Diseño Vocabularios En resumen... ...Aparición de una nueva torre de Babel... Algunos Consejos: Estudiar dominio de la Aplicación (ver estándares ya definidos!!!) Considerar futuras ampliaciones (extensibilidad) Validar antes de que sea tarde Usar espacios de nombres etc. etc.
  • 58. Fin