Publicado el 29 de Mayo del 2018
520 visualizaciones desde el 29 de Mayo del 2018
298,2 KB
28 paginas
Creado hace 20a (07/09/2004)
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üedadL
Espacios de Nombres
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
2
Espacios de Nombres
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...L
Espacios de Nombres
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
<bolsa:inversiones
xmlns:bolsa=“http://www.bolsa.com”
xmlns:geog=“http://www.geog.es”>
<geog:país geog:nombre=“Francia”>
<geog:capital>París</geog:capital>
<bolsa:capital>1200€</bolsa:capital>
</geog:país>
. . .
</bolsa:inversiones>
NOTA: Las URIs sólo se utilizan para que el
nombre sea único, no son enlaces, ni tienen
que contener información
3
Espacios de Nombres
Asignación Dinámica
Es posible ir asociando espacios de nombres a los
elementos según van apareciendo
<bolsa:inversiones
<geog:país
xmlns:bolsa=“http://www.bolsa.com”>
xmlns:geog=“http://www.geog.es”
geog:nombre=“Francia”>
<geog:capital>París</geog:capital>
<bolsa:capital>1200€</bolsa:capital>
</geog:país>
. . .
</bolsa:inversiones>
Espacios de Nombres
Espacio de nombres por
defecto
Mediante xmlns=“...” se define un espacio de
nombres por defecto (sin alias)
<inversiones
<geog:país
xmlns=“http://www.bolsa.com”>
xmlns:geog=“http://www.geog.es”
geog:nombre=“Francia”>
<geog:capital>París</geog:capital>
<capital>1200€</capital>
</geog:país>
. . .
</inversiones>
Se refiere a
http://www.bolsa.com
4
Espacios de Nombres
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 (geog:país*)>
<!ELEMENT geog:país (geog:capital,capital) >
<!ELEMENT geog:capital (#PCDATA)>
<!ELEMENT capital (#PCDATA)>
<!ATTLIST inversiones
]>
xmlns CDATA #FIXED "http://www.bolsa.com">
<!ATTLIST geog:país
geog:nombre CDATA #REQUIRED
xmlns:geog CDATA #FIXED "http://www.geog.es">
Espacios de Nombres
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
5
XML Schema
XML Schema
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, enlaces de
programación, etc.
Originalmente se utilizaron los DTDs
Posteriormente se ha desarrollado XML Schema
Existen Otros:
RELAX-NG, Schematron, etc.
6
XML Schema
Características de los 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)
XML Schema
Limitaciones de los 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)
7
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
XML Schema
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">
Elemento raíz schema y
espacio de nombres
<xs:element name="alumnos">
<xs:complexType>
<xs:sequence>
<xs:element name="alumno" minOccurs="1" maxOccurs="200"
determinado
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:string"/>
</xs:complexType>
</xs:schema>
Permite especificar
rangos de inclusión
Permite especificar
tipos
8
XML Schema
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"
type="TipoAlumno"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="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"/>
<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>
XML Schema
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="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
9
XML Schema
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>
XML Schema
Agrupaciones
Es posible nombrar agrupaciones de elementos y de
atributos para hacer referencias a ellas
<xs:group name="nombApell">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:complexType name="TipoAlumno">
<xs:group ref="nombApell" />
<xs:element name="carrera" type="xs:string"/>
</xs:complexType>
10
XML Schema
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>
XML Schema
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>
11
XML Schema
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>
XML Schema
Tipos Complejos:
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 na
Comentarios de: Tecnologías XML y Web Semántica (0)
No hay comentarios