<Insert Picture Here> XML DB Vorlesung Ulrike Schwinn Teil 2
Agenda Konfiguration XML DB Repository Objektrelationale Speicherung Operationen
Oracle XML DB Oracle XML DB XQuery XPath SQL Transformationen XML- Sichten SQL*Net HTTP / WebDAV FTP Recherchen Relationale Sichten
XML DB Installation und Konfiguration enthalten in allen Oracle Software Editionen benutzt OR-Features der Datenbank nutzt DB-Schema XDB verwendet Shared Server Architektur der Datenbank für Protokolle wie HTTP, FTP und WEBDAV (siehe Eintrag in der Initialisierungsdatei) dispatchers='(protocol=tcp)(service=<sid>xdb)'
Konfiguration Überprüfen mit dba_registry SQL> SELECT comp_name, status FROM dba_registry WHERE comp_name LIKE '%XML%'; COMP_NAME STATUS -------------------- ----------------------- Oracle XML Database VALID Nach-Installation $ORACLE_HOME/rdbms/admin/catqm.sql HTTP- und FTP-Funktionen aktivieren $ORACLE_HOME/rdbms/admin/catxdbdbca.sql SQL> execute dbms_xdb.sethttpport(<nummer>); SQL> execute dbms_xdb.setftpport(<nummer>);
XML DB Konfiguration $ lsnrctl status LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 27-APR-2011 16:36:36 Copyright (c) 1991, 2010, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sccloud003.de.oracle.com)(PORT=1522))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.2.0 - Production Start Date 07-APR-2011 14:29:40 Uptime 20 days 2 hr. 6 min. 56 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /opt/oracle/product/11.2.0/11.2.0.2/network/admin/listener.ora Listener Log File /opt/oracle/diag/tnslsnr/sccloud003/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sccloud003.de.oracle.com)(PORT=1522))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sccloud003.de.oracle.com)(PORT=8080))(Presentation =HTTP)(Session=RAW)) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sccloud003.de.oracle.com)(PORT=1111))(Presentation =FTP)(Session=RAW)) Services Summary... Service "orcl" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service...
Änderung der Konfiguration
Protokoll: HTTP
Protokoll: WEBDAV Erweiterung des HTTP Protokolls Web Folder über Windows Explorer oder andere Web Folder Software
Protokoll:FTP FTP Zugriff muß eingeschaltet werden (siehe vorher) Session-orientiert, Auto Commit Kommandos: pwd,quit,del,rmd,user,type,ls
Agenda Konfiguration XMLDB Repository Objektrelationale Speicherung Operationen
Arbeiten mit dem XMLDB Repository File/Folder-Sicht auf eine Repository-Tabelle PL/SQL-Zugriff via DBMS_XDB Basis für FTP und WebDAV Zugriffskontrolle mit ACL Versionierung Links Metadatenverwaltung
Der SQL Zugriff Definition einer Ressource XML-Komponente wie XML-Folder, Dateien Wird identifiziert bei Namen oder URL Ist mit ACL verbunden, um Zugriff zu definieren Zugriff über SQL, DBMS_XDB Paket oder Java RESOURCE_VIEW Enthält Eigenschaften der Ressource (Name, ACL...) Eine Zeile pro Ressource PATH_VIEW Zeigt alle Pfadnamen und ihre Eigenschaften an. Eine Zeile für jeden eindeutigen Pfad, der auf eine Ressource verweist.
Operationen im Repository Abfragen und Änderungen Unterstützung durch XML Funktionen wie UNDER_PATH(column,[level],path) und EQUALS_PATH (column,[level], path) SELECT any_path FROM resource_view WHERE under_path(res, 2, '/public') = 1; ANY_PATH ---------------------------------------------------------------- /public/uschwinn /public/uschwinn/xml /public/uschwinn/xsd Ressource Management mitdbms_xdb Paket wie createresource(), createfolder(), deleteresource(), setacl()...
Folder anlegen Per FTP oder WebDAV Mit SQL-Skript SELECT path FROM path_view WHERE under_path(res,2,'/public')=1; execute dbms_xdb.deleteresource(abspath=>'/public/f2'); COMMIT; declare b boolean; begin b := dbms_xdb.createfolder(abspath=>'/public/f2'); end; / COMMIT;
Folder anlegen
Überprüfen Zugriffsrechte SELECT dbms_xdb.getacldocument(abspath=>'/public/f2').getclobval() ACL FROM dual; ACL --------------------------------------------------------------- <acl description="public:all privileges to PUBLIC" xmlns="ht tp://xmlns.oracle.com/xdb/acl.xsd"...> <ace> <principal>public</principal> <grant>true</grant> <privilege> <all/>... ACLs setzen execute dbms_xdb.setacl(res_path=>'/public/f2', acl_path=>'/sys/acls/all_owner_acl.xml');
Agenda Konfiguration XML DB Repository Objektrelationaler Zugriff Operationen
Speicherung mit XMLTYPE Verwendbar wie jeder andere Datentyp in der Spalten- oder Tabellendefinition in PL/SQL Logik Unterstützt unterschiedliche Speicherformen
Objektrelationale Speicherung Meist datenzentrische Dokumente XML Schema- Registrierung notwendig Nachbildung der XML-Strukturen als Oracle Objekttypen CREATE OR REPLACE TYPE CREATE OR REPLACE TYPE "SCOTT"."PURCHASEORDER_T" AS OBJECT(..."XDB"."XDB$RAW_LIST_T"," Reference" VARCHAR2(26 CHAR),"Actions" "ACTION_T","Reject" "REJECT_T","LineItems" "LINEITEMS_T") FINAL INSTANTIABLE CREATE TABLE "SCOTT"."PURCHASEORDER" OF SYS.XMLTYPE XMLSCHEMA http://www,oracle.com/xdb/po.xsd...
User-Defined Types(UDT)/Objekttypen UDTs haben einen Namen (Schemaobjekte) UDTs haben einen oder mehrere Attribute: Skalar (char, number, etc) UDT VARRAY oder nested table Reference (REF) zu einer UDT Large Object (BLOB, CLOB, etc) UDT kann eine oder mehrere Methoden haben
Objekttypen und -tabellen CREATE OR REPLACE TYPE address_t AS OBJECT (street varchar2(30), city varchar2(30), state varchar2(2), zip varchar2(10)) / CREATE OR REPLACE TYPE person_t AS OBJECT (last_name varchar2(30), birthdate date, address address_t) NOT FINAL / CREATE TABLE person OF person_t / INSERT INTO person VALUES (person_t(...,...));
Exkurs: XML Schema W3C XML Schema Recommendation definiert standardisierte Sprache zur Beschreibung von Struktur, Inhalt und Semantik (teilweise) von XML Dokumenten Quelle: http://www.w3.org/tr/xmlschema-0/ Werkzeuge: Texteditor wie emacs oder vi XML "Schema-aware" Editor wie JDeveloper Explizites XML "schema-authoring" Werkzeug wie XMLSpy von Altova Corporation
Strukturen im XML Schema: Beispiel
Schema-Registrierung: Vorgehen 1. Schema zur Verfügung stellen (Dokument Encoding wird berücksichtigt ausser bei VARCHAR2 oder CLOB, AL32UTF8 ist bevorzugt) 2. Schema registrieren mit Paket DBMS_XMLSCHEMA mit REGISTERSCHEMA oder REGISTERURI 3. Verwendung in Tabellen
Schema-Registrierung: Beispiele begin dbms_xmlschema.registerschema ( SCHEMAURL =>'http://xmluser.de.oracle.com/xsd/deptemp.xsd', SCHEMADOC => doc, -- local => TRUE, -- gentypes => TRUE, -- genbean => FALSE, -- gentables => TRUE, -- force => FALSE, - options => 0, fuer binary xml notwendig -- OWNER => NULL... ); end; begin dbms_xmlschema.registeruri (SCHEMAURL =>'http://xmluser.de.oracle.com/xsd/deptemp.xsd', SCHEMADOCURI =>'/public/xsd/ulrike/deptemp.xsd',...); end;
Registrierung über Enterprise Manager
Lokales und Globales XML-Schema Lokale XML-Schemas sind nur für den Eigentümer sichtbar Repository-Eintrag unter /sys/schemas Globale XML-Schemas sind für alle Benutzer sichtbar Spezielles Zugriffsrecht (XDBADMIN) erforderlich Repository-Eintrag unter /sys/schemas/public
"annotated" XML Schema XML Schema mit "Zusatzinformationen" Herstellerspezifische Tags und Attribute zur Steuerung der Persistenz Namespace-Konzept Bei der Schema-Prüfung ignoriert der Parser gemäss W3C " alle Namespaces, die er nicht kennt" Datenbankunabhängige Parser beachten nur das allgemeine XML Schema und die eigenen "Annotations"
annotated XML Schema http://xmlns.microsoft.com/xml http://xmlns.oracle.com/xdb http://www.w3.org/2001/xmlschema Ein XML Schema kann Annotations für verschiedene Datenbanken enthalten, da die jeweiligen Datenbanken fremde Annotations gemäß W3C ignorieren sollen
XML DB Schema-Attribute Attribute SQLName SQLType MaintainOrder MaintainDOM SQLInline ColumnProps TableProps DefaultTable... Beschreibung Name des SQL-Objekts Name des SQL-Typs Nested Table oder VARRAY Speichern DOM Info Speicherung in Objekt? Storage-Klausel für Spalten Storage-Klausel für Tabelle Tabellen-Name bei Auslagerung
Schema-Registrierung Während der Registrierung: Parsen und Validieren des XML Schemas Generieren der Einträge für DD Erzeugt ein Set von Objektdefinitionen basierend auf den complextypes im XML Schema Erzeugt XMLType Tabellen für jedes globale Element
Schema-Registrierung Nach der Registrierung: XML-Dokumente (Instanzen), die dem XML Schema genügen können eingefügt werden. (Achtung ein Verweis auf die Schema-URL (siehe Registrierung) darf nicht fehlen!) XMLTYPE-Tabellen und -Spalten können angelegt werden.
Beispiel-Schema
Mapping: Pseudocode Wird beim Registrieren automatisch abgebildet auf CREATE OR REPLACE TYPE "XMLUSER"."ADDR_T" AS OBJECT ("SYS_XDBPD$" "XDB"."XDB$RAW_LIST_T", "STREET" VARCHAR2(4000),"CITY" VARCHAR2(4000)) NOT FINAL INSTANTIABLE CREATE OR REPLACE TYPE "XMLUSER"."EMP_T" AS OBJECT ("SYS_XDBPD$" "XDB"."XDB$RAW_LIST_T", "NAME" VARCHAR2(4000),"AGE" NUMBER, "ADDRESS" "XMLUSER"."ADDR_T") NOT FINAL INSTANTIABLECREATE OR REPLACE TYPE "XMLUSER"."EMPLOYEES82_COLL" AS VARRAY(2147483647) OF "XML CREATE OR REPLACE TYPE "XMLUSER"."DEPT_T" AS OBJECT ("SYS_XDBPD$" "XDB"."XDB$RAW_LIST_T", "DEPTNO" NUMBER,"DEPTNAME" VARCHAR2(4000), "EMPLOYEES" "XMLUSER"."EMPLOYEES82_COLL") NOT FINAL INSTANTIABLE
Mapping: Pseudocode Automatisches Anlegen von Tabellen... CREATE TABLE "XMLUSER"."EMPLOYEE_TABLE" OF SYS.XMLTYPE XMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ID 'A544AD86456A705AE0340003BA08CF66' ELEMENT "Employee" ID 2252 TYPE "XMLUSER"."EMP_T" CREATE TABLE "XMLUSER"."DEPARTMENT_TABLE" OF SYS.XMLTYPE XMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ID 'A544AD86456A705AE0340003BA08CF66' ELEMENT "Departments" ID 2253 TYPE "XMLUSER"."DEPT_T"
Speicherung Ablage als XML Schemabasierenden Tabelle CREATE TABLE employee_table_or OF XMLTYPE XMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ELEMENT "emptable"; Ablage als XML Schemabasierende Spalte CREATE TABLE department_table_rel_or CREATE TABLE department_table_rel_or (deptno NUMBER, department_doc XMLTYPE) XMLTYPE department_doc STORE AS OBJECT RELATIONAL XMLSCHEMA "http://xmluser.de.oracle.com/xsd/deptemp.xsd" ELEMENT "deptable";
Weitere Schemaoperationen Löschen des Schemas mit Optionen: DELETE_RESTRICT DELETE_INVALIDATE DELETE_CASCADE DELETE_CASCADE_FORCE begin dbms_xmlschema.deleteschema( schemaurl => 'http://xmluser.de.oracle.com/xsd/deptemp.xsd', delete_option => dbms_xmlschema.delete_cascade); end; Löscht nicht die Schema-Ressource! Auch Schema-Evolution möglich
Weitere Schemaoperationen Generieren eines Schemas SELECT dbms_xmlschema.generateschema(schemaname =>'USCHWINN', typename =>'PERSON_T') FROM dual; <xsd:schema targetnamespace="http://ns.oracle.com/xdb/xmluser" xmlns="http://ns.oracle.com/xdb/xmluser" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://xmlns.oracle.com/xdb http://xmlns.oracle.com/xdb/xdb" <xsd:element name="person_t" type="person_ttype" xdb:sqltype="person_t" xdb:sqlschema="ulrike"/> <xsd:complextype name="person_ttype"> <xsd:sequence> <xsd:element name="last_name" type="xsd:string" xdb:sqlname="last_name" xdb:sqltype="varchar2"/>...
Data Dictionary Views XML Informationen ALL/DBA/USER_XML_SCHEMAS...USER_XML_TABLES...USER_XML_TAB_COLS...USER_XML_VIEWS...USER_XML_VIEW_COLS Oder Enterprise Manager Objekt-Informationen ALL/DBA/USER_OBJECT_TABLES...USER_TYPE_ATTRS
Agenda Konfiguration XMLDB Repository Objektrelationale Speicherung Operationen
Laden Wichtig: XML Schema muss in XML-Dokument referenziert sein! Laden mit: Protokollen wie FTP und WebDAV SQL und SQL*Loader Idee bei grossen Dokumenten: Verkleinern z.b. mit Java Sax-Loader
XML Schema referenzieren <nachricht xmlns="http://www.oracle.com/aktie/nachrichten.xsd" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" typ="angestellte" xsi:schemalocation="http://www.oracle.com/aktie/nachrichten.xsd C:\nachrichten.xsd" > W3C-Standardkonforme Verknüpfung von XML Dokument und XML Schema. Gut zu erkennen ist die Lage des Schemadokumentes im Dateisystem.
XML Schema referenzieren <nachricht xmlns="http://www.oracle.com/aktie/nachrichten.xsd" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" typ="angestellte" xsi:schemalocation="http://www.oracle.com/aktie/nachrichten.xsd http://www.oracle.com/nachrichten.xsd" > Unter dieser URL wurde das XML Schema in Oracle registriert
Laden von XML Instanzen XML Schema überprüfen Oracle Annotations vorhanden Schema in der Datenbank registriert Ergebnis: objektrelationales Speicherungsmodell Objekttypen vorhanden Tabellen vorhanden Laden mit SQL, WEBDAV, FTP usw...
Schemavalidierung? "leichte Schemaprüfung" beim Einfügen Strukturprüfung Performancegründe vollständige Schemavalidierung aktivierbar Trigger Einsatz der Member Prozedur XMLTYPE.schemaValidate()
Schemavalidierung: Beispiel CREATE OR REPLACE TRIGGER <name> BEFORE INSERT OR UPDATE ON <tabname> FOR EACH ROW DECLARE... BEGIN newxml := :NEW.OBJECT_VALUE; xmltype.schemavalidate(newxml); END; /
Schema Support: Zusammenfassung Registrieren eines W3C-compliant XML Schemas Validatierung von XML Dokumenten gegen registrierte XML Schema Definitionen Registrieren von lokalen und globalen XML Schemas Generieren von XML Schemas aus Objekttypen Referenzieren von XML Schemas
Schema Support: Zusammenfassung Erzeugen von XMLType Tabellen, Views und Spalten basierend auf registrierten XML Schemas Durchführung von DML und Abfragen auf XML schema-based XMLType Tabellen Automatisches Einfügen in Default Tabellen bei Nutzung von FTP, HTTP oder WEBDAV oder anderen Mitteln