XML-Unterst - PowerPoint PPT Presentation

1 / 49
About This Presentation
Title:

XML-Unterst

Description:

XML-Unterst tzung in Oracle – PowerPoint PPT presentation

Number of Views:103
Avg rating:3.0/5.0
Slides: 50
Provided by: Thomas1399
Category:
Tags: xml | java | unterst

less

Transcript and Presenter's Notes

Title: XML-Unterst


1
XML-Unterstützung in Oracle
2
Überblick
  • XML Architekturformen und Speicherungsarten
  • XML Schema und Mapping
  • Laden von Daten
  • Zugriff

3
Allgemeine XML Architekturen
4
Unterschiedliche Speicherarten in Oracle
  • Die Speicherart richtetsich nach den
  • Anforderungen der
  • Anwendung
  • Konkurrierender Zugriff
  • Vokabularänderung
  • Ladeperformance
  • Abfrage-Performance
  • Redundanzen
  • XML Schema Support

Clob
Nativ als Dokument
Relational
Nativ Objektrelational
5
Geschichte
Oracle8i
Oracle9i
Oracle10g
Release1
Release2
  • SQL/XML
  • XQuery

Entwicklung der XML- Features von Oracle
  • Objektrelational
  • XML Schema
  • Zugriffe mit WebDAV, DOM
  • Objektrelational
  • XML Schema
  • Zugriffe mit WebDAV, DOM
  • XML Datentyp
  • dokumentbasiert
  • XPath Zugriffe
  • Indizes
  • XML Datentyp
  • dokumentbasiert
  • XPath Zugriffe
  • Indizes
  • XML Datentyp
  • dokumentbasiert
  • XPath Zugriffe
  • Indizes
  • XML Werkzeuge
  • relational / CLOB
  • XSQL Servlet
  • XML SQL Utility
  • XML Werkzeuge
  • relational / CLOB
  • XSQL Servlet
  • XML SQL Utility
  • XML Werkzeuge
  • relational / CLOB
  • XSQL Servlet
  • XML SQL Utility
  • XML Werkzeuge
  • relational / CLOB
  • XSQL Servlet
  • XML SQL Utility

6
Oracle und XML Schema
generiert
Schema
in der Datenbank
Typen
Tabellen
Java Beans
Security
SQL Data
7
Beispiel eines XML Schemas
8
Terminologie "annotated" XML Schema
  • XML Schema mit "Zusatzinformationen"
  • Herstellerspezifische Tags und Attribute zur
    Steuerung der Persistenz
  • Namespace-Konzept
  • Bei der Schema-Prüfung ignoriert der Parser gemäß
    W3C alle Namespaces, die er nicht kennt"
  • Datenbankunabhängige Parser beachten nur das
    allgemeine XML Schema
  • Bei Registrieren in der Datenbank wird nur das
    allgemeine XML Schema und die eigenen
    "Annotations " berücksichtigt.

