• Keine Ergebnisse gefunden

Speichern von XML in Oracle

N/A
N/A
Protected

Academic year: 2022

Aktie "Speichern von XML in Oracle"

Copied!
14
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Speichern von XML in Oracle

(2)

Ansätze zum Speichern von XML

 komplettes XML-Dokument in einer Tabellenspalte vom Typ CLOB

(“authored XML“)

 Aufteilung des XML-Dokuments in Teile und

Speicherung in mehreren Spalten in einer oder mehreren Tabellen (“generated XML“) – vgl.

Vorlesung über „XML + Datenbanken“

 Kombination beider Ansätze (hybrider Ansatz)

(3)

Authored XML

name document(CLOB)

Shopping Cart <Shopping Cart>

<Item sku = “1234567“>

<Desc>Fun with XML</Desc>

<Qty>1</Qty>

<Discount>10</Discount>

</Item>

(...)

</ShoppingCart>

(...) (...)

Speichern der XML-Dokumente in einer Tabellenspalte

XMLDOCS

(4)

Generated XML

nicht geeignet für XML-Dokumente mit komplexer Struktur

Alternative: Speicherung der XML-Elemente in mehreren Tabellen

Speichere jedes XML-Element in einer Tabellenspalte SHOPPING_CART

id description quantity discount

1234 Fun with XML 1 10

3942 XML in Space 4 7

(...)

(5)

Speichern von XML Files als CLOBs

declare

theClob CLOB; theBFile BFILE;

begin

insert into xmldocs(filename,document) values

(‘Sample.xml‘, empty_clob()) returning document into theClob;

theBFile:=BFileName(‘XMLFILES‘,‘Sample.xml‘);

dbms_lob.fileOpen (theBFile);

dbms_lob.loadFromFile (dest_lob=>theClob, src=>theBFile,

amount=>dbms_lob.getLength(theBFile));

dbms_lob.fileClose(theBFile);

commit;

BFILE mit Source File assoziiert, Logical Directory Object XMLFILES vorher in end;

Datenbank anlegen, z.B.

>CREATE DIRECTORY xmlfiles as ‘c:\work‘

(6)

Arbeit mit CLOBs (Java)

