bases de datos xml belen - inicio - kybele · 2007. 11. 15. · convencionales (bdr, bdoo, …) en...
TRANSCRIPT
1
© 2004 Kybele BDXML-1
Bases de Datos XML
Grupo KybeleUniversidad Rey Juan Carlos
BDXML-2
Soluciones BD XML
� Almacenamiento y Gestión de documentos XML� BD XML nativas � Extensiones de BD (BDR o BDOO) para
XML (XML-enabled database)
2
BDXML-3
Tipos Documentos XML
� Data-centric document (Máquina)� Los documentos (data-centric) son documentos
que utilizan XML para el transporte de datos.� Se caracterizan por una estructura regular, datos
de grano fino (La unidad independiente de datos más pequeña es el nivel de PCDATA – solo elemento o atributo), y contenido mixto.
� Ejemplos: Datos científicos, Planificaciones de vuelos, Datos de Stock, Órdenes de pedidos, etc.
BDXML-4
� Document-centric document (Humano)� Estos documentos se caracterizan por una
estructura menos regular o irregular.� Por datos de grano mas grande (La unidad
independiente de datos más pequeña puede ser incluso un documento entero)
� Ejemplos: Libros, correos electrónicos, anuncios, etc.
Tipos Documentos XML
3
BDXML-5
Almacenamiento XML en BD
� Dos maneras de almacenar documentos XML en una BD:
1. Mapear el esquema del documento en un esquema de BD y transferir los datos acorde a ese mapeo. (XML-enabled DB)
2. Utilizar un conjunto de estructuras fijas que nos permiten almacenar cualquier documento XML. (BD Nativas XML)
BDXML-6
� ¿Cómo asociamos Data-centric XML y Document-centric XML con forma de almacenamiento?
1. XML-enabled Database2. BD nativas XML
Datos
Documentos
Almacenamiento XML en BD
4
BDXML-7
BD Nativas Vs. BD XML-enabled
� XML-enabled Database : Estas BD tienen su propio modelo de datos (relacional, orientadas a objetos) y mapean instancias del modelo de datos XML en instancias de su propio modelo de datos
� Las BD nativas XML utilizan el modelo de datos XML directamente
BDXML-8
� XML-enabled Database : � Requieren tener un modelo previo (modelo entidad-relación)
sobre el cuál, se modela la estructura existente en un tipo de documentos XML en particular.
� Este tipo de bases de datos realizan 2 tipos de procesos : "Shredding " y " Publishing “ (obtener los datos descritos en un documento XML, mapearlos a sus correspondientes" tablas" y posteriormente, tratar de reconstruir el documento XML original a través de la obtención de los datos que se almacenaron en dichas " tablas ".
� No se garantiza la reconstrucción del documento XML original.
Bases de Datos XML-enabled
5
BDXML-9
� XML-enabled Database (Cont.) : � Útiles cuando queremos publicar datos existentes
como XML o importar datos desde un documento XML en una BD existente.
� No para almacenar documentos XML completos.� Requiere tiempo de diseño para el mapeo de
esquemas.� No puede almacenar documentos cuyo esquema
no es conocido en el tiempo de diseño.
Bases de Datos XML-enabled
BDXML-10
Bases de Datos XML enabled
� XML enabled Database :
6
BDXML-11
BD XML nativas
� El término “nativa” se utiliza por los vendedores de los productos comerciales especializados en soluciones de BD XML .� Estrategia de Marketing ���� diferenciar sus soluciones de las
extensiones para XML ofrecidas por los vendedores de SGBD convencionales (BDR, BDOO, …)
� En una BD XML nativa el aspecto principal de los productos es el almacenamiento de los documentos XML.
� Características:� Define un modelo (lógico) para un documento XML (para el
documento, no para los datos)� Almacena y recupera documentos de acuerdo a ese modelo� Como mínimo, el modelo debe incluir elementos, atributos,
manejo de PCDATA y orden dentro del documento
BDXML-12
BD XML nativas
� Características:� Modelos de ejemplo: Xpath, XML Infoset, DOM y los
eventos de SAX� Tiene al documento XML como unidad (lógica)
fundamental de almacenamiento (relacional �tabla)
� Permiten almacenar cualquier tipo de documentos XML (bien formados), sin la necesidad de tener un modelo previo ligado a cada tipo de documentos XML que se quisiera almacenar.
7
BDXML-13
� Características:� Hacen uso del modelo que propone XML,
el cuál es una estructura en árbol. � Con este modelo es posible almacenar y
posteriormente recuperar el documento XML original.
BD XML Nativas
BDXML-14
� Características:� Representa como " nodos " los elementos,
atributos, instrucciones de procesamiento, comentarios y cualquier otro elemento constituyente de un documento XML.
� Almacenan documentos XML completos.� Cualquier documento XML independiente
del esquema
BD XML Nativas
8
BDXML-15
BD XML Nativas
� BD nativas XML:
BDXML-16
Extensiones de BD para XML
� Diferentes aproximaciones:
1. Almacenamiento no estructurado:Almacenamiento del documento XML directamente en formato de texto en un CLOB (Character LargeObject).
• Lo soportan la mayoría de los SGBD relacionales. Incluyen además funciones para acceder el contenido de los documentos del SQL.
• Oracle XML DB
• IBM DB2 XML Extender
• Microsoft SQLXML
9
BDXML-17
Extensiones de BD para XML
� Ejemplo almacenamiento CLOB:El tipo de datos XMLType de Oracle permite a los usuarios definir en sus tablas columnas que almacenen datos en formato XML.
CREATE TABLE documentos_xml(doc_id NUMBER(2) primary key,autor VARCHAR2(30),contenido SYS.XMLType
);
BDXML-18
Extensiones de BD para XML
� Ejemplo almacenamiento CLOB:Para insertar valores en una columna de tipo
XMLType hay que crear una instancia de dicho tipo. Las instancias XML se pueden generar a partir de un dato de tipo VARCHAR o CLOB utilizando la función createXML().
La cadena de entrada será procesada para comprobar que sus etiquetas XML están bien puestas, aunque no se valida con respecto a ningún DTD.
10
BDXML-19
Extensiones de BD para XML
� Ejemplo almacenamiento CLOB:
INSERT INTO documentos_xml (doc_id, autor, contenido )VALUES (78, ‘Joan Petit’, sys.XMLType.createXML(
‘<ejemplo ident = “78”><meta>
<autor>Joan Petit</autor><anyo>2002</anyo>
</meta><texto>
<titulo>Mi Ejemplo</titulo><parrafo>Este es mi documento XMLejemplo.</parrafo>
</texto></ejemplo>’)
);
BDXML-20
Extensiones de BD para XML
2. Almacenamiento estructurado: un metamodelodetallado de documentos XML capaz de representar árboles de nodos de documentos XML arbitrarios se construye utilizando primitivas de modelado del SGBD convencional que hay por debajo.
� Los contenidos de los documentos XML se pueden consultar utilizando las facilidades proporcionadas por el SGBD.
11
BDXML-21
Extensiones de BD para XML
� Extensiones de BD de prototipos de investigación para el almacenamiento estructurado de documentos XML (mayoritariamente para SGBD relacionales).
� XML Cartridge � Oracle
� Shimura et. al. � PostgreSQL
� Monet XML � Monet
� Extensiones de BD en proyectos de libre distribución :
� ozone/XML: es una librería para clases persistentes para el SGBD OO ozone que implementa el estándar DOM para la representación de documentos XML en una BD.
BDXML-22
Extensiones de BD para XML
3. Mapeo : el contenido de documentos XML se mapeaen esquemas BD específicamente diseñado para este contenido.
• Permite utilizar las capacidades de modelado de los SGBDs convencionales para la representación eficiente y adecuada del contenido de los documentos.
• Existen gran cantidad de herramientas y formalismos para la especificación del mapeo entre un formato XML y un esquema de BD.
• Mucha investigación respecto a la generación automática de esquemas de bases de datos relacionales a partir de documentos XML y el mapeo automático entre los mismos.
12
BDXML-23
Oracle XML DB
� Historia� Almacenamiento
� Generación de XML a partir de SQL� Consulta de datos XML
BDXML-24
Oracle XML DB
� Historia� Oracle 8i :
• Carga de librerías Java para el entorno XDK de Oracle JServer• Creación de paquetes PL/SQL para XML sobre procedimientos
almacenados en Java� Oracle 9i – Release 1:
• XMLType Tipo nativo para XML. Permite almacenar y consultar datos XML.� Oracle 9i – Release 2:
• Almacenamiento de datos a partir del XMLType basados en un XML Schema
• Repositorio XML DB: para gestión de documentos (enfoque document-centric)
• Nuevas funciones para manejar XMLType, SQL/XML y paquetes basados en C para procesamiento de XML mediante PL/SQL
� Oracle 10g:• Soporta evolución del XML Schema• Más funcionalidad XML nativa• Oracle XDK permite conectar BD a través de ODBC para la creación de
aplicaciones de capa intermedia
13
BDXML-25
Oracle XML DB
� Bases de la gestión XML� Repositorio de datos:
• Organizado jerárquicamente, consultable• Almacenamiento y visualización de contenido XML como un
directorio jerárquico de carpetas• Acceso a los documentos y representación de las relaciones entre
documentos con:� Xpath� URLs � HTTP/FTP� SQL y PL/SQL
� XMLType• Tipo de datos nativo• Usado para: definir tablas, columnas, parámetros, valores
devueltos por funciones o variables en procedimientos PL/SQL• Funciones predefinidas: crear instancias XMLType, validar
contenidos XML contra XML Schemas, aplicar hojas XSLT…
BDXML-26
Oracle XML DB
� Almacenamiento
14
BDXML-27
¿Tablas relacionales o XMLType?
� Decisión basada en el formato de los datos XML y en la necesidad de conservar fidelidad a nivelDOM para los contenidos XML
� Formato de los datos XML� Data-Centric: tablas relacionales
• Estructura regular de los datos• Poco contenido o no mezclado• Fidelidad DOM no requerida
� Document-Centric: XMLType• Estructura de datos poco regular o irregular• Contenido mezclado• Muchas consultas sobre el contenido XML
BDXML-28
XMLType: ¿Columna o Tabla?
� Dos formas de almacenamiento basadas en el tipo XMLType� Columnas XMLType� Tablas de objetos a partir del tipo XMLType
• Crear las tablas utilizando sentencias SQL:CREATE TABLE … OF XMLType
• Crear las tablas cuando se registra un XML Schema depositado en el repositorio de Oracle XML DB
15
BDXML-29
Ejemplos: Almacenamiento con XMLType
� No basado en esquema (como columna en una tabla)
� CREATE TABLE books(isbn VARCHAR(10), title VARCHAR2(100),author_details XMLType);
� INSERT INTO books(isbn,title,author_details) VALUES(‘02375', 'XMLDevelopers Kit',
XMLTYPE(‘<Author age=“35”><Name>John Smith</Name>
</Author>'));
� SELECT author_details.extract( ‘/Author/Name/text()').getStringVal() “Name“FROM books;
� UPDATE books SET author_details = XMLType (’<Author age=“40">
<Name>Mark Smith</Name> </Author>’);
BDXML-30
Ejemplos: Almacenamiento con XMLType
� Basado en esquema : la transformación a objetos SQL se realiza durante el proceso de registro del esquema asociado de validaciónBEGIN
DBMS_XMLSCHEMA.registerURI(‘http://xmlns.oracle.com/xml/content.xsd’, local=>TRUE, gentypes=>TRUE, gentables=>TRUE,
genbeans=>TRUE); END;
� Se utilizan atributos especiales en la definición de elementos y atributos del XML Schema (es importante que los valores de estas anotaciones estén en mayúsculas)
� Las anotaciones más usadas son:� xdb:defaultTable – especifica el nombre de la tabla en la que las instancias
XML de este esquema serán almacenadas� xdb:SQLName – especifica el nombre del objeto SQL que se corresponde con
el elemento XML que se está definiendo� xdb:SQLCollType – especifica el nombre de la colección SQL que
corresponderá al elemento SQL que tiene maxOccurs > 1� xdb:SQLType – especifica el nombre del tipo SQL correspondiente al
elemento XML
16
BDXML-31
Ejemplos: XML Schema
<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchemaxmlns:xdb="http://xmlns.oracle.com/xdb" xdb:storeVarrayAsTable="true ">
<xsd:element name="Customer" type="CustomerType" xdb:defaultTable="CUSTOMER" />
<xsd:complexType name="CustomerType" xdb:maintainDOM="false" > <xsd:sequence>
<xsd:element name="NAME" type="xsd:string“ xdb:SQLName ="NAME“xdb:SQLType ="VARCHAR2"/>
<xsd:element name="DESCRIPTION" type="contentType"/></xsd:sequence>
</xsd:complexType>
<xsd:complexType name="contentType" mixed="true" xdb:SQLType ="CLOB“xdb:maintainDOM="true" >
</xsd:complexType>
</xsd:schema>
BDXML-32
Ejemplo UML-XMLSchema<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xdb="http://xmlns.oracle.com/xdb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"elementFormDefault="qualified"attributeFormDefault="unqualified">
<xs:element name="FICHERO_INFO" xdb:SQLType="FICHERO_INFO“xdb:defaultTable="TABLA_FICHERO_INFO" >
<xs:complexType><xs:choice>
<xs:element name="FICHERO_INFO_DICOM“type="FICHERO_INFO_DICOM_TYPE" />
<xs:element name="FICHERO_INFO_ANALYZE“type="FICHERO_INFO_ANALYZE_TYPE" />
</xs:choice></xs:complexType>
<xs:complexType name="FICHERO_INFO_DICOM_TYPE“xdb:SQLType="FICHERO_INFO_DICOM_TYPE ">
<xs:sequence><xs:element name="ELEMENTO_INFO_DICOM“
type="ELEMENTO_INFO_DICOM_TYPE"minOccurs="0"maxOccurs="unbounded"xdb:defaultTable="TABLA_ELEMENTO_INFO_DICOM"xdb:SQLInline ="false" />
</xs:sequence></xs:complexType><xs:complexType name="ELEMENTO_INFO_DICOM_TYPE“
xdb:SQLType="ELEMENTO_INFO_DICOM_TYPE "><xs:all>
<xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1" /><xs:element name="GroupTag" type="xs:string" minOccurs="0" maxOccurs="1" />
………………………………………………
-Centro_id
-Nombre
-Domicilio
-Teléfono
-Fax
Centro
-Usuario_id
-Apellido1
-Apellido2
-Nombre
-Password
-Login
Usuario
-Estudio_Id
-Descripción
-Fecha_Inicio
Estudio
1 1..*
Pertenece
1..* 0..*
accede
-Tipo_id
-Descripción
Grupo de control
1
1..*
-Tarea_id
-Descripción
Tarea
11
-Fichero_ID
-Fecha_Upload
Fichero Imagen
1
0..*
1
0..*
1
1..*
Fichero Información
Fichero Info Analyze
1
0..*
-GroupTag
-ElementTag
-VR
-Description
-Value
Elemento Info DICOM
Fichero Info
DICOM
-Description
-Value
Elemento Info Analyze
1
0..*
participa
carga
contiene
analiza
contiene
contiene
genera
17
BDXML-33
XMLType basado en esquema
� Definir una columna como XMLType basado en esquema� CREATE TABLE books( isbn VARCHAR(10),
title VARCHAR2(100), author_details XMLType)
XMLType COLUMN author_details XMLSCHEMA "http://xmlns.oracle.com/xml/content.xsd" ELEMENT “Author";
� INSERT INTO books(isbn, title, author_details)VALUES(‘023595', 'XML Developer''s Kit', XMLTYPE('<Author
age=“35”> <Name>John Smith</Name></Author>').CreateSchemaBasedXML('http://xmlns.oracle.com/xml/content.xsd'));
� Definir una tabla a partir de XMLType basado en esquema� CREATE TABLE books_xmltype_tbl OF XMLTYPE
XMLSCHEMA “http://xmlns.oracle.com/xml/content.xsd" ELEMENT “Author";
BDXML-34
XML en tablas relacionales
� Usado por aplicaciones que requieren un acceso detallado a los datos pero sin necesidad de mantener la estructura jerárquica
� Herramientas� XSU (XML SQL Utility)
• Carga datos XML: interfaz Java o PL/SQL• Soporta la conversión XML ↔ Relacional
� XSQL Servlet: interfaz para HTTP
18
BDXML-35
XML SQL Utility
� “Canonical Mapping”: Normas� El elemento <ROWSET> es el elemento raíz del
documento XML� Los elementos hijos se llaman <ROW> y se
corresponden con las filas de la tabla en la que se almacenarán los datos
� Los nombres de los elementos por debajo de <ROW> se corresponden con los nombres de lascolumnas de la tabla
� El atributo num de los elementos <ROW> son números que representan el orden de la informacióna almacenar
BDXML-36
Ejemplo: SQL Utility
CREATE TABLE employee (NAME VARCHAR2(100), ADDRESS VARCHAR2(200), EMAIL VARCHAR2(200));
� El documento XML en forma canónica sería:
<ROWSET> <ROW num=“1”>
<NAME>John Smith</NAME><ADDRESS>London,Ontario, Canada</ADDRESS> <EMAIL>[email protected]</EMAIL>
</ROW></ROWSET>
19
BDXML-37
Generación de datos XML
� El estándar SQL/XML forma parte del estándarISO/IEC 9075, que especifica el estándar SQL para las operaciones con datos XML
� Funciones SQL/XML:
� XMLELEMENT()� XMLATTRIBUTES()� XMLFOREST()� XMLCONCAT()� XMLAGG()
BDXML-38
Generación de datos XML
� Funciones que ofrece Oracle (aparte de las estándar)� SYS_XMLGEN() � XMLSEQUENCE() � SYS_XMLAGG() � XMLCOLATTVAL() � UPDATEXML() � XMLTRANSFORM() � EXTRACTVALUE()
� Sintaxis básica para la utilización de las funciones de SQL/XML:� SELECT [XMLELEMENT |XMLATTRIBUTES
|XMLFOREST|XMLCONCAT |XMLAGG|…] FROM nombre_tabla, [tabla (XMLSEQUENCE)] WHERE condiciones_de_busqueda
20
BDXML-39
Generación de datos XML: ejemplo
SELECT XMLELEMENT("Employee",XMLATTRIBUTES(emp_id AS "empno"), XMLELEMENT("Name“,first_name||' '||last_name), XMLFOREST(EMAIL, PHONE))
FROM employees WHERE rownum=1;
El documento XML resultante es:
<Employee empno="101" > <Name>John Smith</Name> <EMAIL>[email protected]</EMAIL><PHONE>519.6701234</PHONE>
</Employee>
BDXML-40
Generación de datos XML: ejemplo
SELECT SYS_XMLGen (XMLELEMENT(“Employee”, XMLATTRIBUTE(empno),
XMLELEMENT(“Address”, Address.City ||’’||Address.Province))
FROM EmployeeWHERE empno=1
El documento XML resultante es:
<?xml version”1.0”><Employee empno=“1”>
<address> London ON</address></Employee>
21
BDXML-41
Generación de datos XML
� Existen otras funciones asociadas al tipo XMLType y funciones SQL/XML para recuperar y crear documentosXML:
XMLType()createXML()createSchemaBasedXML()createNonSchemaBasedXML()
existsNode()extract()
getClobVal()getNumberVal()getStringVal()
isSchemaBased()getSchemaURL()getRootElement()getNamespace()
isSchemaValidate()isSchemaValid()schemaValidation()setSchemaValidate()
BDXML-42
Consulta de datos XML
� Tipos de búsquedas de datos XML� Basadas en XPath: utilizando expresiones XPath� Oracle Text: para búsquedas de texto dentro del contexto de
un elemento
� Funciones más utilizadas para búsquedas:� EXISTSNODE(XMLType_instance,XPath_string [,
namespace_string ] )
� EXTRACT(XMLType_instance ,XPath_string[ , namespace_string ] )
� EXTRACTVALUE(XMLType_instance, XPath_string [, value_expr] )
22
BDXML-43
Consulta de datos XML: Ejemplo
� CREATE TABLE books( isbn VARCHAR(10), title VARCHAR2(100),auth_details XMLType);
� INSERT INTO books(isbn,title,author_details) VALUES(‘02375', 'XML Developer‘’s Kit',
XMLTYPE(‘<Author age=“35”><Name>John Smith</Name></Author>'));
� SELECT isbn, title FROM books WHERE EXISTSNODE(auth_details, '//*[contains(.,"John Smith")')>0
BDXML-44
Consulta de datos XML: Ejemplo
� SELECT isbn, title FROM books WHERE EXISTSNODE(auth_details,'/author[@age="35"]')>0;
� SELECT isbn, EXTRACT(auth_details, ‘/Author/Name’) “Name” FROM books
ISBN Name2375 <Name>John Smith</Name>
� SELECT EXTRACTVALUE(auth_details,'/Author/text()') FROM books;
(devuelve un VARCHAR2 por defecto, por lo tanto el valor del nodo no puede tener más de 4K; habría que utilizar Extract() para conseguir el nodo en binario y la función de XMLType getClobVal() para extraer el contenido en un CLOB)
23
BDXML-45
Consulta de datos: Texto
� Se utiliza Oracle Text para buscar aquellos documentos XML que contienen determinadas frases o palabras
� Forma de uso:� Crear un índice de tipo CONTEXT sobre la colección de
documentos XML� Utilizar la función CONTAINS() para recuperar el contenido� Ejemplo:
• CREATE INDEX author_idx ON books(auth_details) INDEXTYPE IS CTXSYS.CONTEXT;
• SELECT title FROM books WHERE CONTAINS(auth_details, ‘John Smith')>0;
BDXML-46
Consulta de datos: Texto
� Es posible combinar CONTAINS() con otros operadores parabúsquedas avanzadas en datos XML:
� WITHIN – busca un término en una sección de texto (elementos y atributos XML)
• ‘palabra WITHIN etiqueta’, • ‘palabra WITHIN atributo@etiqueta’
� HASPATH, INPATH – permiten consultas XPath• ‘HASPATH(xpath)’• ‘HASPATH(xpath=“value”)’• ‘INPATH(xpath)’
24
BDXML-47
Consulta de datos: Texto
� Ejemplos:
� SELECT isbn, title FROM books WHERE CONTAINS(auth_details, ‘John INPATH(/Author/Name)')>0;
� SELECT isbn, titleFROM books WHERECONTAINS(auth_details,'HASPATH(/Author[@age=“35”])')>0;
BDXML-48
BIBLIOGRAFÍA
� Oracle Database 10 g XML & SQL—Design, Build & Manage XML Applications in Java, C, C++ & PL/SQLMark V. Scardina, Ben Chang, Jinyu Wang - McGraw-Hill/Osborne
� Oracle 9i – XML Database Developer’s Guide –Oracle XML DB (Release 2)
� XML Data Management: Native XML and XML-Enabled Database SystemsRoberto Zicari - Addison Wesley Professional