9
XML Schema (Beispiel) letter.xsd
ltxsdschema xmlnsxsd"http//www.w3.org/2001/XMLS
chema" xmlnsxdb"http//xmlns.oracle.com/xdb"
elementFormDefault"qualified" attributeFormDefaul
t"unqualified"gt ltxsdelement name"letterBody"
xdbSQLType"LETTER_T" xdbdefaultTable"XDB_
LETTER"gt ltxsdcomplexType mixed"true"gt
ltxsdsequencegt ltxsdelement
name"salutation" xdbSQLType"VARCHAR2"gt
ltxsdcomplexType mixed"true"gt
ltxsdsequencegt
ltxsdelement name"titel"/gt
ltxsdelement name"name"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
lt/xsdelementgt ltxsdelement
name"quantity" type"xsdpositiveInteger"
xdbSQLType"NUMBER"/gt ltxsdelement
name"productName" xdbSQLType"VARCHAR2"/gt
ltxsdelement name"shipDate" type"xsddate"
minOccurs"0" xdbSQLType"DATE"/gt ...
10
Mapping
wird abgebildet auf
CREATE OR REPLACE TYPE salutation_t AS OBJECT
(SYS_XDBPDXDB.XDBRAW_LIST_T, "titel"
VARCHAR2(4000), "name" VARCHAR2(4000), ) NOT
FINAL INSTANTIABLE CREATE OR REPLACE TYPE
letter_t AS OBJECT (SYS_XDBPDXDB.XDBRAW_LIST_T,
"salutation" SALUATION_T, "quantity"
NUMBER(38), "productName" VARCHAR2(4000), "shipDat
e" DATE) NOT FINAL INSTANTIABLE CREATE TABLE
xdb_letter OF XMLTYPE XMLSCHEMA
"http//xmluser.de.oracle.com/xsd/letter.xsd" ID
'A0DD2CF291D90A8EE0340003BA08CF66' ELEMENT
"letterBody" ID 2507 TYPE letter_t ...
11
Schema-Registrierung
EXECUTE dbms_xmlschema.registerschema
( 'http//www.personal.xyz/Personal.xsd,--
schemaURL IN varchar2 getFileContent(bfilename('X
ML_DIR',Personal.xsd')), TRUE, --local IN
BOOLEAN TRUE, --genTypes IN BOOLEAN
TRUE FALSE, --genbean IN BOOLEAN FALSE TRUE,
--genTables IN BOOLEAN TRUE FALSE, --force IN
BOOLEAN FALSE 'XMLUSER' --owner IN
VARCHAR2 '')
  • Parameter
  • Schema-Name bzw. Schema-URL
  • Schema-Quelle als Instanz von XMLType, CLOB,
    VARCHAR2 oder URI
  • Flags zur Steuerung der Generierung von
    DB-Objekten (Tabellen, Types)

12
Der Datentyp XMLType
  • Ablage als CLOB

CREATE TABLE letter OF XMLTYPE -- STORE AS CLOB
erzwingt Speicherung als CLOB
  • Ablage als XML Schemabasierenden Tabelle

CREATE TABLE emp_tab2 OF XMLTYPE XMLSCHEMA
"http//xmluser.de.oracle.com/xsd/deptemp.xsd"
ELEMENT "emptable"
  • Ablage als XML Schemabasierende Spalte

CREATE TABLE dept_tab2 (deptno NUMBER, employee
XMLTYPE) XMLTYPE employee STORE AS OBJECT
RELATIONAL XMLSCHEMA "http//xmluser.de.oracle.co
m/xsd/deptemp.xsd" ELEMENT "emptable"
13
Weitere Schemamanipulationen
  • Löschen des Schemas

ECECUTE dbms_xmlschema.deleteSchema( 'http//www.p
ersonal.xyz/Personal.xsd', dbms_xmlschema.DELETE_C
ASCADE)
  • Anbinden eines Schemas

CREATE TABLE Personalakten OF XMLTYPE XMLSCHEMA
"http//www.personal.xyz/Personal.xsd" ELEMENT
"Personalakte"
  • Validierung
  • strukturelle Validierung beim Speichern / Ändern
    von XML-Dok.
  • vollständige Validierung mit Methoden
    XMLIsValid()oder SchemaValidate()
  • Validierungs-Methoden explizit aufrufen, können
    über Trigger angebunden werden

14
Laden von XML-Daten in die Datenbank
  • Mit SQL, PL/SQL und Java
  • INSERT INTO .. VALUES
  • als CLOB
  • Oracle Text
  • zusätzliche Indexierung erforderlich
  • Mit Hilfe von Protokollen
  • FTP
  • WEBDAV
  • HTTP

15
Arbeit mit CLOBs (PL/SQL)
Speicherung von XML Files mittels DBMS_LOB Package

declare theClob CLOB theBFile BFILE begin
insert into xmldocs(filename,document) values
(Sample.xml, empty_clob()) returning document
into theClob theBFileBFileName(XMLFILES,Sam
ple.xml) dbms_lob.fileOpen (theBFile)
dbms_lob.loadFromFile (dest_lobgttheClob, srcgtt
heBFile, amountgtdbms_lob.getLength(theBFile))
dbms_lob.fileClose(theBFile) commit end
BFILE mit Source File assoziiert, Logical
Directory Object XMLFILES vorher in Datenbank
anlegen, z.B. gtCREATE DIRECTORY xmlfiles as
c\work
16
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 Sectioner

17
Beispiel Arbeit mit interMedia Text (1)
Speicherung von XML-Dokumenten einer
Versicherungsgesellschaft

CREATE TABLE ins_claim (id NUMBER(7) PRIMARY
KEY, when DATE, doc CLOB)
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)
18
Beispiel Arbeit mit interMedia Text (2)
Beispiel-Dokument in der Spalte doc

