Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Speicherung von XML- Dokumenten als Large Objects.

Ähnliche Präsentationen


Präsentation zum Thema: "Speicherung von XML- Dokumenten als Large Objects."—  Präsentation transkript:

1 Speicherung von XML- Dokumenten als Large Objects

2 Gliederung Einleitung XML Developer Kit (XDK) XMLTYPE Einsatz von Oracle Text für XML

3 Einleitung Oracle9i besitzt verschiedene Möglichkeiten mit XML – Dokumenten umzugehen. –Abbildung von XML – Dokumenten auf ein Datenbankschema –Umwandlung von Anfrageergebnissen in XML – Dokumente –Speicherung von XML – Dokumenten in eine Tabellenspalte

4 Einleitung bei XML - Dokumenten mit statischem Inhalt wie Dokumentationen, FAQs, Büchern, Berichten usw. ist es besser das Dokument als ganzes abzuspeichern Oracle9i bietet verschiedene Lösungen an, solche XML - Dokumente zu verarbeiten: –XML Developer Kit ( XDK ) –XMLTYPE –Oracle Text

5 XML Developer Kit (XDK) Programmierschnittstellen zur Erzeugung, Verarbeitung und Darstellung von XML – Dokumenten Für die Sprachen JAVA, C, C++ sowie PL/SQL verfügbar JAVA – Schnittstelle am weitesten ausgebaut. Sie umfasst –XML Parser –XML Schema Processor –XML Klassen Generator

6 XDK XML Parser Es existieren zwei wichtige Modelle für den Parser: –Document Objekt Modell (DOM) baumbasiertes Objektmodell vom W3C spezifiziert Ersatz für proprietäre Lösungen für DHTML wahlfreier Zugriff auf das gesamte Dokument möglich –Simple Access for XML (SAX) ereignisbasiertes Modell von der XML-DEV Mailingliste spezifiziert nur serieller Zugriff auf das Dokument möglich

7 XDK XML Parser/DOM einheitliche, betriebssystem- und sprachunabhängige Lösung objektorientierte Darstellung von Dokumenten mit Hilfe der Interface Definition Language (IDL) und Beschreibungen der Funktionen definiert.

8 XDK XML Parser/DOM Dokument in XML - DarstellungDokument in DOM Darstellung Shady Grove Aeolian Over the River… Dorian

9 XDK XML Parser/DOM Ausgehend von der Schnittstellendefinition wird eine konkrete Knotenklasse implementiert. Diese Knotenklasse besitzt wiederum Zeiger die auf Kinderknoten verweisen.

10 XDK XML Parser/DOM

11 ModellSpezifikationDokument ist... XMLdatenorientiert, zeichenkettenorientiert formale Sprache & Constraints Wort einer formalen Sprache DOMobjektorientiertInterface Definition Language (IDL) & Semantik Menge von Objekten und ihre Beziehungen

12 XDK XML Parser/DOM/Beispiel Shady Grove Aeolian Over the River, Charlie Dorian