public class ReadCLOB { ...

public static void main (String args[]{

DriverManager.registerDriver(new

oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection(

“jdbc:oracle:thin:@myComp:1521:ORCL“,“xuser“,“xuser“);

PreparedStatement p = conn.prepareStatement(

“select doc from xmldocs where name = ?“);

p.setString(1,args[0]);

ResultSet rs = p.executeQuery();

CLOB theCLOB = ((OracleResultSet)rs.getCLOB(1);

// process the result, store document in a file...

} }

(7)

Überblick interMedia Services

Eigenschaften von interMediaText

Volltext-Retrieval in der Oracle-Datenbank und externen Dateien

Thesaurus-basierte Suche

Themenanalyse von (englischen) Dokumenten

Highlighting von Treffern (Hervorhebungen im Dokument)

Oracle interMedia bietet Services zum Management

großer Textdokumente und Multimedia-Daten, wie Bilder,

Audio und Video

(8)

Architektur

Datastore Filter Sectioner Lexer Indexing

Engine Wordlist

Stoplist

O/S File System Internet

Tokens Marked Text

-up Text Documents

Oracle Text Index

Markup

(9)

Anwendungsentwicklung mit interMedia Text

2 Benutzer-Rollen:

CTXSYS: Eigentümer der interMedia Schema-Objekte

CTXAPP: Zugriff auf die Funktionen

Retrieval- und Speicherungsfunktionen:

Konvertieren von Texten mit Filtern

Sprachspezifisches Indizieren (“Lexer“)

Stammwortbasierte (stemming) und unscharfe Anfragen (fuzzy logic) mittels Wordlist

Speicherung von Index-Tabellen

Anlegen von Stop-Word-Listen

Definition von Search Sections durch Section Groups

Setzen von Preferences

(10)

SQL-Erweiterungen für Text-Retrieval

contains Operator in der where -Klausel einer Anfrage: Suche nach Wort-Übereinstimmungen in einem Dokument

score - Operator: berechnet Relevanz eines Treffers (in einem Bereich 1..100)

within -Klausel: beschränkt die Anfrage auf Abschnitte (Sections) eines Dokuments

wichtig bei XML Sections

übliche logische SQL-Operatoren: and , or , not

(11)

Indizieren XML mit interMedia Text

Voraussetzung für tag-basierte Queries: Index auf den Anfragespalten

in SQL: CREATE INDEX

erweitern um Klausel INDEXTYPE IS ctxsys.context

erlaubt contains in where -Klausel

Sectioner: Sammlung von XML-Tags, die indiziert werden sollen

repräsentiert durch section group im CREATE INDEX - Befehl / PARAMETERS Klausel

erlauben inhaltsbasiertes Retrieval, beschränkt auf spezifische XML-Tags

vordefinierte (für jedes Tag) vs. benutzerdefinierte

(12)

create table ins_claim

(id number (7) primary key, when date,

doc clob);

Speicherung von XML-Dokumenten einer Versicherungsgesellschaft

Spalte doc ist indiziert mit auto_section_group: create index doc_ix on ins_claim(doc) indextype is ctxsys.context

parameters (‘section group ctxsys.auto_section_group‘);

(13)

Beispiel: Arbeit mit interMedia Text (2)

The insured‘s <VEHICLE>car</VEHICLE>broke through the guard rail and plummeted into a ravine. The cause was determined to be <CAUSE>faulty braked</CAUSE> Amazingly there were no

casualties.

Beispiel-Dokument in der Spalte doc :

XML Section <cause> kann abgefragt werden:

select id, when from ins_claim

where contains (doc,‘brake within cause‘) > 0;

ID WHEN DOC

--- --- ---

1 12-OCT-00 The insured‘s <VEHICLE>car...

(14)

ctx_ddl.create_section_group(‘my_section‘, ‘XML_SECTION_GROUP‘);

ctx_ddl.add_zone_section(‘my_section‘,‘cause‘,‘Cause‘);

...

ctx_ddl.add_attr_section(‘my_section‘,‘make‘,‘Make@Vehicle‘);

...

create index my_doc_ix on ins_claim(doc) indextype is ctxsys.context

parameters(‘section group my_section‘);

Alternative zu vordefiniertem Auto-Sectioner:

Definition eines eigenen Sectioners und Verwendung im Index

Mögliche Abfrage ist Suche nach Attributwerten:

... where contains (doc, ‘Audi within Make@Vehicle‘) Findet: <Vehicle Make=“Audi“>

section name tag name

Referenzen

ÄHNLICHE DOKUMENTE

ƒ Relationales Modell erlaubt in Tabellen nur primitive Daten, geschachtelte Tabellen sind nicht erlaubt. ƒ XML erlaubt aber solche

If a very large number of indexes is defined, as in the application logging scenario described earlier, it is critical for performance to efficiently identify the subset of indexes

(Recording the containment information is crucial for calculating the similarity at the category level.) The query is formulated on the basis of high-level categories, and although

Erzeugen Sie weiterhin mittels Texteditor für jede Abteilung ein gültiges XML-Dokument EmpDept&lt;xx&gt;.xml (xx = 10, 20...), das dem Schema EmpDept.xsd entspricht.. Diese

Erzeugen Sie eine Abteilungsstatistik, indem Sie die benötigten Informationen aus dem XML-Dokument in der Tabelle companytab (bzw. Pro Abteilung sollen dabei

So ergab eine Umfrage unter amerika- nischen Leistungssportlern vor rund vier Jahren, dass nur 2 bis 7 Prozent den Deal «Medaille gegen Leben» eingehen würden, wobei

Distinguished from Pamphlet (which see) in having been issued originally in a larger publication. The handling of data in a sequential fashion. A publication issued in

We have collected a number or application programs since the last issue and we will make the programs reported in the User Group Library available through