Speicherung von XML- Dokumenten als Large
Objects
Gliederung
• Einleitung
• XML Developer Kit (XDK)
• XMLTYPE
• Einsatz von Oracle Text für XML
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
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
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
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
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.
XDK
XML Parser/DOM
Dokument in XML - Darstellung Dokument in DOM Darstellung
<TABLE>
<ROWS>
<TR>
<TD>Shady Grove</TD>
<TD>Aeolian</TD>
</TR>
<TR>
<TD>Over the River… </TD>
<TD>Dorian</TD>
</TR>
</ROWS>
</TABLE>
XDK
XML Parser/DOM Ausgehend von der
Schnittstellendefinition wird eine konkrete Knotenklasse implementiert. Diese
Knotenklasse besitzt
wiederum Zeiger die auf
Kinderknoten verweisen.
XDK
XML Parser/DOM
XDK
XML Parser/DOM
Modell Spezifikation Dokument ist ...
XML datenorientiert,
zeichenkettenorientiert formale Sprache &
Constraints Wort einer
formalen Sprache
DOM objektorientiert Interface Definition Language (IDL) &
Semantik
Menge von
Objekten und ihre
Beziehungen
XDK
XML Parser/DOM/Beispiel
<?xml version="1.0" ?>
<TABLE id="1" rows="2">
<ROWS>
<TR>
<TD>Shady Grove </TD>
<TD>Aeolian</TD>
</TR>
<TR>
<TD>Over the River, Charlie</TD>
<TD>Dorian</TD>
</TR>
</ROWS>
</TABLE>
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();
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());
} } } } }
XDK
XML Parser/DOM/Beispiel
Programmausgabe:
TABLE:
name=id value=1 name=rows value=2 ROWS:
TR:
TD:
TD:
TR:
TD:
TD:
XDK
XML Parser/SAX
• ereignisbasiert
• keinerlei interne Repräsentation des gesamten XML – Dokumentes
• benutzerdefinierter Handler für jedes Element
• Dokument wird seriell verarbeitet
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-
XDK
XML Parser/SAX
Dokument in XML - Darstellung Dokument in SAX Darstellung
<TABLE>
<ROWS>
<TR>
<TD>Shady Grove</TD>
<TD>Aeolian</TD>
</TR>
<TR>
<TD>Over the River… </TD>
<TD>Dorian</TD>
</TR>
</ROWS>
</TABLE>
start document
start element: TABLE start element: ROWS start element: TR start element: TD
start characters: Shady Grove end element: TD
start element: TD ..
.
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");
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");
}
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) {
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 ...