13 XDK XML Parser/DOM/Beispiel import java.io.*; import org.w3c.dom.*; import org.w3c.dom.Node; import oracle.xml.parser.v2.*; public class DOMTest { static public void main(String argv[])throws Exception { DOMParser parser = new DOMParser(); parser.parse("file:C:\\test.xml"); XMLDocument doc = parser.getDocument();

14 XDK XML Parser/DOM/Beispiel // Alle Knoten des Baumes einlesen NodeList nl = doc.getElementsByTagName("*"); Node n; Element e; NamedNodeMap nnm; for(int j=0;j<nl.getLength();j++){ e = (Element)nl.item(j); System.out.println(e.getTagName()+":"); nnm = e.getAttributes(); if(nnm != null){ for(int i=0;i<nnm.getLength();i++){ n = nnm.item(i); System.out.println("name="+n.getNodeName()+ " value="+n.getNodeValue()); }

15 XDK XML Parser/DOM/Beispiel Programmausgabe: TABLE: name=id value=1 name=rows value=2 ROWS: TR: TD: TR: TD:

16 XDK XML Parser/SAX ereignisbasiert keinerlei interne Repräsentation des gesamten XML – Dokumentes benutzerdefinierter Handler für jedes Element Dokument wird seriell verarbeitet

17 XDK XML Parser/SAX 3 Schritte: 1.Parser erzeugen 2.Handler erzeugen und beim Parser registrieren 3.Parsen: Parser liest das Dokument sequenziell und ruft je nach gelesenem Element eine callback- Methode in den Handlern auf.

18 XDK XML Parser/SAX Dokument in XML - DarstellungDokument in SAX Darstellung Shady Grove Aeolian Over the River… Dorian start document start element: TABLE start element: ROWS start element: TR start element: TD start characters: Shady Grove end element: TD start element: TD.

19 XDK XML Parser/SAX/Beispiel import org.xml.sax.*; import java.io.*; import java.net.*; import oracle.xml.parser.v2.*; public class SAXSample extends HandlerBase{ // Store the Locator Locator locator; public static void main (String args[])throws Exception { SAXSample sample = new SAXSample(); Parser parser = new SAXParser(); parser.setDocumentHandler(sample); parser.setErrorHandler(sample); parser.parse("file:C:\\test.xml"); }

20 XDK XML Parser/SAX/Beispiel public void setDocumentLocator (Locator locator) { System.out.println("SetDocumentLocator:"); this.locator = locator; } public void startDocument () { System.out.println("Start Document"); } public void endDocument () throws SAXException { System.out.println("End Document"); }

21 XDK XML Parser/SAX/Beispiel public void startElement (String name, AttributeList attrs) throws SAXException { System.out.print("StartElement:" + name); int attLen; if (attrs != null && ((attLen = attrs.getLength()) > 0)) { for (int i = 0; i < attLen; i++) { System.out.print(" " + attrs.getName(i) + "='"); System.out.print(attrs.getValue(i) + "'"); } System.out.println(""); } public void endElement (String name) { System.out.println("EndElement:" + name ); } public void characters (char ch[], int start, int length) { System.out.print("Characters: "); System.out.println(new String(ch,start,length)); }

22 XDK XML Parser/SAX/Beispiel Programmausgabe: SetDocumentLocator: Start Document StartElement:TABLE id='1' rows='2' StartElement:ROWS StartElement:TR StartElement:TD Characters: Shady Grove EndElement:TD StartElement:TD Characters: Aeolian EndElement:TD EndElement:TR StartElement:TR...

23 XDK XML Schema XML –Schema wurde eingeführt um die veralteten Document Type Definitions (DTDs) abzulösen. Vorteile gegenüber DTD: –eingebaute und benutzerdefinierte Datentypen –Im- und Export von XML – Schemas –Erweiterbarkeit Mit dem XDK ist es möglich, mit Hilfe eines XML – Schemas ein XML – Dokument zu validieren.

24 XDK XML Klassen Generator Mit Hilfe des Klassen Generators lassen sich aus einer gegebenen DTD oder XML-Schema Java – Klassen generieren, welche ein gültiges XML – Dokument erzeugen.

25 XMLTYPE neuer Systemdatentyp ab Oracle9i Datentyp besitzt Methoden mit denen es möglich ist XML – Dokumente – zu erzeugen –Teildokumente zu extrahieren XMLTYPE-Spalten können mit Oracle Text indiziert werden.

26 XMLTYPE Beispiel/Tabelle anlegen Für die Erzeugung einer XMLTYPE- Spalte muss man als Datentyp SYS.XMLTYPE angeben. CREATE TABLE faq_xmltype( faq_id INT, xml_text SYS.XMLTYPE );

27 XMLTYPE Beispiel/Datensatz einfügen mit Hilfe der Memberfunktion createXML() eine XMLType Instanz erzeugen createXML() überprüft die Wohlgeformtheit des XML – Dokumentes das Dokument wird nicht validiert

28 XMLTYPE Beispiel/Datensatz einfügen INSERT INTO faq_xmltype(faq_id, xml_text ) VALUES( 1, SYS.XMLTYPE.createXML( ' Oracle XMLTYPE FAQ... ') );

29 XMLTYPE Beispiel/Anfrage SELECT f.xml_text.extract('/FAQ/QUESTION/text()).getStrin gVal() "Questions FROM faq_xmltype f; Antwort: Questions ---------------------------------------------- Was ist der XMLType ? Wann sollte ich XMLType und wann CLOB benutzen ?

30 XMLTYPE Memberfunktionen createXML(xmlval IN VARCHAR2), createXML(xmlval IN CLOB) –Konstruktoren existsNode(xpath IN varchar2) extract(xpath IN VARCHAR2) isFragment() –Wahr wenn kein wohlgeformtes XML-Dokument vorliegt getStringVal(), getClobVal() getNumberVal()

31 XMLTYPE Vorteile Einbeziehung von Xpath in die SQL – Anfrage hohe Performance

32 XMLTYPE Nachteile Migration auf andere DBMS ist schwierig Teildokumente lassen sich nicht ändern oder ersetzen

33 Oracle Text für XML Mit Hilfe von Oracle Text ist es möglich große Texte, welche als VARCHAR2 oder CLOB abgespeichert sind, zu indizieren und diese effizient zu durchsuchen. Da es sich bei XML – Dokumenten auch um einfache Textdaten handelt, lassen sich die Indizierungs- und Suchfunktionen von Oracle Text auch auf diese anwenden. Oracle Text bietet außerdem noch direkte XML – Unterstützung an.

34 Oracle Text für XML Beispiel/Tabelle anlegen In der Tabelle wird der Standarddatentyp CLOB benutzt. CREATE TABLE faq_oracleText( faq_id INT, xml_text CLOB );

35 Oracle Text für XML Beispiel/ Datensatz einfügen Das XML – Dokument wird einfach als Text in die Tabelle eingefügt. INSERT INTO faq_oracleText(faq_id, xml_text) VALUES( 1, ' Oracle XMLTYPE FAQ … );

36 Oracle Text für XML Beispiel/ Section Group anlegen Mit Hilfe der Section Group ist es möglich, nur Teile des Dokumentes zu indizieren. Es gibt 3 Arten von Section Groups, die für die Verarbeitung von XML – Dokumenten relevant sind: –XML_SECTION_GROUP –AUTO_SECTION_GROUP –PATH_SECTION_GROUP EXEC ctx_ddl.create_section_group('myxmlgroup', 'XML_SECTION_GROUP');

37 Oracle Text für XML Beispiel/ Sections hinzufügen Da die XML_SECTION_GROUP am Anfang noch leer ist müssen einzelne Sections hinzugefügt werden. In dem Beispiel werden nur die Elemente TITLE und QUESTION indiziert. EXEC ctx_ddl.Add_Field_Section( group_name =>'myxmlgroup', section_name =>'title', tag =>'TITLE'); EXEC ctx_ddl.Add_Field_Section( group_name =>'myxmlgroup', section_name =>'question', tag =>'QUESTION');

38 Oracle Text für XML Beispiel/Anlegen des Index Der Index kann dann mit folgendem Statement angelegt werden: CREATE INDEX xml_index ON faq_oracleText(xml_text) INDEXTYPE IS ctxsys.context PARAMETERS ('SECTION GROUP myxmlgroup');

39 Oracle Text für XML Beispiel/Anfrage Nachdem das Dokument indiziert wurde, kann man mit Hilfe des CONTAINS – Statements in dem Dokument nach Wörtern suchen. Mit dem WITHIN Operator kann man feststellen, ob sich das gesuchte Wort innerhalb eines bestimmten XML – Tags befindet: SELECT xml_text FROM faq_oracleText WHERE CONTAINS(xml_text, 'xmltype WITHIN question')>0;

40 Oracle Text für XML Section Groups Für die Indizierung von XML – Dokumenten existieren drei Arten von Section - Groups: –XML_SECTION_GROUP –AUTO_SECTION_GROUP –PATH_SECTION_GROUP

41 Oracle Text für XML Section Groups/XML_SECTION_GROUP für die benutzerdefinierte Indizierung gedacht. bietet die größte Flexibilität beste Query- und Indexperformance und hat meist die kleinste Indexgröße. Diese Section – Group sollte man anwenden, wenn man die XML – Struktur von vornherein kennt und weiß in welchen Teilen des Dokumentes der Benutzer am meisten sucht.

42 Oracle Text für XML Section Groups/AUTO_SECTION_GROUP am bequemsten anzulegen, da hier das System einfach jedes XML - Element und jedes Attribut indiziert. Index am größten und die Performance der Querys schlechter als bei der XML_SECTION_GROUP. kommt zur Anwendung, wenn man nicht weiß, in welchen Sections der Benutzer suchen wird.

43 Oracle Text für XML Section Groups/PATH_SECTION_GROUP arbeitet genau so wie die AUTO_SECTION_GROUP Index wird auf XPath - Anfragen optimiert. Zugriff mit den INPATH und HASPATH Operatoren

44 FAZIT Für die applikationsseitige Verarbeitung von XML – Dokumenten, eignet sich das XDK am besten. Damit hat man die größten Freiheiten XML – Dokumente zu erzeugen, zu durchsuchen und zu verändern.

45 FAZIT Wenn klar ist, dass sich der Inhalt der XML – Dokumente nicht ändert und die Dokumente hauptsächlich durchsucht werden sollen ist Oracle Text die erste Wahl.

46 FAZIT Der XMLTYPE ist dann einzusetzen, wenn es sich um statische Dokumente handelt, deren Struktur bekannt ist und wenn man das Dokument selbst in die Anfrage einbeziehen möchte.


Herunterladen ppt "Speicherung von XML- Dokumenten als Large Objects."

Ähnliche Präsentationen


Google-Anzeigen