Die PL/SQL-API im Paket DBMS_XDB für die Verwaltung der XML-Datenbank beinhaltet folgende Aktivitätsbereiche:
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.
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:
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',
'<doz_name>Ebenhof</doz_name>');
DBMS_OUTPUT.PUT_LINE(Testen(ressource));
-- Anlegen einer Ressource 2
ressource := dbms_xdb.createresource
('/public/dozenten/doz_gelddreh.xml',
'<doz_name>Gelddreh</doz_name>');
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;
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:
<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><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><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>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.
Für die Konfiguration von XDB existieren folgende Funktionen und Prozeduren.
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.com


