Actualizado el 17 de Julio del 2018 (Publicado el 28 de Mayo del 2018)
776 visualizaciones desde el 28 de Mayo del 2018
282,3 KB
29 paginas
Creado hace 19a (02/04/2006)
Tecnologías XML y
Web Semántica
Departamento de Informática
Universidad de Oviedo
Sesión 2
Diseño de Vocabularios XML
Espacios de Nombres
XML Schema
Diseño de Vocabularios
Departamento de Informática
Universidad de Oviedo
1
Espacios de Nombres
Problema de la Homonimia
Homonimia: Mismo nombre con diferentes propósitos
<país nombre=“Francia”>
<capital>París</capital>
</país>
<inversión>
</inversión>
<capital>7000€</capital>
¿Cómo combinar en el mismo documento estos vocabularios?
<inversiones>
<país nombre=“Francia”>
<capital>París</capital>
<capital>1200€</capital>
</país>
. . .
</inversiones>
A
mbigüedad
2
Posibles Soluciónes
Asignar un nombre único a cada etiqueta...
Posibles soluciones:
Crear una autoridad mundial que asigne nombres...
... o usar un mecanismo ya existente: URIs
Una URI es un identificador global único
Ejemplo: http://www.aulanet.uniovi.es
SOLUCIÓN:
Asociar a cada etiqueta una URI que indica a qué
espacio de nombres pertenece...
[http:www.bolsa.com]:capital
[http:www.geog.es]:capital
Posibles soluciones
Solución fácil...
Asociar a cada etiqueta una URI
<[http://www.bolsa.com]:inversiones>
<[http://www.geog.es]:país
[http://www.geog.es]:nombre=“Francia”>
<[http://www.geog.es]:capital>París
</[http://www.geog.es]:capital>
<[http://www.bolsa.com]:capital>1200€
</[http://www.bolsa.com]:capital>
</[http://www.bolsa.com]:país>
. . .
</[http://www.bolsa.com]:inversiones>
Legibilidad...
3
Definición
Solución: Asociar un alias a los elementos de un
espacio de nombres dentro de un ámbito
xmlns:alias define alias en el ámbito de un
elemento
<b:inversiones
xmlns:b=“http://www.bolsa.com”
xmlns:g=“http://www.geog.es”>
<g:país g:nombre=“Francia”>
<g:capital>París</g:capital>
<b:capital>1200€</b:capital>
</g:país>
. . .
</b:inversiones>
NOTA: Las URIs sólo se utilizan para que el
nombre sea único, no son enlaces, ni tienen
que contener información
Asignación Dinámica
Es posible ir asociando espacios de nombres a los
elementos según van apareciendo
<b:inversiones
<g:país
xmlns:b=“http://www.bolsa.com”>
xmlns:g=“http://www.geog.es”
g:nombre=“Francia”>
<g:capital>París</g:capital>
<b:capital>1200€</b:capital>
</g:país>
. . .
</b:inversiones>
4
Espacio de nombres por
defecto
Mediante xmlns=“...” se define un espacio de nombres
Se refiere a
http://www.bolsa.com
por defecto (sin alias)
<inversiones
<g:país
xmlns=“http://www.bolsa.com”>
xmlns:g=“http://www.geog.es”
g:nombre=“Francia”>
<g:capital>París</g:capital>
<capital>1200€</capital>
</g:país>
. . .
</inversiones>
Validación con DTDs
Posteriores a los DTDs, por tanto, los DTDs no dan
soporte a Espacios de Nombres
Hay que definir los espacios de nombre usados
<!DOCTYPE inversiones [
<!ELEMENT inversiones (g:país*)>
<!ELEMENT g:país (g:capital,capital) >
<!ELEMENT g:capital (#PCDATA)>
<!ELEMENT capital (#PCDATA)>
<!ATTLIST inversiones
<!ATTLIST g:país
xmlns CDATA #FIXED "http://www.bolsa.com">
g:nombre CDATA #REQUIRED
xmlns:g CDATA #FIXED "http://www.geog.es">
]>
5
Valoración
Ampliamente utilizados para combinar vocabularios
Facilitan la incorporación de elementos no previstos
inicialmente
Sintaxis extraña al principio
Uso de prefijos
URIs como elemento diferenciador...pero las URLS también
sirven para acceder a recursos
Difícil combinación con DTDs
XML Schema
6
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.
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)
7
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)
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
8
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:string"/>
</xs:complexType>
</xs:schema>
Elemento raíz schema y
espacio de nombres
determinado
Permite especificar
rangos de inclusión
Permite especificar
tipos
Validación
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>
9
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
10
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>
Tipos Complejos:
Secuencia
Tipos Complejos: Son tipos que pueden contener elementos o
atributos
Construcción básica mediante enumeración de elementos
<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"
minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="dni" type="xs:integer"/>
</xs:complexType>
<alumno dni="9399390">
<nombre>Juan</nombre>
<apellidos>García García</apellidos>
<nacim>1985</nacim>
</alumno>
11
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>
12
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>
Tipos Simples
Los tipos simples son lo que no pueden contener
elementos o atributos
Son los valores de atributos o el contenido de
elementos básicos
Pueden ser:
Prede
Comentarios de: Tecnologías XML y Web Semántica (0)
No hay comentarios