The insureds ltVEHICLEgtcarlt/VEHICLEgtbroke through
the guard rail and plummeted into a ravine. The
cause was determined to be ltCAUSEgtfaulty
brakedlt/CAUSEgt Amazingly there were no casualties.
XML Section ltcausegt kann abgefragt werden

SELECT id, when FROM ins_claim WHERE contains
(doc,brakes WITHIN cause) gt 0 ID WHEN
DOC ------- ------ ------- 1
12-OCT-00 The insureds ltVEHICLEgtcar...
19
Beispiel Arbeit mit interMedia Text (3)
Alternative zu vordefiniertem Auto-Sectioner Defi
nition eines eigenen Sectioners und Verwendung im
Index
section name
tag name

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_at_Vehicle) ...
CREATE INDEX my_doc_ix ON ins_claim(doc) INDEXTYPE
IS ctxsys.context PARAMETERS(section group
my_section)
Mögliche Abfrage ist Suche nach Attributwerten
... where contains (doc, Audi within
Make_at_Vehicle) Findet ltVehicle MakeAudigt
20
Laden von Daten über INSERT
mittels XMLType-Konstruktor
SQLgt INSERT INTO Personalakten VALUES 2
(XMLTYPE(' 3 lt? xmlversion"1.0"?gt 4
ltPersonalakte Personalnummer"2234"gt 5
ltPersonaliengt 6 ltNachnamegtMeierlt/Nachname
gt 7 ltVornamegtOttogtlt/Vornamegt
8 ltGeburtsdatumgt1.1.1970lt/Geburtsdatumgt
9 lt/Personaliengt 10 ltGehaltsdaten
Steuerklasse"1" 11 Kirchensteuer"RK"
Kinder"0" /gt 12 ltZeugnisse/gt
13 lt/Personalaktegt 14 ')) 1 row created.
21
Laden über Internet Protokolle
22
Repository Support für Internet Protokolle
  • Zugriffe über Internet Protokolle
  • 1. Zugriff über URL
  • 2. Bildet Pfadname im Repository ab
  • 3. Zeigt Inhalt der Resource
  • Support für FTP, HTTP und Web DAV Protokolle

23
Sichtweise auf das Repository
xdbresource
resource_view
FTP
HTTP
XML Table
B Tree Index
Text Index
Hierarchical Index
24
XML Zugriff mit SQL
  • Schnittstellen
  • JDBC
  • ODBC
  • native OCI
  • XQuery
  • SQL/XML
  • Nutzung von Datenbankfeatures
  • relationale Tabellen
  • objektrelationaler Zugriff
  • gespeicherte Prozeduren und Funktionen
  • Kombination mit AQ (Advanced Queues)

25
Funktionen auf XMLType
  • Zugriff auf den Inhalt eines Objekts von XMLType
    über Funktionen
  • extract um das Ergebnis eines XPath-Ausdrucks zu
    erhalten,
  • getClobVal, getStringVal und getNumVal, um das
    Ergebnis von extract in einen SQL-Datentyp zu
    überführen,
  • extractValue, um das Ergebnis eines
    XPath-Ausdrucks direkt in einen SQL-Wert
    umzuwandeln,
  • existsNode, um zu prüfen, ob ein XPath-Ausdruck
    ein Ergebnis liefert.
  • createXML erzeugt aus einer SQL-Zeichenkette
    einen Wert des Typs XML (bei inhaltsorientierter
    Zerlegung wieder auf SQL-Tabellen abgebildet)

26
Funktionen auf XMLType - Beispiele
  • Anzahl der Kinder des Angestellten Meier als
    numerischer Wert

SELECT P.Personalakte.extract((//_at_Kinder).getNum
Val() AS Kinderzahl FROM Personalakten P WHERE
P.Personalakte.extract(//Personalien/Nachname/tex
t()). getstringVal() Meier
  • gleiche Anfrage unter Verwendung eines
    XPath-Ausdrucks in WHERE-Klausel

SELECT P.Personalakte.extract((//_at_Kinder).getNum
Val() AS Kinderzahl FROM Personalakten P WHERE
P.Personalakte.existsNode(//PersonalienNachname
"Meier")
27
Funktionen auf XMLType Beispiele (2)
  • extract liefert Markup mit
  • extractValue() entspricht extract.text()
  • Erweiterung von XPath durch Oracle durch weitere
    Funktionen, z.B. oracontains
  • vergleichbar mit CONTAINS-Operator in SQL
  • aber kein Textindex erforderlich

SELECT P.Personalakte.extractValue('//Nachname')
AS Nachname FROM Personalakten P WHERE
P.Personalakte.existsNode( //Zeugnisoracontain
s(Zwischenzeugnis,"vollen" OR "vollsten")gt0)
28
Änderungen von XML-Dokumenten
Variante 1 ganzes Dokument angeben, um
XMLType-Spalte zu ersetzen
UPDATE Personalakten p SET p.Personalakte
createXML (' lt?xml version"1.0"?gt
ltPersonalakte Personalnummer"2234"gt
ltPersonaliengt ltNachnamegtMeiergt/Nachnamegt
ltVornamegtOttogtlt/Vornamegt ltGeburtsdatumgt197
0-01-01lt/Geburtsdatumgt lt/Personaliengt
ltGehaltsdaten Steuerklasse"1"
Kirchensteuer"RK" Kinder"0" /gt ltZeugnisse/gt
lt/Personalaktegt ') WHERE p.Personalakte.extract
Value('/Personalakte/_at_Personalnummer' )
2234
29
Änderungen von XML-Dokumenten
Variante 2 Update nur für die zu ändernden Teile
beschreiben
UPDATE Personalakten p SET p.Personalakte
UpdateXML (p.Personalakte, /Personalakte/Perso
nalien/Nachname/text(), Schulz, /Personalakte
/Gehaltsdaten/_at_Steuerklasse, 3) WHERE
p.Personalakte.extractValue(/Personalakte/_at_Person
alnummer) 2234
  • Beispiel beschreibt Änderungen während einer
    Heirat
  • Funktion UpdateXML kann mehrere XPath-Ausdrücke
    verarbeiten
  • neuer Wert kann selbst auch vom Typ XMLType sein

30
SQL/XML in Oracle
  • Oracle unterstützt SQL/XML-Funktionen aus dem
    Standard
  • XMLELEMENT
  • ohne Keyword NAME
  • auch Werte von SQL-Objekttypen erlaubt (row
    types)
  • XMLCONCAT
  • XMLAGG
  • Gegenüber Standard erweiterte Funktionen
  • XMLSEQUENCE
  • liefert ein VARRAY von XMLType-Instanzen (daraus
    lässt sich mittels TABLE-Funktion Tabelle
    konstruieren)
  • liefert dabei alle Elemente auf der höchsten
    Ebene zurück
  • macht Konkatenation rückgängig, die durch
    Funktion extract verursacht wird.
  • XMLCOLLATTVAL
  • erzeugt für jede Spalte ein Element des festen
    Namens column

31
SQL/XML in Oracle (Beispiel)
ltPersonalakte Personalnummer"2234"gt
ltPersonaliengt ltNachnamegtMüllergt/Nachnamegt
ltVornamegtOttogtlt/Vornamegt ltGeburtsdatumgt1960-01
-01lt/Geburtsdatumgt lt/Personaliengt
ltGehaltsdaten Steuerklasse"3" Kirchensteuer
"RK" Kinder"3"gt ltGehalt Start"1997-01-01"
gt7500lt/Gehaltgt ltGehalt Start"1999-01-01"
gt8000lt/Gehaltgt ltGehalt Start"2001-01-01"
gt8500lt/Gehaltgt lt/Gehaltsdatengt lt/Personalaktegt
Ermittle alle Gehaltselemente, die einen Wert von
mindestens 8000 beinhalten
SELECT value(g).getClobVal FROM PersonalaktenX
p, TABLE(XMLSequence(extract(value(p),//Gehalt
))) g WHERE extractValue(value(g), /Gehalt)
gt 8000
32
XQuery-Unterstützung in Oracle
  • drei Funktionen, die XQuery unterstützen
  • XMLQuery
  • XMLTable
  • XQuery (seit 10R2)
  • einige Bestandteile des XQuery-Standards in
    früheren Oracle-Versionen nicht verfügbar
  • Funktion oraview
  • zur Anbindung von Tabellen an XQuery
  • erzeugt eine XML-Struktur von Tabellen (SQL/XML
    konform)
  • Beispiel

xquery for i in oraview("Auftrag") return
ltAuftraggebergti/Firmalt/Auftraggebergt
Weitere Details im XQuery-Tutorial im Internet
http//xquery-tutorial.de.vu
33
Das XML SQL Utility (XSU)
  • Prinzip
  • Generierung von XML-Dokumenten aus SQL-Abfragen
    (in String-Darstellung oder DOM)
  • Speichern von XML-Dokumenten durch Einfügen von
    Daten aus Dokumenten (generated XML)
  • Aktualisieren und Löschen von Daten aus
    XML-Dokumenten in der Datenbank
  • Schnittstellen
  • XSU Java API
  • XSU PL/SQL API (Packages DBMS_XMLQuery und
    DBMS_XMLSave)
  • Kommandozeilen-Interface
  • Verwendung der XSU- Funktionen durch Aufruf der
    Java-Klasse OracleXML
  • Aufruf in Kommandozeile
  • java OracleXML putXML getXML optionen

34
XSU-Umgebung
Applikation
XSU
Oracle-Datenbank
XML-Dokument
XML Parser
JDBC Driver
  • XSU kann installiert werden
  • auf Client-Seite (nur für Java)
  • in der Datenbank (erfordert Jserver)
  • in der Middle Tier (Web oder Application Server
    u.a. Oracle Tools

35
Aufruf von XSU getXML

C\work\Oracle\XSU12\libgtjava OracleXML getXML
-user xuser/xuser select from dept

lt?xml version1.0?gt ltROWSETgt ltROW num1gt
ltDEPTNOgt10lt/DEPTNOgt ltDNAMEgtACCOUNTINGlt/DNAMEgt
ltLOCgtNEW YORKlt/LOCgt lt/ROWgt ltROW num2gt
ltDEPTNOgt20lt/DEPTNOgt ltDNAMEgtRESEARCHlt/DNAMEgt
ltLOCgtDALLASlt/LOCgt lt/ROWgt ... lt/ROWSETgt
36
Aufruf von XSU putXML

C\work\Oracle\XSU12\libgtjava OracleXML putXML
-user xuser/xuser fileName sampdoc.xml
xmltab Successfully inserted 3 rows into xmltab
  • Anmerkungen
  • Insert-Operationen erfordern kanonisches
    XML-Format
  • Format muß der Ausgabe der XSU entsprechen
    (einschließlich ltrowsetgt und ltrowgt Tags)
  • Kommandozeilen-Interface erlaubt keine Update-
    und Delete-Operationen, d.h. nur über API möglich

37
SELECT (XSU Java API)
import java.sql. import oracle.xml.sql.query.
import oracle.jdbc. public class sampGetXML
public static void main(String args) throws
SQLException DriverManager.registerDriver(ne
w oracle.jdbc.driver.OracleDriver())
Connection conn DriverManager.getConn
ection("jdbcoracleoci8scott/tiger _at_")
OracleXMLQuery qry new OracleXMLQuery(conn,"sele
ct from emp") String xmlString
qry.getXMLString() System.out.println("
OUTPUT IS\n"xmlString) qry.close()
conn.close()
38
SELECT (XSU Java API), Forts.
  • zur Generierung von XML wird die Java-Klasse
    OracleXMLQuery verwendet
  • Erzeugung einer Instanz von OracleXMLQuery mit
    Übergabe des SQL-Statements und der Verbindung
    als Parameter
  • Beispiel

OracleXMLQuery qry new OracleXMLQuery(conn,
"SELECT FROM emp")
  • Generierung der DOM-Darstellung anstelle
    String-Darstellung

XML Document domDOC (XMLDocument)qry.getXMLDOM()

39
INSERT (XSU Java API)
Beispiel für INSERT mit Werten in allen Spalten
public class sampInsert public static void
main(String args) throws SQLException
String tabName "emp" String fileName
"sampdocins.xml" DriverManager.registerDriv
er(new oracle.jdbc.driver.OracleDriver())
Connection conn
DriverManager.getConnection("jdbcoracleoci8scot
t/tiger_at_") OracleXMLSave sav new
OracleXMLSave(conn, tabName) URL url
sav.getURL(fileName) int rowCount
sav.insertXML(url) System.out.println("
successfully inserted "rowCount" rows
into "tabName) conn.close()
40
Bestandteile des XDK
Java
C
C
PL/SQL
XML Parser
XSLT Processor
Schema Processor
Class Generator
XML Trans- viewer Beans
XSQL Servlet
XSU
XSU
41
XSQL
  • XML SQL
  • Bestandteil des Oracle XDK (XML Development Kit)
  • XML-formatierte Ausgabe von relational
    gespeicherten Daten in jedem DBMS verfügbar
  • Grundidee
  • relational gespeicherte Daten als XML darstellen
  • Einbettung von SQL-Anweisungen in XML
  • Weiterverarbeitung mittels XSL-Stylesheets
    möglich

42
Vorteile von XSQL Pages
  • einfache Generierung von XML-Dokumenten auf der
    Basis von SQL Queries
  • erlaubt Insert-, Update- und Delete-Operationen
  • unterstützt XSL Transformation durch Anwendung
    von XML Stylesheets, beliebige Zielformate wie
    z.B. HTML
  • dient als Input für den XSQL Page Processor
  • Trennung der Daten von der Darstellung

43
XSQL Page Verarbeitung
  • Bestandteile
  • XSQL Pages
  • SQL Queries
  • DML und DDL in XML Tags
  • XSQL Page Processor (in Java)
  • nimmt XSQL Pages als Input
  • erzeugt dynamische XML Seiten mit den Ergebnissen
    der SQL-Queries
  • XSQL Servlet
  • erlaubt XSQL Page Verarbeitung im Web
  • Erweiterbare Stylesheets
  • optional
  • XSL Transformationen zur Formatierung des Output

44
XSQL Page Processor Architektur
XSL Stylesheet
XSQLConfig
XSQL Page
Datenbank
XML o.a. Formate
45
Verarbeitung von XSQL Pages
Einführendes Beispiel
XSQL Page Input
lt?xml version1.0 ?gt ltxsqlquery
connectiondemo xmlnsxsqlurnoracle-xsqlgt
SELECT Hello World AS greeting FROM
DUAL lt/xsqlquerygt
XML Output
ltROWSETgt ltROW num1gt ltGREETINGgtHello
Worldlt/GREETINGgt lt/ROWgt lt/ROWSETgt
46
XSQL Queries und Connections
  • XSQL Page erlaubt die Definition von SQL Queries
  • Query ist eingebettet in ein xsqlquery Tag
  • Connection-Attribut definiert die
    Verbindungsinformaiton zur Datenbank
  • Connection Name wird aufgelöst in einer
    Konfigurationsdatei XSQLConfig.xml (in xsql/lib)
  • Beispiel

ltconnectiondefsgt ltconnection namedemogt ltusern
amegtxuserlt/usernamegt ltpasswordgtxuserlt/passwordgt
ltdburlgtjdbcoraclethin_at_localhost1521mydblt/dbur
lgt ltdrivergtoracle.jdbc.driver.OracleDriverlt/drive
rgt lt/connectiongt ... lt/connectiondefsgt
47
XSQL Tags (Auswahl)
  • ltxsqlquerygtAbfrage der Datenbank über XSU (kann
    über zusätzliche Optionen gesteuert werden /
    siehe nächste Folie)
  • ltxsqldmlgterlaubt die Ausführung beliebiger DML-
    und DDL-Operationen (INSERT, CREATE TABLE etc.)
    und jedes PL/SQL-Blockes
  • ltxsqlinsert-requestgtEinfügen von XML-Dokumenten
    in die Datenbank (Voraussetzung kanonisches
    Format)
  • ltxsqldelete-requestgtLöschen von Zeilen aus
    SQL-Tabelle, Angabe der Schlüsselspalten
    erforderlich
  • ltxsqlupdate-requestgtÄnderung von Zeilen einer
    SQL-Tabelle, identifizierende Spalten angeben

48
Anpassung von XSQL Queries
Attribute für xsqlquery
rowset-element Elementname für Anfrageergebnis leerer String, wenn kein Elementname gewünscht
row-element Elementname für jede Zeile im Anfrageergebnis leerer String, wenn kein Name gewünscht
max-rows Maximalanzahl von Zeilen, die vom Ergebnis ausgegeben werden sollen, sinnvoll z.B. für Top-N-Queries
skip-rows Anzahl von Zeilen, die übersprungen werden soll vor Darstellung des Ergebnisses
id-attribute Attributname für id-Attribute für jede Zeile im Anfrageergebnis
id-attribute-column Zu nutzender Spaltenname, um den Wert des id-Attributs in jeder Ergebniszeile zu liefern
null-indicator Wenn auf y oder yes gesetzt Null-Indicator-Attribut bei den Elementen genutzt, dessen Wert NULL ist
49
XSQL Query Parameter
Beispiel Deklaration einer parametrisierten
Query in einer XSQL Page
lt?xml version1.0 ?gt lt?xml-stylesheet
typetext/xsl hrefemp.xsl?gt ltxsqlquery
connectiondemo xmlnsxsqlurnoracle-xsql fi
nd sortENAME null-indicatoryesgt SELECT
FROM EMP WHERE ENAME LIKE _at_find ORDER
BY _at_sort lt/xsqlquerygt
Die Parameterwerte können in einer URL geliefert
werden, z.B. http//localhost/xsql/demo/emp.xsql?
findAsortSAL
50
Nested Cursor
  • erzeugen in SQL-Anfragen die XML-typische
    Baumstruktur (anstelle von Tabellen)
  • Beispiel

FBEREICH STUDIENGANG SEMESTER BEZEICHNUNG
IMN IN 1 Grundlagen der Informatik
IMN IN 1 Analysis 1
  • Baumstruktur in XML

IMN -IN - 1.Semester - Grundlagen
der Informatik - Analysis 1
51
Beispiel Nested Cursor
  • Tiefe 1 Gruppierte Auflistung aller
    Fachbereiche
  • Tiefe 2 Auflistung der Studiengänge pro
    Fachbereich
  • Tiefe 3 Auflistung der Semester pro Studiengang
    und Fachbereich
  • Tiefe 4 Auflistung aller Fächer pro Semester
    und Studiengang und Fachbereich

52
Beispiel Nested Cursor (2)
  • Tiefe 3 Fachbereich ? Studiengang ? Semester

ltROWSETgt ltROW num"1"gt
ltFBEREICHgtIMNlt/FBEREICHgt ltSTUDGANGgt
ltSTUDGANG_ROW num"1"gt
ltSTUDIENGANGgtINlt/STUDIENGANGgt
ltSEMESTERgt ltSEMESTER_ROW num"1"gt
ltSEMESTERgt1lt/SEMESTERgt
lt/SEMESTER_ROWgt ltSEMESTER_ROW
num"2"gt ltSEMESTERgt2lt/SEMESTERgt
lt/SEMESTER_ROWgt
lt/SEMESTERgt lt/STUDGANG_ROWgt
lt/STUDGANGgt lt/ROWgt . . . lt/ROWSETgt
53
Beispiel Nested Cursor (3)
  • Tiefe 3 Fachbereich ? Studiengang ? Semester
  • SQL-Befehl mit Nested Cursor (XML-Output vgl.
    vorige Folie)

select f.fbereich, cursor (select
fa.studiengang, cursor (select fae.semester
from faecher fae where fae.fbereichf.fbere
ich and fae.studiengangfa.studiengang
group by fae.semester) as semester from
faecher fa where fa.fbereichf.fbereich group by
fa.studiengang) as studgang from faecher f
group by f.fbereich
  • Kommentare
  • GROUP BY verhindert Redundanz im Baum
  • in WHERE-Klausel des Cursors Referenz auf die
    höheren Ebenen

54
Aufruf XSQL Page Processor
Kommando- Zeile
Java Applikation
XSQL Page Processor
XSQL Servlet
Java Server Page
55
XSQL Servlet Environment
Web Server mit Servlet Engine
XSQL Page Processor
http
JDBC
Web-Browser
Oracle DB
XSQL Servlet
Write a Comment
User Comments (0)
About PowerShow.com