 |
 |
 |
 |
 |
 |
|
 |
Comelio GmbH Rellinghauser Straße 10 D-45128 Essen Deutschland Fon: 0201-437517-0 Fax: 0201-437517-10 info@comelio.com
Comelio GmbH Goethestraße 34 D-13086 Berlin Deutschland info@comelio.com
Comelio GmbH (Ecos) Glockengießerwall 17 D-20095 Hamburg Deutschland info@comelio.com
Comelio GmbH (Ecos) Mainzer Landstraße 27-31 D-60329 Frankfurt Deutschland info@comelio.com
Comelio GmbH (Ecos) Stiglmaierplatz/Dachauer Str. 37 D-80335 München Deutschland info@comelio.com
Comelio GmbH (Ecos) Liebknechtstr. 33 D-70565 Stuttgart Deutschland info@comelio.com
Comelio GmbH Nevinghoff 16 D-48147 Münster Deutschland
Comelio GmbH Friedrich - List - Platz 1 D-04103 Leipzig Deutschland
Comelio GmbH St. Johanner Strasse 41-43 D-66111 Saarbrücken Deutschland
Comelio GmbH Kaiser-Wilhem-Ring 27–29 D-50672 Köln Deutschland
Comelio GmbH Münsterstraße 248 D-40470 Düsseldorf Deutschland
Comelio GmbH Fürther Strasse D-90429 Nürnberg Deutschland
Comelio GmbH
Bremen Deutschland
 |
Comelio-Blog > Oracle > XDB: PL/SQL XML DB mit PL/SQL
Auch die seit der Version 9i in Oracle verfügbare XML-Datenbank Oracle XDB kann mit Hilfe der prozeduralen Programmirsprache PL/SQL über eine umfangreiche API im Paket DBMS_XDB verwaltet und programmiert werden. Dieser Artikel beschreibt die verschiedenen Pakte und ihre Unterprogramme, um die verschiedenen Möglichkeiten für eine Softwareentwicklung mit Hilfe von PL/SQL auszuleuchten.
|
 | Kontakt
