Oracle XMLDB Funcionalidades de Oracle para el lenguaje XML
Historia de la Relación de XML con Oracle <ul><li>Oracle 8i </li></ul><ul><ul><li>load Java packages from the Oracle XDK i...
Historia de la Relación de XML con Oracle <ul><li>Oracle 10g </li></ul><ul><ul><li>supports a certain level of XML Schema ...
Funcionalidades XML de Oracle 10g Java Stored Procedures XDK XML APIs XML DB Repository C-based PL/SQL Packages SQL/XML  X...
Oracle XDK
Oracle XDK <ul><li>Descripción de XDK </li></ul><ul><ul><li>Un conjunto de componentes, herramientas y utilidades en Java,...
Oracle XDK <ul><li>Componentes de XDK </li></ul><ul><ul><li>XML Parsers </li></ul></ul><ul><ul><li>XSLT Processor </li></u...
Oracle XDK <ul><li>XML Parsers </li></ul><ul><ul><li>Para la creación y análisis de XML. </li></ul></ul><ul><ul><li>Usa lo...
Oracle XDK <ul><li>XSLT Processor </li></ul><ul><ul><li>Renderiza o transforma XML en otros formatos basados en texto como...
Oracle XDK <ul><li>XML Schema Processors </li></ul><ul><ul><li>Soporta JAVA, C y C++ permite el uso de XML con tipos de da...
Oracle XDK <ul><li>XML Java Beans </li></ul><ul><ul><li>Muestra y transforma documentos XML y datos usando componentes Jav...
Oracle XDK <ul><li>XML Class Generators </li></ul><ul><ul><li>Genera clases automáticamente desde DTDs y XML schemas para ...
Oracle XDK <ul><li>XML SQL Utility </li></ul><ul><ul><li>Genera documentos XML DTD’s y XML schemas desde consultas SQL. </...
Oracle XDK <ul><li>XSQL Servlet </li></ul><ul><ul><li>Combina XML, SQL y XSLT en el servidor para proveer contenidos web d...
Oracle XDK <ul><li>TransX Utility </li></ul><ul><ul><li>Es una API Java </li></ul></ul><ul><ul><li>Facilita la tarea de ca...
Oracle XMLDB
Oracle XMLDB <ul><li>Oracle XML-DB está formado por tecnologías que permiten almacenamiento estructurado de código XML y t...
O racle XMLDB <ul><li>Oracle XML-DB puede ser usada para almacenar, consultar, modificar, transformar o cualquier otro pro...
Oracle XMLDB <ul><li>Beneficios de Oracle XML-DB </li></ul><ul><ul><li>Habilidades para gestionar datos estructurados o no...
Oracle XMLDB <ul><li>Arquitectura </li></ul><ul><li>de XML-DB </li></ul>
Oracle XMLDB <ul><li>El almacenamiento de documentos XML </li></ul>
Hojas XSQL
Hojas XSQL <ul><li>Las páginas XSQL son plantillas contenidas en ficheros * .xsql  que permiten por medio de sentencias SQ...
Hojas XSQL <ul><li>Las plantillas son procesadas por un motor XSQL, el llamado XSQL Servlet, una utilidad de línea de coma...
Hojas XSQL <ul><li>Nuestra primera página XSQL </li></ul><ul><ul><li>Una plantilla XSQL es un documento XML que usa el tag...
Hojas XSQL <ul><li>xmlns:xsql=&quot;urn:oracle-xsql“ </li></ul><ul><li>Define el prefijo XSQL para el “namespace” que iden...
Hojas XSQL <ul><li>connection=&quot;xmlbook&quot;   </li></ul><ul><li>Este atributo del elemento <XSQL:query> determina qu...
Hojas XSQL <ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><connectiondefs dumpallowed=&quot;no&quot;> </li></ul...
Hojas XSQL <ul><li>Si guardamos nuestro ejemplo con la extensión .xsql y ejecutamos obtendremos un resultado como este: </...
Hojas XSQL <ul><li>Nuestra plantilla podría también incluir una llamada a una plantilla XSLT como esta: </li></ul><?xml ve...
Hojas XSQL <ul><li>Nuestro  “hello world”  es el ejemplo mas simple posible, las páginas XSQL pueden además: </li></ul><ul...
Hojas XSQL <ul><li>Usando parámetros en las consultas </li></ul><ul><ul><li>Para hacer referencia al valor de un parámetro...
Hojas  XSQL <ul><li>Al hacer la llamada mediante: </li></ul><ul><li>http://..../ HelloWorld.xsql?msg =HOLA </li></ul><ul><...
Hojas  XSQL <ul><li>Además de utilizar alias y parámetros para controlar el documento XML resultante, se pueden especifica...
Hojas  XSQL <ul><ul><li>Id-attribute </li></ul></ul><ul><ul><ul><li>Nombre del atributo para el identificador de fila de c...
Hojas  XSQL <?xml version=&quot;1.0&quot;?> <xsql:query connection=&quot;xmlbook&quot; xmlns:xsql=&quot;urn:oracle-xsql&qu...
Hojas  XSQL <ul><li>El resultado: </li></ul><?xml version = '1.0'?> <DEPARTMENT-LIST> <DEPARTMENT num=&quot;1&quot;> <NUMB...
Hojas  XSQL <ul><li>Es posible también, utilizar parámetros en los atributos del elemento <xsql:query> </li></ul><?xml ver...
Hojas  XSQL <ul><li>Estructuras anidadas con CURSOR </li></ul><xsql:query connection=&quot;demo&quot; xmlns:xsql=&quot;urn...
Hojas  XSQL <ul><li>Resultado </li></ul><ROWSET> <ROW num=&quot;1&quot;> <DNAME>ACCOUNTING</DNAME> <EMPLOYEES> <EMPLOYEES_...
Hojas  XSQL <ul><li>Consultas para validar resultados que no producen elementos. </li></ul><?xml version=&quot;1.0&quot;?>...
Hojas  XSQL <ul><li>Parámetros de sesión </li></ul><ul><ul><li>Establece un parámetro a nivel de sesión HTTP. </li></ul></...
Hojas  XSQL <ul><li>Cookies </li></ul><ul><ul><li>Asigna una cookie HTTP. </li></ul></ul><ul><ul><li>El valor puede ser es...
Hojas  XSQL <ul><li>Parámetros de página </li></ul><ul><ul><li>Establece un parámetro a nivel de página XSQL, cuyo valor p...
Hojas  XSQL <ul><li>Parámetros como elementos </li></ul><ul><ul><li>Incluye un parámetro y su valor como un elemento en la...
XMLType
XMLType <ul><ul><li>Es un nuevo tipo de datos. </li></ul></ul><ul><ul><li>Específicamente creado para albergar contenido e...
XMLType <ul><li>Puede ser usado en procedimientos PL/SQL como parámetros, valores de retorno y variables. </li></ul><ul><u...
XMLType <ul><li>Se pueden crear tanto  columnas  como  tablas  de tipo XMLType. </li></ul>
XMLType <ul><li>Arquitectura  </li></ul><ul><li>del almacenado  </li></ul><ul><li>de tipos  </li></ul><ul><li>XMLType </li...
XMLType <ul><li>Crear columnas de tipo XMLType para albergar documentos XML </li></ul>CREATE TABLE warehouses(  warehouse_...
XMLType <ul><li>A ñadir una columna de tipo XMLType a una tabla existente </li></ul>ALTER TABLE po_xml_tab add (custDoc XM...
XMLType <ul><li>E liminar una columna de tipo XMLType de una tabla existente </li></ul>ALTER TABLE po_xml_tab drop (custDo...
XMLType <ul><li>Insertar valores en una columna de tipo XMLtype </li></ul>INSERT INTO warehouses VALUES ( 100, XMLType( '<...
XMLType <ul><li>Modificar valores en una columna de tipo XMLtype </li></ul>UPDATE warehouses SET warehouse_spec = XMLType ...
XMLType <ul><li>Creación de Tablas XMLType </li></ul>CREATE TABLE XMLTABLE OF XMLType;
XMLType <ul><li>Opciones de Almacenamiento </li></ul>CREATE TABLE po_xml_tab( poid NUMBER(10), poDoc XMLTYPE )  XMLType CO...
XMLType <ul><li>Opciones de Almacenamiento </li></ul><ul><ul><li>Añadir una columna XMLType a una tabla existente </li></u...
XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>La carga de datos en columnas y tablas XMLtype puede reali...
XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>Inserción usando createXML() con CLOB </li></ul></ul>CREAT...
XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>Inserción usando una instancia XMLType </li></ul></ul>INSE...
XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>Inserción usando XMLType() con cadena de texto. </li></ul>...
XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>Inserción usando XMLElement() </li></ul></ul>INSERT INTO p...
XMLType <ul><li>Seleccionar datos XML de Tablas XMLtype </li></ul><ul><ul><li>Seleccionar columnas XMLType con getClobVal(...
XMLType <ul><li>Seleccionar datos XML de Tablas XMLtype </li></ul><ul><ul><li>Usando expresiones XPATH para buscar en docu...
XMLType <ul><ul><ul><li>Extract() </li></ul></ul></ul>SELECT warehouse_name,  extract (warehouse_spec, '/Warehouse/Docks')...
XMLType <ul><ul><ul><li>Extractvalue() </li></ul></ul></ul>SELECT warehouse_name,  extractValue (e.warehouse_spec, '/Wareh...
XMLType <ul><ul><ul><li>UpdateXML() </li></ul></ul></ul>UPDATE po_xml_tab e SET e.poDoc = XMLType( '<?xml version=&quot;1....
XMLType <ul><ul><ul><li>UpdateXML() </li></ul></ul></ul>UPDATE po_xml_tab SET poDoc = UPDATEXML(poDoc, '/PO/CUSTNAME/text(...
XMLType <ul><ul><ul><li>UpdateXML() </li></ul></ul></ul>UPDATE emp_tab e SET e.emp_col = UPDATEXML(e.emp_col, '/EMPLOYEES/...
XMLType <ul><ul><ul><li>Creación de vistas usando updateXML </li></ul></ul></ul>CREATE VIEW new_emp_view AS SELECT UPDATEX...
XMLType <ul><ul><li>Eliminando filas usando extract() </li></ul></ul>DELETE FROM po_xml_tab e WHERE e.poDoc.extract('/PO/P...
XMLType <ul><li>Creación de índices en XMLType </li></ul><ul><ul><li>Índices basados en extract() </li></ul></ul><ul><ul><...
XML Schema Support <ul><li>XML DB permite construir objetos de tipo XMLType y tenerlos permanentemente validados con un XM...
XML Schema Support <ul><li>Validación automática de documentos XML cuando estos son añadidos a Oracle XML DB. </li></ul><u...
XML Schema Support <ul><li>Validación XML </li></ul><ul><ul><li>XMLisValid() </li></ul></ul><ul><ul><li>schemaValidate </l...
XML Schema Support <ul><li>Validación XML </li></ul><ul><ul><li>setSchemaValidated() </li></ul></ul><ul><ul><li>isSchemaVa...
XML Repository <ul><li>Provee un sistema de ficheros. </li></ul><ul><li>Permite el acceso a los documentos XML almacenados...
XML Repository <ul><li>El Repositorio puede ser usado para ver contenido XML como si se tratara de navegar a través de dir...
XML Repository <ul><li>Se puede buscar en el repositorio usando operadores SQL como UNDER_PATH o DEPTH para localizar dato...
XML Repository <ul><li>Oracle XML DB almacena el repositorio en un conjunto de tablas e índices en el esquema de la base d...
XML Repository <ul><li>Acceso al repositorio </li></ul><ul><ul><ul><li>Navegando a través de la estructura de directorios ...
XML Repository <ul><li>Acceso al repositorio </li></ul><ul><ul><ul><li>Accediendo a través de HTTP/WebDAV </li></ul></ul><...
XML Repository <ul><li>Uso de WebDAV y Oracle XML DB </li></ul><ul><ul><ul><li>WebDAV (Web Distributed Authoring and Versi...
XML Repository <ul><li>PATH_VIEW </li></ul><ul><li>RESOURCE_VIEW </li></ul>
XML Repository <ul><li>Insertando un recurso con resource_view </li></ul>insert into resource_view values(sys.xmltype.crea...
XML Repository <ul><li>Actualizando un recurso con resource_view </li></ul>insert into resource_view values(sys.xmltype.cr...
XML Repository <ul><li>Borrado de recursos </li></ul>delete from resource_view where any_path = '/home/SCOTT/example
Internet Protocol Support
Internet Protocol Support <ul><li>El protocolo de XML DB usa parámetros de configuración que están almacenados en /xdbconf...
Versionado <ul><li>La capacidad de versionado de XML DB provee una forma de crear y gestionar diferentes versiones de un r...
Versionado <ul><li>Oracle XML DB tiene un paquete DBMS_XDB_VERSION para poner a un recurso bajo control de versión y poder...
Versionado <ul><li>declare </li></ul><ul><li>resid DBMS_XDB_VERSION.RESID_TYPE; </li></ul><ul><li>res XMLType; </li></ul><...
SQLX <ul><li>Generando XML desde la base de datos </li></ul><ul><ul><li>Funciones SQLX </li></ul></ul><ul><ul><ul><li>XMLE...
SQLX <ul><li>XMLElement()  </li></ul><ul><ul><li>Toma un nombre para el elemento, una colección de atributos opcionales pa...
SQLX <ul><li>XMLElement()  </li></ul>SELECT e.employee_id, XMLELEMENT ( &quot;Emp&quot;, e.first_name ||' ' || e.last_name...
SQLX <ul><li>XMLElement() </li></ul><ul><ul><li>XML_Attributes_clause </li></ul></ul><ul><ul><ul><li>XMLELEMENT() toma tam...
SQLX <ul><li>XMLElement() </li></ul><ul><ul><li>XML_Attributes_clause </li></ul></ul>SELECT XMLELEMENT ( &quot;Emp&quot;, ...
SQLX <ul><li>XMLForest()  </li></ul><ul><ul><li>Produce un bosque de elementos XML desde la lista dada de argumentos. </li...
SQLX <ul><li>XMLForest()  </li></ul>SELECT XMLELEMENT(&quot;Emp&quot;, XMLATTRIBUTES ( e.first_name ||' '|| e.last_name AS...
SQLX <ul><li>XMLSEQUENCE() </li></ul><ul><ul><li>Devuelve una secuencia de tipo XMLType </li></ul></ul>
SQLX <ul><li>XMLSEQUENCE() </li></ul>SELECT SYS_XMLAGG(value(e), xmlformat('EMPLOYEES')) FROM TABLE(XMLSequence(Extract(do...
SQLX <ul><li>XMLConcat()  </li></ul><ul><ul><li>Concatena los argumentos pasados para crear un fragmento XML </li></ul></ul>
SQLX <ul><li>XMLConcat()  </li></ul>SELECT XMLConcat ( XMLElement (&quot;first&quot;, e.fname), XMLElement (&quot;last&quo...
SQLX <ul><li>XMLAgg()  </li></ul><ul><ul><li>Es una función de agregación que produce un bosque de elementos XML desde una...
SQLX <ul><li>XMLAgg() </li></ul>SELECT XMLELEMENT(&quot;Department&quot;, XMLAGG( XMLELEMENT(&quot;Employee&quot;, e.job_i...
SQLX <ul><li>Extensiones de Oracle a SQLX </li></ul><ul><ul><li>XMLColAttVal() </li></ul></ul><ul><ul><ul><li>Genera un bo...
SQLX <ul><ul><li>XMLColAttVal() </li></ul></ul>SELECT XMLELEMENT(&quot;Emp&quot;,XMLATTRIBUTES(e.fname ||' '||e.lname AS &...
SQLX <ul><li>DBMS_XMLGEN </li></ul><ul><ul><li>Crea documentos XML desde cualquier consulta SQL mediante el mapeo de los r...
SQLX <ul><li>DBMS_XMLGEN </li></ul>CREATE TABLE temp_clob_tab(result CLOB);  DECLARE qryCtx DBMS_XMLGEN.ctxHandle; result ...
SQLX <ul><li>DBMS_XMLGEN </li></ul>SELECT * FROM temp_clob_tab;  RESULT  ------------------------------------  <?xml versi...
SQLX <ul><li>DBMS_XMLGEN </li></ul><ul><ul><li>Paginación </li></ul></ul>CREATE TABLE temp_clob_tab ( result clob);  decla...
SQLX
http://www.hermenegildoromero.com Hermenegildo Romero [email_address]
Upcoming SlideShare
Loading in …5
×

Oracle xmldb

1,822 views

Published on

Oracle y XML (Oracle XMLDB)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,822
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Oracle xmldb

  1. 1. Oracle XMLDB Funcionalidades de Oracle para el lenguaje XML
  2. 2. Historia de la Relación de XML con Oracle <ul><li>Oracle 8i </li></ul><ul><ul><li>load Java packages from the Oracle XDK into Oracle JServer </li></ul></ul><ul><ul><li>create the XML PL/SQL packages built on Java stored </li></ul></ul><ul><ul><li>procedures </li></ul></ul><ul><li>Oracle 9i - release 1 </li></ul><ul><ul><li>new native XML data type introduced to store and query XML data </li></ul></ul><ul><li>Oracle 9i - release 2 </li></ul><ul><ul><li>additional XML Schema–based data storage for XMLType </li></ul></ul><ul><ul><li>document-centric XML DB Repository for high-performance document management </li></ul></ul><ul><ul><li>new XMLType member functions, new SQL/XML functions, and C-based PL/SQL packages for processing XML data </li></ul></ul>
  3. 3. Historia de la Relación de XML con Oracle <ul><li>Oracle 10g </li></ul><ul><ul><li>supports a certain level of XML Schema evolution </li></ul></ul><ul><ul><li>contains extensive native XML functionality within the database server </li></ul></ul><ul><ul><li>possible to use XML interfaces in the Oracle XDK to connect to databases through JDBC or OCI to build mid-tier XML database applications </li></ul></ul>
  4. 4. Funcionalidades XML de Oracle 10g Java Stored Procedures XDK XML APIs XML DB Repository C-based PL/SQL Packages SQL/XML XMLType Native XML Support Extensible XML Support C External Procedures
  5. 5. Oracle XDK
  6. 6. Oracle XDK <ul><li>Descripción de XDK </li></ul><ul><ul><li>Un conjunto de componentes, herramientas y utilidades en Java, C y C++, que facilita las tareas de creación y desarrollo de aplicaciones con XML. </li></ul></ul><ul><ul><li>Fundamentalmente dirigido al ámbito de desarrollo en lenguaje JAVA </li></ul></ul>
  7. 7. Oracle XDK <ul><li>Componentes de XDK </li></ul><ul><ul><li>XML Parsers </li></ul></ul><ul><ul><li>XSLT Processor </li></ul></ul><ul><ul><li>XML Schema Processors </li></ul></ul><ul><ul><li>XML Java Beans </li></ul></ul><ul><ul><li>XML Class Generator </li></ul></ul><ul><li>XML SQL Utility </li></ul><ul><li>XSQL Servlet : </li></ul><ul><li>TransX Utility </li></ul>
  8. 8. Oracle XDK <ul><li>XML Parsers </li></ul><ul><ul><li>Para la creación y análisis de XML. </li></ul></ul><ul><ul><li>Usa los interfaces DOM, SAX y JAXP. </li></ul></ul>
  9. 9. Oracle XDK <ul><li>XSLT Processor </li></ul><ul><ul><li>Renderiza o transforma XML en otros formatos basados en texto como el propio HTML. </li></ul></ul>
  10. 10. Oracle XDK <ul><li>XML Schema Processors </li></ul><ul><ul><li>Soporta JAVA, C y C++ permite el uso de XML con tipos de datos simples y complejos. </li></ul></ul>
  11. 11. Oracle XDK <ul><li>XML Java Beans </li></ul><ul><ul><li>Muestra y transforma documentos XML y datos usando componentes Java. </li></ul></ul>
  12. 12. Oracle XDK <ul><li>XML Class Generators </li></ul><ul><ul><li>Genera clases automáticamente desde DTDs y XML schemas para el envío de XML a formularios WEB o aplicaciones. </li></ul></ul>
  13. 13. Oracle XDK <ul><li>XML SQL Utility </li></ul><ul><ul><li>Genera documentos XML DTD’s y XML schemas desde consultas SQL. </li></ul></ul><ul><ul><li>Soporta Java </li></ul></ul>
  14. 14. Oracle XDK <ul><li>XSQL Servlet </li></ul><ul><ul><li>Combina XML, SQL y XSLT en el servidor para proveer contenidos web dinámicos. </li></ul></ul>
  15. 15. Oracle XDK <ul><li>TransX Utility </li></ul><ul><ul><li>Es una API Java </li></ul></ul><ul><ul><li>Facilita la tarea de cargar datos encapsulados en formato XML en la base de datos. </li></ul></ul><ul><ul><li>Posee algunas funcionalidades adicionales útiles para instalaciones. </li></ul></ul>
  16. 16. Oracle XMLDB
  17. 17. Oracle XMLDB <ul><li>Oracle XML-DB está formado por tecnologías que permiten almacenamiento estructurado de código XML y técnicas para la obtención de datos en formato XML. </li></ul><ul><li>Oracle cumple y sigue todas las recomendaciones y estándares marcados por el consorcio de la WWW. </li></ul><ul><li>Oracle XML-DB sólo está disponible a partir de la release 2 de Oracle 9. </li></ul>
  18. 18. O racle XMLDB <ul><li>Oracle XML-DB puede ser usada para almacenar, consultar, modificar, transformar o cualquier otro proceso XML, manteniendo por otra parte acceso a los mismos datos con el lenguaje SQL estándar de Oracle. </li></ul><ul><li>Oracle XML-DB no es un servidor o producto separado, se refiere a un conjunto de herramientas de alto nivel para el almacenamiento y gestión de datos en formato XML. </li></ul>
  19. 19. Oracle XMLDB <ul><li>Beneficios de Oracle XML-DB </li></ul><ul><ul><li>Habilidades para gestionar datos estructurados o no estructurados bajo el mismo estándar XML (XML Schema). </li></ul></ul><ul><ul><li>Funcionalidad transparente para el uso, e intercambio de tecnologías entre SQL y XML. </li></ul></ul><ul><ul><li>Funcionalidades de repositorio para documentos XML. </li></ul></ul><ul><ul><li>Mejor gestión de datos no estructurados mediante el soporte de: </li></ul></ul><ul><ul><ul><li>Indexado de XML </li></ul></ul></ul><ul><ul><ul><li>Búsquedas integradas de texto para XML (Oracle Text) </li></ul></ul></ul><ul><ul><ul><li>Múltiples vistas de los datos, incluyendo vistas relacionales para acceso a través de SQL. </li></ul></ul></ul>
  20. 20. Oracle XMLDB <ul><li>Arquitectura </li></ul><ul><li>de XML-DB </li></ul>
  21. 21. Oracle XMLDB <ul><li>El almacenamiento de documentos XML </li></ul>
  22. 22. Hojas XSQL
  23. 23. Hojas XSQL <ul><li>Las páginas XSQL son plantillas contenidas en ficheros * .xsql que permiten por medio de sentencias SQL: </li></ul><ul><ul><li>Montar páginas de datos dinámicas &quot;data pages&quot; basadas en una o mas consultas SQL parametrizadas. </li></ul></ul><ul><ul><li>Transformar una página de datos para producir un resultado final en XML, HTML o simplemente en texto plano. </li></ul></ul><ul><ul><li>Formatear el resultado usando hojas de estilo XSLT asociadas. </li></ul></ul>
  24. 24. Hojas XSQL <ul><li>Las plantillas son procesadas por un motor XSQL, el llamado XSQL Servlet, una utilidad de línea de comandos y una API llamada XSQLRequest. </li></ul>
  25. 25. Hojas XSQL <ul><li>Nuestra primera página XSQL </li></ul><ul><ul><li>Una plantilla XSQL es un documento XML que usa el tag <xsql:query> cada vez que queramos incluir los resultados de sentencias SQL. </li></ul></ul><ul><ul><li><?xml version=&quot;1.0&quot;?> </li></ul></ul><ul><ul><li><xsql:query connection=&quot;xmlbook&quot; xmlns:xsql=&quot;urn:oracle-xsql&quot;> </li></ul></ul><ul><ul><li>SELECT 'Hello, World!' AS text FROM DUAL </li></ul></ul><ul><ul><li></xsql:query> </li></ul></ul>
  26. 26. Hojas XSQL <ul><li>xmlns:xsql=&quot;urn:oracle-xsql“ </li></ul><ul><li>Define el prefijo XSQL para el “namespace” que identifica los distintos elementos en las páginas XSQL, esto permite mezclar en el mismo documento de manera libre tanto elementos del vocabulario de XSQL con otros elementos XML. </li></ul><ul><li>Esta declaración ha de ser incluida o de lo contrario la página no será reconocida como un página XSQL. </li></ul>
  27. 27. Hojas XSQL <ul><li>connection=&quot;xmlbook&quot; </li></ul><ul><li>Este atributo del elemento <XSQL:query> determina que conexión de base de datos utilizar. </li></ul><ul><li>Las conexiones de base de datos están definidas en el fichero xsqlconfig.xml </li></ul>
  28. 28. Hojas XSQL <ul><li><?xml version=&quot;1.0&quot;?> </li></ul><ul><li><connectiondefs dumpallowed=&quot;no&quot;> </li></ul><ul><li><connection name=&quot;xmlbook&quot;> </li></ul><ul><li><username>xmlbook</username> </li></ul><ul><li><password>xmlbook</password> </li></ul><ul><li><dburl>jdbc:oracle:thin:@localhost:1521:ORCL</dburl> </li></ul><ul><li><driver>oracle.jdbc.driver.OracleDriver</driver> </li></ul><ul><li></connection> </li></ul><ul><li><connection name=&quot;demo&quot;> </li></ul><ul><li><username>scott</username> </li></ul><ul><li><password>tiger</password> </li></ul><ul><li><dburl>jdbc:oracle:thin:@demo-machine:1521:demo</dburl> </li></ul><ul><li><driver>oracle.jdbc.driver.OracleDriver</driver> </li></ul><ul><li></connection> </li></ul><ul><li></connectiondefs> </li></ul>
  29. 29. Hojas XSQL <ul><li>Si guardamos nuestro ejemplo con la extensión .xsql y ejecutamos obtendremos un resultado como este: </li></ul>Registro <?xml version = '1.0'?> <ROWSET> <ROW num=&quot;1&quot;> <TEXT>Hello, World!</TEXT> </ROW> </ROWSET> Campo Valor <> Nulo
  30. 30. Hojas XSQL <ul><li>Nuestra plantilla podría también incluir una llamada a una plantilla XSLT como esta: </li></ul><?xml version=&quot;1.0&quot;?> <?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;HelloWorld.xsl&quot;?> <xsql:query connection=&quot;xmlbook&quot; xmlns:xsql=&quot;urn:oracle-xsql&quot;> SELECT 'Hello, World!' AS text FROM DUAL </xsql:query>
  31. 31. Hojas XSQL <ul><li>Nuestro “hello world” es el ejemplo mas simple posible, las páginas XSQL pueden además: </li></ul><ul><ul><li>Contener sentencias SQL de mayor complejidad dentro de los elementos <xsql:query>. </li></ul></ul><ul><ul><li>Incluir múltiples consultas en un página </li></ul></ul><ul><ul><li>Controlar la generación de XML en cada consulta. </li></ul></ul><ul><ul><li>Usar valores provenientes de “request” como parámetros en una consulta SQL. </li></ul></ul><ul><ul><li>Transformar la salida en diferentes formatos dependiendo del programa o navegador que realiza la petición. </li></ul></ul>
  32. 32. Hojas XSQL <ul><li>Usando parámetros en las consultas </li></ul><ul><ul><li>Para hacer referencia al valor de un parámetro utilizaremos: </li></ul></ul><ul><ul><ul><li>{@ nombre_del_parámetro } </li></ul></ul></ul><?xml version=&quot;1.0&quot;?> <xsql:query connection=&quot;xmlbook&quot; msg=&quot;Hello, World!&quot; xmlns:xsql=&quot;urn:oracle-xsql&quot;> SELECT '{@msg}' AS text, TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS') AS sent FROM dual </xsql:query> Cambiamos el nombre Del elemento usando Alias Cambiamos el nombre Del elemento usando un ALIAS
  33. 33. Hojas XSQL <ul><li>Al hacer la llamada mediante: </li></ul><ul><li>http://..../ HelloWorld.xsql?msg =HOLA </li></ul><ul><li>Obtendríamos: </li></ul><?xml version = '1.0'?> <ROWSET> <ROW num=&quot;1&quot;> <TEXT>HOLA</TEXT> <SENT>05-SEP-1999 15:11:45</SENT> </ROW> </ROWSET>
  34. 34. Hojas XSQL <ul><li>Además de utilizar alias y parámetros para controlar el documento XML resultante, se pueden especificar también atributos del elemento <xsql:query> que modifican la salida. </li></ul><ul><ul><li>Rowset-element </li></ul></ul><ul><ul><ul><li>Nombre que dará al elemento en sustitución del elemento <ROWSET> </li></ul></ul></ul><ul><ul><li>Row.element </li></ul></ul><ul><ul><ul><li>Sustituirá a <ROW> </li></ul></ul></ul><ul><ul><li>Max-rows </li></ul></ul><ul><ul><ul><li>Número máximo de filas que mostrará en el documento </li></ul></ul></ul><ul><ul><li>Skip-rows </li></ul></ul><ul><ul><ul><li>Número de filas que se saltará antes de mostrar en el resultado. </li></ul></ul></ul>
  35. 35. Hojas XSQL <ul><ul><li>Id-attribute </li></ul></ul><ul><ul><ul><li>Nombre del atributo para el identificador de fila de cada una de las filas del resultado, por defecto es num. </li></ul></ul></ul><ul><ul><ul><li>Null-indicator </li></ul></ul></ul><ul><ul><ul><ul><li>Si está a Y o YES fuerza a utilizar un atributo que indica los nulos en aquellas columnas que el valor sea nulo. </li></ul></ul></ul></ul><ul><ul><ul><li>Tag-case </li></ul></ul></ul><ul><ul><ul><ul><li>Si está a upper los nombres de las columnas estarán en mayúsculas, lower en minúsculas. </li></ul></ul></ul></ul>
  36. 36. Hojas XSQL <?xml version=&quot;1.0&quot;?> <xsql:query connection=&quot;xmlbook&quot; xmlns:xsql=&quot;urn:oracle-xsql&quot; rowset-element=&quot;DEPARTMENT-LIST&quot; row-element=&quot;DEPARTMENT&quot;> SELECT dept.deptno AS &quot;NUMBER&quot;, sum(sal) AS &quot;TOTAL-SALARIES&quot; FROM emp,dept WHERE dept.deptno = emp.deptno GROUP BY dept.deptno ORDER BY 1 </xsql:query>
  37. 37. Hojas XSQL <ul><li>El resultado: </li></ul><?xml version = '1.0'?> <DEPARTMENT-LIST> <DEPARTMENT num=&quot;1&quot;> <NUMBER>10</NUMBER> <TOTAL-SALARIES>8750</TOTAL-SALARIES> </DEPARTMENT> <DEPARTMENT num=&quot;2&quot;> <NUMBER>20</NUMBER> <TOTAL-SALARIES>10875</TOTAL-SALARIES> </DEPARTMENT> <DEPARTMENT num=&quot;3&quot;> <NUMBER>30</NUMBER> <TOTAL-SALARIES>9400</TOTAL-SALARIES> </DEPARTMENT> </DEPARTMENT-LIST>
  38. 38. Hojas XSQL <ul><li>Es posible también, utilizar parámetros en los atributos del elemento <xsql:query> </li></ul><?xml version=&quot;1.0&quot;?> <xsql:query connection=&quot;xmlbook&quot; cat=&quot;news&quot; skip=&quot;0&quot; max-rows=&quot;2&quot; skip-rows=&quot;{@skip}&quot; xmlns:xsql=&quot;urn:oracle-xsql&quot;> SELECT title,url
  39. 39. Hojas XSQL <ul><li>Estructuras anidadas con CURSOR </li></ul><xsql:query connection=&quot;demo&quot; xmlns:xsql=&quot;urn:oracle-xsql&quot;> SELECT dname, CURSOR( SELECT ename,sal FROM emp WHERE emp.deptno = dept.deptno) as employees /* Column Alias */ FROM dept WHERE deptno = {@department} </xsql:query>
  40. 40. Hojas XSQL <ul><li>Resultado </li></ul><ROWSET> <ROW num=&quot;1&quot;> <DNAME>ACCOUNTING</DNAME> <EMPLOYEES> <EMPLOYEES_ROW num=&quot;1&quot;> <ENAME>CLARK</ENAME> <SAL>2450</SAL> </EMPLOYEES_ROW> <EMPLOYEES_ROW num=&quot;2&quot;> <ENAME>KING</ENAME> <SAL>5000</SAL> </EMPLOYEES_ROW> <EMPLOYEES_ROW num=&quot;3&quot;> <ENAME>MILLER</ENAME> <SAL>1300</SAL> </EMPLOYEES_ROW> </EMPLOYEES> </ROW> </ROWSET>
  41. 41. Hojas XSQL <ul><li>Consultas para validar resultados que no producen elementos. </li></ul><?xml version=&quot;1.0&quot;?> <xsql:query connection=&quot;xmlbook&quot; max-rows=&quot;1&quot; rowset-element=&quot;Ok&quot; row-element=&quot;Airport&quot; xmlns:xsql=&quot;urn:oracle-xsql&quot;> SELECT tla &quot;Code&quot;, description &quot;Description&quot; FROM AIRPORT WHERE tla = UPPER('{@code}') <xsql:no-rows-query max-rows=&quot;4&quot; rowset-element=&quot;Error&quot; row-element=&quot;Airport&quot;> SELECT tla &quot;Code&quot;, description &quot;Description&quot; FROM AIRPORT WHERE UPPER(description) LIKE UPPER('%{@code}%') ORDER BY 2 </xsql:no-rows-query> </xsql:query> • Valida y si encuentra una fila crea un elemento error
  42. 42. Hojas XSQL <ul><li>Parámetros de sesión </li></ul><ul><ul><li>Establece un parámetro a nivel de sesión HTTP. </li></ul></ul><ul><ul><li>El valor puede ser asignado usando un valor estático o dinámico proveniente o bien de otro parámetro o bien del resultado de una consulta a la BBDD. </li></ul></ul><xsql:set-session-param>
  43. 43. Hojas XSQL <ul><li>Cookies </li></ul><ul><ul><li>Asigna una cookie HTTP. </li></ul></ul><ul><ul><li>El valor puede ser estático o dinámico al igual que en el caso de los parámetros de sesión. </li></ul></ul><xsql:set-cookie>
  44. 44. Hojas XSQL <ul><li>Parámetros de página </li></ul><ul><ul><li>Establece un parámetro a nivel de página XSQL, cuyo valor puede ser usado en distintas partes de la página. </li></ul></ul><ul><ul><li>El valor puede ser estático o dinámico </li></ul></ul><xsql:set-page-param>
  45. 45. Hojas XSQL <ul><li>Parámetros como elementos </li></ul><ul><ul><li>Incluye un parámetro y su valor como un elemento en la página XSQL. </li></ul></ul><xsql:include-param>
  46. 46. XMLType
  47. 47. XMLType <ul><ul><li>Es un nuevo tipo de datos. </li></ul></ul><ul><ul><li>Específicamente creado para albergar contenido en formato XML. </li></ul></ul><ul><ul><li>Realmente está basado en la estructura CLOB. </li></ul></ul><ul><ul><li>Incluye una serie de funciones para que los datos XML contenidos en este tipo puedan ser consultados y “navegados” a través de su estructura. </li></ul></ul>
  48. 48. XMLType <ul><li>Puede ser usado en procedimientos PL/SQL como parámetros, valores de retorno y variables. </li></ul><ul><ul><li>Puede representar un documento XML como instancia de un XMLtype </li></ul></ul><ul><ul><li>Pueden usarse funciones XMLType para crear, extraer e indexar datos XML almacenados en Oracle 9i. </li></ul></ul><ul><ul><li>Existen APIs para PL/SQL y Java </li></ul></ul>
  49. 49. XMLType <ul><li>Se pueden crear tanto columnas como tablas de tipo XMLType. </li></ul>
  50. 50. XMLType <ul><li>Arquitectura </li></ul><ul><li>del almacenado </li></ul><ul><li>de tipos </li></ul><ul><li>XMLType </li></ul>
  51. 51. XMLType <ul><li>Crear columnas de tipo XMLType para albergar documentos XML </li></ul>CREATE TABLE warehouses( warehouse_id NUMBER(4), warehouse_spec XMLTYPE , warehouse_name VARCHAR2(35), location_id NUMBER(4));
  52. 52. XMLType <ul><li>A ñadir una columna de tipo XMLType a una tabla existente </li></ul>ALTER TABLE po_xml_tab add (custDoc XMLType);
  53. 53. XMLType <ul><li>E liminar una columna de tipo XMLType de una tabla existente </li></ul>ALTER TABLE po_xml_tab drop (custDoc);
  54. 54. XMLType <ul><li>Insertar valores en una columna de tipo XMLtype </li></ul>INSERT INTO warehouses VALUES ( 100, XMLType( '<Warehouse whNo=&quot;100&quot;> <Building>Owned</Building> </Warehouse>'), 'Tower Records', 1003);
  55. 55. XMLType <ul><li>Modificar valores en una columna de tipo XMLtype </li></ul>UPDATE warehouses SET warehouse_spec = XMLType ('<Warehouse whono=&quot;200&quot;> <Building>Leased</Building> </Warehouse>');
  56. 56. XMLType <ul><li>Creación de Tablas XMLType </li></ul>CREATE TABLE XMLTABLE OF XMLType;
  57. 57. XMLType <ul><li>Opciones de Almacenamiento </li></ul>CREATE TABLE po_xml_tab( poid NUMBER(10), poDoc XMLTYPE ) XMLType COLUMN poDoc STORE AS CLOB ( TABLESPACE lob_seg_ts STORAGE (INITIAL 4096 NEXT 4096) CHUNK 4096 NOCACHE LOGGING );
  58. 58. XMLType <ul><li>Opciones de Almacenamiento </li></ul><ul><ul><li>Añadir una columna XMLType a una tabla existente </li></ul></ul>ALTER TABLE po_xml_tab add( custDoc XMLTYPE ) XMLType COLUMN custDoc STORE AS CLOB ( TABLESPACE lob_seg_ts STORAGE (INITIAL 4096 NEXT 4096) CHUNK 4096 NOCACHE LOGGING );
  59. 59. XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>La carga de datos en columnas y tablas XMLtype puede realizarse bien a través de sentencias INSERT tal como anteriormente o bien a través de SQL*loader. </li></ul></ul>
  60. 60. XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>Inserción usando createXML() con CLOB </li></ul></ul>CREATE TABLE po_clob_tab ( poid number, poClob CLOB ); INSERT INTO po_clob_tab VALUES(100, '<?xml version=&quot;1.0&quot;?> <PO pono=&quot;1&quot;> <PNAME>Po_1</PNAME> <CUSTNAME>John</CUSTNAME> <SHIPADDR> <STREET>1033, Main Street</STREET> <CITY>Sunnyvalue</CITY> <STATE>CA</STATE> </SHIPADDR> </PO>');
  61. 61. XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>Inserción usando una instancia XMLType </li></ul></ul>INSERT INTO po_xml_tab SELECT poid, XMLType(poClob) FROM po_clob_tab;
  62. 62. XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>Inserción usando XMLType() con cadena de texto. </li></ul></ul>INSERT INTO po_xml_tab VALUES(100, XMLType ( '<?xml version=&quot;1.0&quot;?> <PO pono=&quot;1&quot;> <PNAME>Po_1</PNAME> <CUSTNAME>John</CUSTNAME> <SHIPADDR> <STREET>1033, Main Street</STREET> <CITY>Sunnyvalue</CITY> <STATE>CA</STATE> </SHIPADDR> </PO>' ) );
  63. 63. XMLType <ul><li>Carga de Datos en XMLType </li></ul><ul><ul><li>Inserción usando XMLElement() </li></ul></ul>INSERT INTO po_xml_tab SELECT XMLelement(&quot;po&quot;, value(p)) FROM po p WHERE p.pono=2001;
  64. 64. XMLType <ul><li>Seleccionar datos XML de Tablas XMLtype </li></ul><ul><ul><li>Seleccionar columnas XMLType con getClobVal() </li></ul></ul>SET long 2000 SELECT e.poDoc. getClobval() AS poXML FROM po_xml_tab e; POXML --------------------- <?xml version=&quot;1.0&quot;?> <PO pono=&quot;2&quot;> <PNAME>Po_2</PNAME> <CUSTNAME>Nance</CUSTNAME> <SHIPADDR> <STREET>2 Avocet Drive</STREET> <CITY>Redwood Shores</CITY> <STATE>CA</STATE> </SHIPADDR> </PO>
  65. 65. XMLType <ul><li>Seleccionar datos XML de Tablas XMLtype </li></ul><ul><ul><li>Usando expresiones XPATH para buscar en documentos XML </li></ul></ul><ul><ul><ul><li>ExistNode() </li></ul></ul></ul>SELECT e.poDoc.getClobval() AS poXML FROM po_xml_tab e WHERE e.poDoc. existsNode ('/PO[PNAME = &quot;po_2&quot;]') = 1; SELECT warehouse_id, EXISTSNODE (warehouse_spec, '/Warehouse/Docks') &quot;Loading Docks&quot; FROM warehouses WHERE warehouse_spec IS NOT NULL;
  66. 66. XMLType <ul><ul><ul><li>Extract() </li></ul></ul></ul>SELECT warehouse_name, extract (warehouse_spec, '/Warehouse/Docks').getStringVal() &quot;Number of Docks&quot; FROM warehouses WHERE warehouse_spec IS NOT NULL; WAREHOUSE_NAME Number of Docks -------------------- -------------------- Southlake, Texas <Docks>2</Docks> San Francisco <Docks>1</Docks> New Jersey <Docks/> Seattle, Washington <Docks>3</Docks>
  67. 67. XMLType <ul><ul><ul><li>Extractvalue() </li></ul></ul></ul>SELECT warehouse_name, extractValue (e.warehouse_spec, '/Warehouse/Docks') &quot;Docks&quot; FROM warehouses e WHERE warehouse_spec IS NOT NULL; WAREHOUSE_NAME Docks -------------------- ------------ Southlake, Texas 2 San Francisco 1 New Jersey Seattle, Washington 3
  68. 68. XMLType <ul><ul><ul><li>UpdateXML() </li></ul></ul></ul>UPDATE po_xml_tab e SET e.poDoc = XMLType( '<?xml version=&quot;1.0&quot;?> <PO pono=&quot;2&quot;> <PNAME>Po_2</PNAME> <CUSTNAME>Nance</CUSTNAME> <SHIPADDR> <STREET>2 Avocet Drive</STREET> <CITY>Redwood Shores</CITY> <STATE>CA</STATE> </SHIPADDR> </PO>') WHERE e.poDoc.EXTRACT('/PO/PONO/text()').getNumberVal() = 2001;
  69. 69. XMLType <ul><ul><ul><li>UpdateXML() </li></ul></ul></ul>UPDATE po_xml_tab SET poDoc = UPDATEXML(poDoc, '/PO/CUSTNAME/text()', 'John'); SELECT e.poDoc.getstringval() AS newpo FROM po_xml_tab e; NEWPO -------------------------------------------------------------------- <?xml version=&quot;1.0&quot;?> <PO pono=&quot;2&quot;> <PNAME>Po_2</PNAME> <CUSTNAME> John </CUSTNAME> <SHIPADDR> <STREET>2 Avocet Drive</STREET> <CITY>Redwood Shores</CITY> <STATE>CA</STATE> </SHIPADDR> </PO>
  70. 70. XMLType <ul><ul><ul><li>UpdateXML() </li></ul></ul></ul>UPDATE emp_tab e SET e.emp_col = UPDATEXML(e.emp_col, '/EMPLOYEES/EMP[EMPNAME=&quot;Joe&quot;]/SALARY/text()',100000, '//EMP[EMPNAME=&quot;Jack&quot;]/EMPNAME/text()','Jackson', '//EMP[EMPNO=217]',XMLTYPE.CREATEXML( '<EMP><EMPNO>217</EMPNO><EMPNAME>Jane</EMPNAME></EMP>')) WHERE EXISTSNODE(e.emp_col, '//EMP') = 1;
  71. 71. XMLType <ul><ul><ul><li>Creación de vistas usando updateXML </li></ul></ul></ul>CREATE VIEW new_emp_view AS SELECT UPDATEXML(emp_col, '/EMPLOYEES/EMP/SALARY/text()', 0) emp_view_col FROM emp_tab e;
  72. 72. XMLType <ul><ul><li>Eliminando filas usando extract() </li></ul></ul>DELETE FROM po_xml_tab e WHERE e.poDoc.extract('/PO/PNAME/text()').getStringVal()='Po_2';
  73. 73. XMLType <ul><li>Creación de índices en XMLType </li></ul><ul><ul><li>Índices basados en extract() </li></ul></ul><ul><ul><li>Índices basados en existnode() </li></ul></ul>CREATE INDEX city_index ON po_xml_tab (poDoc.extract('//PONO/text()').getNumberVal()); CREATE BITMAP INDEX po_index ON po_xml_tab (poDoc.existsNode('//SHIPADDR'));
  74. 74. XML Schema Support <ul><li>XML DB permite construir objetos de tipo XMLType y tenerlos permanentemente validados con un XML Schema. </li></ul><ul><li>Se pueden crear tablas basadas en un esquema XML predefinido. Esto crea estructuras de almacenamiento más apropiadas para los documentos basados en el esquema. </li></ul><ul><li>Registro de esquemas mediante el paquete DBMS_XMLSCHEMA, para compartir almacenamiento y definición de tipos. </li></ul><ul><li>Los Esquemas registrados pueden ser compartidos para toda la base de datos y usuarios. </li></ul>
  75. 75. XML Schema Support <ul><li>Validación automática de documentos XML cuando estos son añadidos a Oracle XML DB. </li></ul><ul><li>Validación explicita utilizando la función XMLIsSchemaValid(). </li></ul>
  76. 76. XML Schema Support <ul><li>Validación XML </li></ul><ul><ul><li>XMLisValid() </li></ul></ul><ul><ul><li>schemaValidate </li></ul></ul><ul><ul><li>Isschemavalidated() </li></ul></ul>XMLIsValid ( XMLType_inst [, schemaurl [, elem]]) MEMBER PROCEDURE schemaValidate MEMBER FUNCTION isSchemaValidated return NUMBER deterministic
  77. 77. XML Schema Support <ul><li>Validación XML </li></ul><ul><ul><li>setSchemaValidated() </li></ul></ul><ul><ul><li>isSchemaValid() </li></ul></ul>MEMBER PROCEDURE setSchemaValidated(flag IN BINARY_INTEGER := 1) SELECT x.xmlcol.isSchemaValid('http://www.example.com/schemas/ipo.xsd', 'purchaseOrder') FROM po_tab x;
  78. 78. XML Repository <ul><li>Provee un sistema de ficheros. </li></ul><ul><li>Permite el acceso a los documentos XML almacenados en XML DB a través de un sistema jerarquizado de carpetas o directorios </li></ul><ul><li>Soporta Listas de control de Acceso (ACLs) (Access Control Lists) para cada objeto de tipo XMLType y permite definir sus propios privilegios. </li></ul>
  79. 79. XML Repository <ul><li>El Repositorio puede ser usado para ver contenido XML como si se tratara de navegar a través de directorios. </li></ul><ul><li>Los items gestionados por el repositorio se llaman recursos (resources). </li></ul><ul><li>Existe un indexado jerárquico, para acelerar la búsqueda de carpetas. </li></ul>
  80. 80. XML Repository <ul><li>Se puede buscar en el repositorio usando operadores SQL como UNDER_PATH o DEPTH para localizar datos acerca de los ficheros XML como el propietario o la fecha de creación y por supuesto el contenido de los mismos. </li></ul><ul><li>Se puede acceder a las carpetas usando WebDAV, FTP y HTTP. </li></ul><ul><li>Usando las capacidades de organización por carpetas se puede almacenar contenidos en la base de datos en estructuras jerárquicas en lugar de las tradicionales estructuras relacionales. </li></ul>
  81. 81. XML Repository <ul><li>Oracle XML DB almacena el repositorio en un conjunto de tablas e índices en el esquema de la base de datos de la XML DB. </li></ul><ul><li>Las tablas que almacenan determinados recursos del repositorio también pueden ser creadas en un esquema determinado. </li></ul>
  82. 82. XML Repository <ul><li>Acceso al repositorio </li></ul><ul><ul><ul><li>Navegando a través de la estructura de directorios </li></ul></ul></ul>
  83. 83. XML Repository <ul><li>Acceso al repositorio </li></ul><ul><ul><ul><li>Accediendo a través de HTTP/WebDAV </li></ul></ul></ul>
  84. 84. XML Repository <ul><li>Uso de WebDAV y Oracle XML DB </li></ul><ul><ul><ul><li>WebDAV (Web Distributed Authoring and Versioning) es un protocolo estándar que se usa para proveer a los usuarios con una interfaz de sistema de ficheros en el repositorio XML de XML DB. </li></ul></ul></ul><ul><ul><ul><li>La manera más popular de acceder a un servidor es a través de los “WebFolders” en Windows 2000 o Windows XP. </li></ul></ul></ul><ul><ul><ul><li>WebDAV es una extensión del protocolo HTTP 1.1 </li></ul></ul></ul><ul><ul><ul><li>WebDAV tiene operaciones que permiten el almacenamiento y recuperación de recursos, crear listas de contenido de colecciones de recursos, bloquear recursos al acceso concurrente, y aplicar y recuperar propiedades de los recursos. </li></ul></ul></ul>
  85. 85. XML Repository <ul><li>PATH_VIEW </li></ul><ul><li>RESOURCE_VIEW </li></ul>
  86. 86. XML Repository <ul><li>Insertando un recurso con resource_view </li></ul>insert into resource_view values(sys.xmltype.createxml(' <Resource xmlns=&quot;http://xmlns.oracle.com/xdb/XDBResource.xsd&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://xmlns.oracle.com/xdb/XDBResource.xsd http://xmlns.oracle.com/xdb/XDBResource.xsd&quot;> < Author >John Doe</Author> <DisplayName>example</DisplayName> <Comment>This resource was contrived for resource view demo</Comment> <Language>en</Language> <CharacterSet>ASCII</CharacterSet> <ContentType>text/plain</ContentType> </Resource>'), '/home/SCOTT');
  87. 87. XML Repository <ul><li>Actualizando un recurso con resource_view </li></ul>insert into resource_view values(sys.xmltype.createxml(' update resource_view set res = sys.xmltype.createxml(' <Resource xmlns=&quot;http://xmlns.oracle.com/xdb/XDBResource.xsd&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://xmlns.oracle.com/xdb/XDBResource.xsd http://xmlns.oracle.com/xdb/XDBResource.xsd&quot;> <Author>John Doe</Author> <DisplayName>example</DisplayName> <Comment>Has this got updated or not ? </Comment> <Language>en</Language> <CharacterSet>ASCII</CharacterSet> <ContentType>text/plain</ContentType> </Resource>') where any_path = '/home/SCOTT/example';
  88. 88. XML Repository <ul><li>Borrado de recursos </li></ul>delete from resource_view where any_path = '/home/SCOTT/example
  89. 89. Internet Protocol Support
  90. 90. Internet Protocol Support <ul><li>El protocolo de XML DB usa parámetros de configuración que están almacenados en /xdbconfig.xml para el arranque y gestionar la configuración de las sesiones </li></ul><ul><li>Existen parámetros específicos para la configuración de FTP y para HTTP/WebDAV. </li></ul>
  91. 91. Versionado <ul><li>La capacidad de versionado de XML DB provee una forma de crear y gestionar diferentes versiones de un recurso. </li></ul><ul><li>En las Releases anteriores de Oracle 9i, cuando un recurso (tabla, columna,...) eran modificados, su contenido previo y propiedades se perdía. </li></ul><ul><li>Ahora XML DB previene la perdida por medio del almacenamiento de la versión anterior del recurso en la base de datos para mantener los contenidos y propiedades del antiguo recurso, cuando se produce una modificación. </li></ul>
  92. 92. Versionado <ul><li>Oracle XML DB tiene un paquete DBMS_XDB_VERSION para poner a un recurso bajo control de versión y poder de esa manera recuperar distintas versiones de un mismo recurso. </li></ul>
  93. 93. Versionado <ul><li>declare </li></ul><ul><li>resid DBMS_XDB_VERSION.RESID_TYPE; </li></ul><ul><li>res XMLType; </li></ul><ul><li>Begin </li></ul><ul><li>resid := DBMS_XDB_VERSION.MakeVersioned(’/home/SCOTT/versample.html’); </li></ul><ul><li>-- Obtain the resource </li></ul><ul><li>res := DBMS_XDB_VERSION.GetResoureceByResId(resid); </li></ul>
  94. 94. SQLX <ul><li>Generando XML desde la base de datos </li></ul><ul><ul><li>Funciones SQLX </li></ul></ul><ul><ul><ul><li>XMLElement() </li></ul></ul></ul><ul><ul><ul><li>XMLForest() </li></ul></ul></ul><ul><ul><ul><li>XMLConcat() </li></ul></ul></ul><ul><ul><ul><li>XMLAgg() </li></ul></ul></ul><ul><ul><li>Estas funciones pertenecen al estándar SQLX, un lenguaje SQL estándar para XML que está emergiendo en nuestros días. </li></ul></ul>
  95. 95. SQLX <ul><li>XMLElement() </li></ul><ul><ul><li>Toma un nombre para el elemento, una colección de atributos opcionales para ese elemento y cero o mas argumentos que maquillan el contenido del elemento y devuelven una instancia de tipo XMLType. </li></ul></ul>
  96. 96. SQLX <ul><li>XMLElement() </li></ul>SELECT e.employee_id, XMLELEMENT ( &quot;Emp&quot;, e.first_name ||' ' || e.last_name ) AS &quot;result&quot; FROM hr.employees e WHERE employee_id > 200; -- ID result -- -------------------- -- 1001 <Emp>John Smith</Emp> -- 1206 <Emp>Mary Martin</Emp>
  97. 97. SQLX <ul><li>XMLElement() </li></ul><ul><ul><li>XML_Attributes_clause </li></ul></ul><ul><ul><ul><li>XMLELEMENT() toma también un argumento opcional, XMLAttributes(), que especifica los atributos de ese elemento. </li></ul></ul></ul>
  98. 98. SQLX <ul><li>XMLElement() </li></ul><ul><ul><li>XML_Attributes_clause </li></ul></ul>SELECT XMLELEMENT ( &quot;Emp&quot;, XMLATTRIBUTES (e.id,e.first_name ||' ' || e.last_name AS &quot;name&quot;)) AS &quot;result&quot; FROM employees e WHERE employee_id > 200; result -------------- <Emp ID=&quot;1001&quot; name=&quot;John Smith&quot;/> <Emp ID=&quot;1206&quot; name=&quot;Mary Martin&quot;/>
  99. 99. SQLX <ul><li>XMLForest() </li></ul><ul><ul><li>Produce un bosque de elementos XML desde la lista dada de argumentos. </li></ul></ul><ul><ul><li>Los argumentos deben ser expresiones de valor con aliases opcionales. </li></ul></ul>
  100. 100. SQLX <ul><li>XMLForest() </li></ul>SELECT XMLELEMENT(&quot;Emp&quot;, XMLATTRIBUTES ( e.first_name ||' '|| e.last_name AS &quot;name&quot; ), XMLForest ( e.hire_date, e.department_id AS &quot;department&quot;)) AS &quot;result&quot; FROM hr.employees e; <Emp name=&quot;John Smith&quot;> <HIRE>2000-05-24</HIRE> <department>Accounting</department> </Emp> <Emp name=&quot;Mary Martin&quot;> <HIRE>1996-02-01</HIRE> <department>Shipping</department> </Emp>
  101. 101. SQLX <ul><li>XMLSEQUENCE() </li></ul><ul><ul><li>Devuelve una secuencia de tipo XMLType </li></ul></ul>
  102. 102. SQLX <ul><li>XMLSEQUENCE() </li></ul>SELECT SYS_XMLAGG(value(e), xmlformat('EMPLOYEES')) FROM TABLE(XMLSequence(Extract(doc, '/EMPLOYEES/EMP'))) e WHERE EXTRACTVALUE(value(e), '/EMP/SALARY') >= 50000; <EMPLOYEES> <EMP> <EMPNO>112</EMPNO> <EMPNAME>Joe</EMPNAME> <SALARY>50000</SALARY> </EMP> <EMP> <EMPNO>217</EMPNO> <EMPNAME>Jane</EMPNAME> <SALARY>60000</SALARY> </EMP> </EMPLOYEES> <EMPLOYEES> <EMP> <EMPNO>112</EMPNO> <EMPNAME>Joe</EMPNAME> <SALARY>50000</SALARY> </EMP> <EMP> <EMPNO>217</EMPNO> <EMPNAME>Jane</EMPNAME> <SALARY>60000</SALARY> </EMP> <EMP> <EMPNO>412</EMPNO> <EMPNAME>Jack</EMPNAME> <SALARY>40000</SALARY> </EMP> </EMPLOYEES>
  103. 103. SQLX <ul><li>XMLConcat() </li></ul><ul><ul><li>Concatena los argumentos pasados para crear un fragmento XML </li></ul></ul>
  104. 104. SQLX <ul><li>XMLConcat() </li></ul>SELECT XMLConcat ( XMLElement (&quot;first&quot;, e.fname), XMLElement (&quot;last&quot;, e.lname)) AS &quot;result&quot; FROM employees e ; <first>Mary</first> <last>Martin</last> <first>John</first> <last>Smith</last>
  105. 105. SQLX <ul><li>XMLAgg() </li></ul><ul><ul><li>Es una función de agregación que produce un bosque de elementos XML desde una colección de elementos XML </li></ul></ul>
  106. 106. SQLX <ul><li>XMLAgg() </li></ul>SELECT XMLELEMENT(&quot;Department&quot;, XMLAGG( XMLELEMENT(&quot;Employee&quot;, e.job_id||' '||e.last_name) ORDER BY last_name)) as &quot;Dept_list&quot; FROM employees e WHERE e.department_id = 30; Dept_list ------------------------------------------- <Department> <Employee>PU_CLERK Baida</Employee> <Employee>PU_CLERK Colmenares</Employee> <Employee>PU_CLERK Himuro</Employee> <Employee>PU_CLERK Khoo</Employee> <Employee>PU_MAN Raphaely</Employee> <Employee>PU_CLERK Tobias</Employee> </Department>
  107. 107. SQLX <ul><li>Extensiones de Oracle a SQLX </li></ul><ul><ul><li>XMLColAttVal() </li></ul></ul><ul><ul><ul><li>Genera un bosque de elementos XML que contienen los valores de los argumentos pasados en la función. </li></ul></ul></ul>
  108. 108. SQLX <ul><ul><li>XMLColAttVal() </li></ul></ul>SELECT XMLELEMENT(&quot;Emp&quot;,XMLATTRIBUTES(e.fname ||' '||e.lname AS &quot;name&quot; ), XMLCOLATTVAL ( e.hire, e.dept AS &quot;department&quot;)) AS &quot;result&quot; FROM employees e; <Emp name=&quot;John Smith&quot;> <column name=&quot;HIRE&quot;>2000-05-24</column> <column name=&quot;department&quot;>Accounting</column> </Emp> <Emp name=&quot;Mary Martin&quot;> <column name=&quot;HIRE&quot;>1996-02-01</column> <column name=&quot;department&quot;>Shipping</column> </Emp> <Emp name=&quot;Samantha Stevens&quot;> <column name=&quot;HIRE&quot;>1992-11-15</column> <column name=&quot;department&quot;>Standards</column> </Emp>
  109. 109. SQLX <ul><li>DBMS_XMLGEN </li></ul><ul><ul><li>Crea documentos XML desde cualquier consulta SQL mediante el mapeo de los resultados de la consulta a formato XML. </li></ul></ul><ul><ul><li>Obtiene el documento XML como CLOB o XMLType. </li></ul></ul><ul><ul><li>Tiene un interfaz de tipo “fetch” donde se puede especificar el número máximo de filas a obtener o el número de filas a saltar. </li></ul></ul>
  110. 110. SQLX <ul><li>DBMS_XMLGEN </li></ul>CREATE TABLE temp_clob_tab(result CLOB); DECLARE qryCtx DBMS_XMLGEN.ctxHandle; result CLOB; BEGIN qryCtx := dbms_xmlgen.newContext('SELECT * from scott.emp'); -- set the row header to be EMPLOYEE DBMS_XMLGEN.setRowTag(qryCtx, 'EMPLOYEE'); -- now get the result result := DBMS_XMLGEN.getXML(qryCtx); INSERT INTO temp_clob_tab VALUES(result); --close context DBMS_XMLGEN.closeContext(qryCtx); END; /
  111. 111. SQLX <ul><li>DBMS_XMLGEN </li></ul>SELECT * FROM temp_clob_tab; RESULT ------------------------------------ <?xml version=''1.0''?> <ROWSET> <EMPLOYEE> <EMPNO>7369</EMPNO> <ENAME>SMITH</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>17-DEC-80</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </EMPLOYEE> <EMPLOYEE> <EMPNO>7499</EMPNO> <ENAME>ALLEN</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>20-FEB-81</HIREDATE> <SAL>1600</SAL> <COMM>300</COMM> <DEPTNO>30</DEPTNO> </EMPLOYEE> ... </ROWSET>
  112. 112. SQLX <ul><li>DBMS_XMLGEN </li></ul><ul><ul><li>Paginación </li></ul></ul>CREATE TABLE temp_clob_tab ( result clob); declare qryCtx dbms_xmlgen.ctxHandle; result CLOB; begin qryCtx := dbms_xmlgen.newContext('select * from scott.emp'); -- set the maximum number of rows to be 5, dbms_xmlgen.setMaxRows(qryCtx, 5); loop result := dbms_xmlgen.getXML(qryCtx); -- if there were no rows processed, then quit..! exit when dbms_xmlgen.getNumRowsProcessed(qryCtx) = 0; insert into temp_clob_tab values(result); end loop; dbms_xmlgen.closeContext(qryCtx); end; /
  113. 113. SQLX
  114. 114. http://www.hermenegildoromero.com Hermenegildo Romero [email_address]

×