|
Oracle XDB: Verwaltung mit dem Paket DBMS_XDB
Die PL/SQL-API im Paket DBMS_XDB für die Verwaltung der XML-Datenbank beinhaltet folgende Aktivitätsbereiche:
- Oracle XML DB Ressourcenverwaltung (Anlegen von Verzeichnisstrukturen und Speicherung bzw. Bearbeitung von XML-Ressourcen)
- Oracle XML DB ACL-basierte Sicherheit
- Oracle XML DB Konfiguration
- Oracle XML DB hierarchischer Index-Aufbau
Folgende Unterprogramme sind im Paket DMBS_XDB enthalten. Sie werden alle im Rahmen der gerade erwähnten Tätigkeitsbereiche genauer vorgestellt. Hier folgt nur eine Übersicht über die vorhandenen Möglichkeiten.
- getAclDocument(): Lädt ein ACL-Dokument mit Zugriffsrechten für Ressourcen im Repository.
getPrivileges(): Liefert alle Rechte (Privilegien), die ein Benutzer an einer gegebenen Ressource besitzt.
- changePrivileges(): Verändert die vorhandenen Zugriffsrechte an einer Ressource bzw. ergänzt die vorhandenen Rechte um die neuen.
- checkPrivileges(): Überprüft die Benutzerrechte an einer Ressource anhand einer konkreten Ressource und eines gegebenen Benutzers.
- setacl(): Definiert die Zugriffsrechte eines Benutzers auf eine Ressource mit Hilfe der übergebenen Rechte.
- AclCheckPrivileges(): Überprüft die Zugriffsrechte, die dem aktuellen Benutzer für eine gegebene Ressource zuzuschreiben sind, wobei der Benutzer der Ressource übergeben wird.
- LockResource(): Liefert eine WebDAV-Sperre auf die Ressource, wobei der Pfad zu ihr übergeben wird.
- GetLockToken(): Liefert das Token einer WebDAV-Sperre für den angegebenen Benutzer und den Ressourcenpfad.
- UnlockResource(): Entsperrt die Ressource.
- CreateResource(): Erstellt eine neue Ressource.
- CreateFolder(): Erstellt einen neuen Ordner (Ressource) am angegebenen Hierarchiepunkt.
- DeleteResource(): Löscht die angegebene Ressource (Ordner oder Datei) aus der Hierarchie.
- Link(): Erstellt eine Verknüpfung zu einer existierenden Ressource (Ordner oder Datei).
- CFG_Refresh(): Aktualisiert die Sitzungsinformationen zu dieser Ressource.
- CFG_Get(): Liefert die Konfigurationsinformationen der Sitzung.
- CFG_Update(): Aktualisiert die Konfigurationsinformationen.
Ressourcen-Management
Eine der ersten Aufgaben ist natürlich das Anlegen von Verzeichnisstrukturen und die Einbindung von XML-Dokumenten. Zum Ressourcen-Management gehört dann zusätzlich auch das Löschen oder das Anlegen von Verknüpfung zu Ressourcen. Sofern noch gar keine Ressourcen existieren, müssen zunächst geeignete Ordner mit createFolder() oder createRessource() angelegt werden. Die letzte Funktion eignet sich dann auch für das Anlegen von XML-Strukturen, die entweder als Zeichenkette oder als Variable in XMLType-Form übergeben werden. Im später folgenden Beispiel ist es nur ein kurzes XML-Dokument, das als einfache Zeichenkette vorgegeben wird. Das Anlegen von Ordner-Strukturen ist erfreulich einfach, denn man benötigt nur passende Pfadangaben als Zeichenketten.
Insgesamt eignen sich folgende Funktionen für die Arbeit:
- Link Parameter: (srcpath VARCHAR2, linkfolder VARCHAR2, linkname VARCHAR2), Rückgabewert: nicht verfügbar.
- LockResource Parameter: (path IN VARCHAR2, depthzero IN BOOLEAN, shared IN boolean), Rückgabewert: TRUE, wenn erfolgreich.
- GetLockToken Parameter: (path IN VARCHAR2, locktoken OUT VARCHAR2), Rückgabewert: nicht verfügbar.
- UnlockResource Parameter: (path IN VARCHAR2, deltoken IN VARCHAR2), Rückgabewert: TRUE, wenn erfolgreich.
- CreateResource
- FUNCTION CreateResource (path IN VARCHAR2, data IN VARCHAR2), RETURN BOOLEAN;: Erstellt eine neue Ressource (XML-Dokument) mit dem Inhalt der übergebenen Zeichenkette.
- FUNCTION CreateResource (path IN VARCHAR2, data IN SYS.XMLTYPE), RETURN BOOLEAN;: Erstellt eine neue Ressource (XML-Dokument) mit dem Inhalt des übergebenen XMLType.
- FUNCTION CreateResource (path IN VARCHAR2, datarow IN REF SYS.XMLTYPE) RETURN BOOLEAN;: Erstellt eine Ressource, deren Inhalt ein XMLType ist, der nicht in einer anderen Ressource vorhanden ist.
- FUNCTION CreateResource (path IN VARCHAR2, data IN CLOB) RETURN BOOLEAN;: Erstellt eine Ressource mit dem übergebenen CLOB als Inhalt.
- FUNCTION CreateResource (path IN VARCHAR2, data IN BFILE) RETURN BOOLEAN;: Erstellt eine Ressource mit dem übergebenen BFILE als Inhalt.
- CreateFolder Parameter: (path IN VARCHAR2), Rückgabewert: TRUE, wenn erfolgreich.
- DeleteResource Parameter: (path IN VARCHAR2), Rückgabewert: nicht verfügbar.
Die XML Schema-Datei XDBResource.xsd hat den in den Abbildungen gezeigten schematischen Aufbau, um Ressourcen zu beschreiben.
Im nächsten Beispiel wird innerhalb des public-Ordners ein neuer Ordner für Dozenten-XML-Dateien angelegt, der dann mit zwei unterschiedlichen Dateien gefüllt wird. Den erfolgreichen Abschluss eines Vorgangs testen wir entweder direkt im System im Oracle Enterprise Manager (in diesem Fall dürfen wir natürlich die Ressourcen nicht automatisch wieder löschen) oder über den Wahrheitswert, der jeweils zurückgeliefert wird.
DECLARE
ordner boolean; -- Anlegen eines Ordners
ressource boolean; -- Anlegen einer Ressource
-- Funktion für den Test einer gültigen Aktion
FUNCTION Testen (Test IN BOOLEAN)
RETURN VARCHAR2
AS
BEGIN
IF Test THEN RETURN 'Erfolgreich';
ELSE RETURN 'Nicht erfolgreich';
END IF;
END Testen;
BEGIN
-- Anlegen eines Ordners
ordner := dbms_xdb.createfolder('/public/dozenten');
DBMS_OUTPUT.PUT_LINE(Testen(ordner));
-- Anlegen einer Ressource 1
ressource :=dbms_xdb.createresource
('/public/dozenten/doz_ebenhof.xml',
'Ebenhof');
DBMS_OUTPUT.PUT_LINE(Testen(ressource));
-- Anlegen einer Ressource 2
ressource := dbms_xdb.createresource
('/public/dozenten/doz_gelddreh.xml',
'Gelddreh');
DBMS_OUTPUT.PUT_LINE(Testen(ressource));
-- Anlegen eines Links
dbms_xdb.link
('/public/dozenten/doz_ebenhof.xml','/public/dozenten',
'person_ebenhof.xml');
dbms_xdb.link
('/public/dozenten/doz_gelddreh.xml','/public/dozenten',
'person_gelddreh.xml');
-- Löschen von Ressourcen, Links und Ordnern
dbms_xdb.deleteresource
('/public/dozenten/doz_ebenhof.xml');
dbms_xdb.deleteresource
('/public/dozenten/person_ebenhof.xml');
dbms_xdb.deleteresource
('/public/dozenten/doz_gelddreh.xml');
dbms_xdb.deleteresource
('/public/dozenten/person_gelddreh.xml');
dbms_xdb.deleteresource('/public/dozenten');
END;
Sicherheitsverwaltung
Die einzelnen Ressourcen (Ordner und Dateien) besitzen wie andere Dateien in einem Dateisystem auch Zugriffsrechte. Sie werden über die hier vorgestellten Funktionen und Prozeduren eingerichtet. Dabei besteht die Rechteangabe auch wieder aus einer XML-Datei, die ein gültiges Instanzdokument darstellt.
Insgesamt handelt es sich um folgende Funktionen und Prozeduren, die für die Arbeit einsetzbar sind:
- getAclDocument Parameter: (abspath VARCHAR2), Rückgabewert: XMLType des ACL Dokuments.
- ACLCheckPrivileges Parameter: (acl_path IN VARCHAR2, owner IN VARCHAR2, privs IN XMLType), Rückgabewert: Positive Ganzzahl, wenn Rechte geprüft und vorhanden sind.
- checkPrivileges Parameter: (res_path IN VARCHAR2, privs IN XMLType) Rückgabewert: Positive Ganzzahl, wenn Rechte geprüft und vorhanden sind.
<privilege xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dav="DAV:" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd
DAV: http://xmlns.oracle.com/xdb/dav.xsd">
<read-contents/>
<read-properties/>
<resolve/>
<dav:waste/>
</privilege>
- getprivileges Parameter: (res_path IN VARCHAR2), Rückgabewert: XMLType-Instanz des privilege-Elements.
<privilege xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd">
<read-contents/>
<read-properties/>
<resolve/>
<read-acl/>
</privilege>
- changePrivileges Parameter: (res_path IN VARCHAR2, ace IN XMLType), Rückgabewert: Positive Ganzzahl, wenn ACL erfolgreich verändert wurde.
<ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dav="DAV:" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd
DAV:http://xmlns.oracle.com/xdb/dav.xsd">
<grant>true</grant>
<principal>SCOTT</principal>
<privilege>
<read-contents/>
<read-properties/>
<resolve/>
<dav:waste/>
</privilege>
</ace>
- setAcl Parameter: (res_path IN VARCHAR2, acl_path IN VARCHAR2). Setzt die ACL der Ressource auf res_path auf die ACL, die im acl_path gefunden wird. Rückgabewert: nicht verfügbar.
Die XML Schema-Datei acl.xsd hat den in der Abbildung gezeigten schematischen Aufbau, um Zugriffsrechte und damit auch gültige Instanzdokumente zu beschreiben.
Das folgende Beispiel legt zunächst einen Ordner und dann eine Datei in diesem Ordner an, für die zunächst Standard-Rechte für Dateibesitzer gesetzt, dann gelesen und schließlich geändert werden.
DECLARE
-- Ordner
ordner boolean;
BEGIN
-- Ordner anlegen
ordner := dbms_xdb.createfolder('/public/dozenten');
COMMIT;
END;
/
DECLARE
ressource boolean;
BEGIN
-- Lege Ressource an
ressource := dbms_xdb.createresource('/public/dozenten/doz_Ebenhof.xml','<doz_name>Ebenhof</doz_name>');
COMMIT;
END;
/
-- Setze Standard-Rechte
call dbms_xdb.setacl('/public/dozenten/doz_Ebenhof.xml','/sys/acls/all_owner_acl.xml');
COMMIT;
-- Lies Rechte
SELECT dbms_xdb.getacldocument('/public/dozenten/doz_Ebenhof.xml')
FROM dual;
DECLARE
r pls_integer; -- Rückgabewert
ace xmltype; -- ace-Rechte-XML-Struktur
ace_data varchar2(2000); -- ace-Rechte-Text
BEGIN
-- Erstelle ace-Text-Struktur
ace_data :=
'<ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd
DAV:http://xmlns.oracle.com/xdb/dav.xsd">
<principal>SCOTT</principal>
<grant>true</grant>
<privilege>
<all/>
</privilege>
</ace>';
-- Erstelle XMLType von Rechte-Text
ace := xmltype.createxml(ace_data);
-- Weise Rechte über XML zu
r := dbms_xdb.changeprivileges('/public/dozenten/doz_Ebenhof.xml', ace);
-- Gebe Rückgabewert aus
dbms_output.put_line('retval = ' || r);
COMMIT;
END;
/
-- Lies ace-Dokument
SELECT dbms_xdb.getacldocument('/public/dozenten/doz_Ebenhof.xml')
FROM dual;
-- Lies Privilegien
SELECT dbms_xdb.getprivileges('/public/dozenten/doz_Ebenhof.xml')
FROM dual;
-- Lösche Ressourcen
call dbms_xdb.deleteresource('/public/dozenten/doz_Ebenhof.xml');
call dbms_xdb.deleteresource('/public/dozenten');
COMMIT;
Man erhält unterschiedliche XML-Dokumente zurück, die die vorhandenen bzw. gesetzten Rechte an einer bestimmten Ressource beschreiben.
DBMS_XDB.GETACLDOCUMENT('/PUBLIC/DOZENTEN/DOZ_EBENHOF.XML')
<acl description="Private:All privileges to OWNER only and not accessible to others" xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd http://xmlns.oracle.com/xdb/acl.xsd">
<ace>
<principal>dav:owner</principal>
<grant>true</grant>
<privilege>
<all/>
</privilege>
</ace>
</acl>
1 Zeile wurde ausgewählt.
retval = 1001
DBMS_XDB.GETACLDOCUMENT('/PUBLIC/DOZENTEN/DOZ_EBENHOF.XML')
<acl description="Private:All privileges to OWNER only and not accessible to others" xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd http://xmlns.oracle.com/xdb/acl.xsd">
<ace>
<principal>dav:owner</principal>
<grant>true</grant>
<privilege>
<all/>
</privilege>
</ace>
<ace>
<principal>SCOTT</principal>
<grant>true</grant>
<privilege>
<all/>
</privilege>
</ace>
</acl>
1 Zeile wurde ausgewählt.
DBMS_XDB.GETPRIVILEGES('/PUBLIC/DOZENTEN/DOZ_EBENHOF.XML')
<privilege xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd http://xmlns.oracle.com/xdb/acl.xsd DAV: http://xmlns.oracle.com/xdb/dav.xsd" xmlns:xdbacl="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:">
<read-properties/>
<read-contents/>
<update/>
<link/>
<unlink/>
<read-acl/>
<write-acl-ref/>
<update-acl/>
<resolve/>
<link-to/>
<unlink-from/>
<dav:lock/>
<dav:unlock/>
</privilege>
1 Zeile wurde ausgewählt.
Konfiguration
Für die Konfiguration von XDB existieren folgende Funktionen und Prozeduren.
- CFG_get Parameter: keine, Rückgabewert: XMLType für Sitzungskonfigurationsmanagement.
- CFG_refresh Parameter: keine, Rückgabewert: nicht verfügbar.
- CFG_update Parameter: (xdbconfig IN XMLType), Rückgabewert: nicht verfügbar.
Für ihren Einsatz ermittelt man zunächst die vorhandenen Konfigurationseinstellungen, die man ändern und schließlich aktualisieren kann. Dies erfolgt über gültige XMLType-Intanzen der vorhandenen Schema-Datei.
Die XML Schema-Datei xdbconfig.xsd enthält die in den Abbildungen gezeigten Datenstrukturen, die für Konfigurationsdateien gelten müssen, damit sie als gültige Angaben erkannt werden.
Comelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin BremenComelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin BremenComelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin BremenComelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin BremenComelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin BremenComelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin BremenComelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin BremenComelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin BremenComelio GmbH Oracle XDB: XML DB - XML mit PL/SQL verarbeiten Anleitung Tutorial SQLJ Programmierung Java Manual Oracle PL/SQL XML Datenbank-Entwicklung Koblenz Mannheim Leipzig Zwickau Würzuburg Koblenz Bochum Frankfurt Erlangen Ingolstadt Ludwigshafen Kassel Stuttgart Aachen Lübeck Göttingen Bonn Wolfsburg Andernach München Heidelberg Ol Hannover Hamburg Magdeburg Rügen Freiburg Köln Kiel Berlin Bremen
|
 |