XML und Datenbanken

Transcription

XML und Datenbanken
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
XML und Datenbanken
…Fortsetzung
Dr. Christian Senger
XML und Datenbanken
1
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
XML und Datenbanken
• Anwendungsszenarien
– Generierung von XML aus Datenbanken
– Visualisierung von Datenbankinhalten
– Speicherung von XML-Dokumenten in bestehenden
Datenbanken
– Austausch von Datenbankinhalten
– Electronic Data Interchange
– Verbindung verschiedener Softwarekomponenten
Dr. Christian Senger
XML und Datenbanken
2
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
Anwendungsszenarien
DB
XMLGenerierung
XMLDok.
XMLDok.
HTML.
Dok.
XSLTDokument
(Stylesheet)
XSLTTransformation
sonst.
Dok.
Generierung/Visualisierung von Datenbankinhalten
Dr. Christian Senger
XML und Datenbanken
3
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
Anwendungsszenarien II
XMLAnfrage
XMLDok.
Abspeicherungsmodul
Speicherung von XML-Dokumenten
in bestehende Datenbanken
Dr. Christian Senger
XMLDok.
Anfragemodul
DB
XML und Datenbanken
4
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
Anwendungsszenarien III
Abspeicherung
DB1
Generierung
XMLDok.
Programm I
XML-Prozessor
DB2
Programm II
Austausch von Datenbankinhalten, Electronic Data Interchange (EDI)
Dr. Christian Senger
XML und Datenbanken
5
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
Feste Menge vorgegebener Datenbankstrukturen
create table element (
• Elemente
id number primary key,
name varchar2(20) not null,
parent_elem_fk number references element(id) on delete cascade,
position number not null
);
create table text (
id number primary key,
•
text varchar2(255),
element_fk number references element(id) on delete cascade,
position number
);
create table attribut (
id number primary key,
name varchar2(20) not null,
value varchar2(80),
element_fk references element(id) on delete cascade
);
Dr. Christian Senger
XML und Datenbanken
Texte
• Attribute
6
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
SQLX Standard
• XML Standard für SQL
• Reihe von Funktionen zur Unterstützung der Ausgabe
von XML mittels SQL-Select-Statements
–
–
–
–
–
–
XMLElement
XMLAttributes
XMLForest
XMLAgg
XMLConcat
XMLRoot
Dr. Christian Senger
XML und Datenbanken
7
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
XMLType
• von Oracle vordefinierter Typ
• XMLType zur Speicherung von nativen XML-Dokumenten
• Anfragen an Dokumente mittels XPath-Unterstützung
• Funktionen zur Unterstützung der SQL-Anfragen auf XMLType
Instanzen:
–
–
–
–
–
extractValue(XMLType, XPath)
extract(XMLType, XPath)
existsNode(XMLType, XPath)
xmlsequence(XMLType)
transform(XMLType)
• XML-Schema und XQuery Unterstützung
Dr. Christian Senger
XML und Datenbanken
8
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
XMLType & DML
• DML Modifikationsfunktionen
– updateXML: Führt ein Update eines Wertes/Elements an der durch
XPath angegebenen Stelle durch.
– deleteXML: Löscht das/die durch XPath angegebene(n) Element(e).
– insertXMLBefore: Fügt eine XMLType-Instanz vor der durch XPath
spezifizierten Stelle ein.
– appendChildXML: Fügt eine XMLType-Instanz nach der durch XPath
spezifizierten Stelle ein.
– insertChildXML: Fügt ein XMLElement unterhalb der durch XPath
spezifizierten Stelle ein (ist ein Schema angegeben erfolgt der Eintrag
automatisch an der richtigen Stelle).
Dr. Christian Senger
XML und Datenbanken
9
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
transform
•
Führt XSLT-Transformation auf XMLType Instanz aus
•
Input: XSLT-Stylesheet
•
Beispiel (Identity Stylesheet)
select value(p).transform(xmltype(‚
<xsl:stylesheet version="1.0„
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>'))
from person_xml p
•
Das Identity-Stylesheet gibt den Input Text unverändert zurück. Durch
Hinzunahme weiterer Regeln (xsl:template-Elemente) können dann bestimmte
Teile modifiziert werden.
Dr. Christian Senger
XML und Datenbanken
10
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
create table person_xml of XMLType;
Dr. Christian Senger
XML und Datenbanken
11
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
insert into person_xml
values(XMLType(
'<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Person [
<!ELEMENT Person (Name, Adresse)>
<!ATTLIST Person
ID CDATA #REQUIRED>
<!ELEMENT Adresse (Strasse, Plz, Ort)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Strasse (#PCDATA)>
<!ELEMENT Plz (#PCDATA)>
<!ELEMENT Ort (#PCDATA)>
]>
<Person ID="242">
<Name>Sebbl Seeigel</Name>
<Adresse>
<Strasse>An der Mole 15</Strasse>
<Plz>65432</Plz>
<Ort>Salzhausen</Ort>
</Adresse>
</Person>
'));
1 Zeilen eingefügt
Dr. Christian Senger
XML und Datenbanken
12
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
insert into person_xml
values(XMLType('<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE Person [
<!ELEMENT Person (Name, Adresse)>
<!ATTLIST Person ID CDATA #REQUIRED>
<!ELEMENT Adresse (Strasse, Hausnummer,
Plz, Ort)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Strasse (#PCDATA)>
<!ELEMENT Hausnummer (#PCDATA)>
<!ELEMENT Plz (#PCDATA)>
<!ELEMENT Ort (#PCDATA)>
]>
<Person ID="242">
<Name>Sebbl Seeigel</Name>
<Adresse>
<Strasse>An der Mole
15</Strasse>
<Plz>65432</Plz>
<Ort>Salzhausen</Ort>
</Adresse>
</Person>'));
Dr. Christian Senger
SQL-Fehler: ORA-31011: XML-Parsing nicht
erfolgreich
ORA-19202: Fehler bei XML-Verarbeitung
LPX-00103: Warning: Dokumentstruktur
stimmt nicht mit DTD überein
Error at line 17
aufgetreten
ORA-06512: in "SYS.XMLTYPE", Zeile 301
ORA-06512: in Zeile 1
31011. 00000 - "XML parsing failed"
*Cause:
XML parser returned an error
while trying to parse the document.
*Action:
Check if the document to be
parsed is valid.
XML und Datenbanken
13
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
declare
str clob;
begin
str := '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
<xs:element name="Adresse">
<xs:complexType>
<xs:sequence>
<xs:element name="Strasse" type="xs:string"/>
<xs:element name="Plz" type="xs:int"/>
<xs:element name="Ort" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="ID" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>';
dbms_xmlschema.registerSchema ('http://www.hs-karlsruhe.de/iwi/DB2/simpleperson.xsd', str);
end;
Dr. Christian Senger
XML und Datenbanken
14
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
Tabelle, basierend auf XML-Schema definieren
create table person_schema_xml of XMLType
XMLSCHEMA "http://www.hs-karlsruhe.de/iwi/DB2/simple-person.xsd"
ELEMENT "Person";
Datensatz einfügen:
insert into person_schema_xml
values(XMLType('<Person ID="242">
<Name>Sebbl Seeigel</Name>
<Adresse>
<Strasse>An der Mole 15</Strasse>
<Plz>65432</Plz>
<Ort>Salzhausen</Ort>
</Adresse>
</Person>'));
Dr. Christian Senger
XML und Datenbanken
15
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
• Keine defaultmäßige Überprüfung auf
Schemakonformheit
• Dokument mit Fehler der nicht erkannt wird:
insert into person_schema_xml
values(XMLType('<Person ID="243">
<Name>Johann Meier</Name>
<Adresse/>
</Person>'));
1 Zeilen eingefügt
Dr. Christian Senger
XML und Datenbanken
16
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
Dokument mit Fehler der erkannt wird:
begin
insert into person_schema_xml
values(XMLType(‚
<Person ID="242">
<Name>Sebbl Seeigel</Name>
<Anschrift>
<Strasse>An der Mole 15</Strasse>
<Plz>65432</Plz>
<Ort>Salzhausen</Ort>
</Anschrift>
</Person>'));
dbms_output.put_line('FEHLER: keinen Fehler im XML Dokument gefunden !!');
exception
when others then
dbms_output.put_line('Fehler im XML Dokument erkannt');
end
Dr. Christian Senger
XML und Datenbanken
17
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
• Automatische Validierung gegenüber Schema ist nicht
vollständig.
• Vollständige Validierung mittels zusätzlicher Methoden:
– member function isSchemaValid() return number
– static procedure schemaValidate()
• Überprüfen/manuelles Setzen des Validierungsstatus
– member function isSchemaValidated() return number
– member procedure setSchemaValidated(flag IN
BINARY_INTEGER := 1)
Dr. Christian Senger
XML und Datenbanken
18
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
Überprüfung durch Instanzenmethode isSchemaValid(...):
-- manuelles überprüfen des Datensatzes
-declare
xmldoc xmltype;
begin
select value(x)
into xmldoc
from person_schema_xml x
where existsNode(value(x),'/Person[@ID="243"]')=1;
IF xmldoc.isSchemaValid() = 1 THEN
dbms_output.put_line('Dokument wurde nicht beanstandet');
ELSE
dbms_output.put_line('Dokument wurde als falsch erkannt');
END IF;
end;
Dr. Christian Senger
XML und Datenbanken
19
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
DTD- und Schema-Unterstützung
Überprüfung mittels Trigger:
CREATE TRIGGER is_valid_trig
BEFORE INSERT OR UPDATE ON person_schema_xml
FOR EACH ROW
DECLARE
newxml XMLType;
BEGIn
newxml := :new.OBJECT_VALUE;
XMLTYPE.schemaValidate(newxml);
END;
Dr. Christian Senger
XML und Datenbanken
20
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
XMLType und XQuery
Zugriff auf Tabellen/Views vom Typ XMLType:
Anlegen eines Views vom Typ XMLType:
create or replace view kleinstaaten of xmltype
with object id ('/LAND/@ID')
as
select xmlelement("LAND", xmlattributes(code as "ID"),
xmlforest(capital, population))
from mondial.country c
where population < 100000;
Test:
select value(ks)
from kleinstaaten ks;
Ausgabe:
<LAND ID="AND"><CAPITAL>Andorra la Vella</CAPITAL><POPULATION>72766</POPULATION></LAND>
<LAND ID="FL"><CAPITAL>Vaduz</CAPITAL><POPULATION>31122</POPULATION></LAND>
<LAND ID="MC"><CAPITAL>Monaco</CAPITAL><POPULATION>31719</POPULATION></LAND>
...
Dr. Christian Senger
XML und Datenbanken
21
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
XMLType und XQuery
XQuery:
select XMLquery('
let $ks := /LAND
let $stadt:=$ks/CAPITAL/text()
let $id:=$ks/@ID
return <stadt land="{$id}">{$stadt}</stadt>
'
PASSING OBJECT_VALUE RETURNING CONTENT)
from kleinstaaten;
Ausgabe:
<stadt land="AND">Andorra la Vella</stadt>
<stadt land="FL">Vaduz</stadt>
<stadt land="MC">Monaco</stadt>
<stadt land="V">Vatican City</stadt>
<stadt land="RSM">San Marino</stadt>
<stadt land="AG">Saint Johns</stadt>
<stadt land="WD">Roseau</stadt>
...
15 Zeilen ausgewählt
Dr. Christian Senger
XML und Datenbanken
22
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
XMLType und XQuery
Anfrage:
select XMLquery('let $ks := /LAND
let $stadt:=$ks/CAPITAL/text()
let $id:=$ks/@ID
return <stadt land="{$id}">{$stadt}</stadt>'
PASSING OBJECT_VALUE RETURNING CONTENT)
from kleinstaaten ks
where existsNode(value(ks),'//LAND[POPULATION > 20000]')=1 ;
Ausgabe:
<stadt
<stadt
<stadt
<stadt
<stadt
...
land="AND">Andorra la Vella</stadt>
land="FL">Vaduz</stadt>
land="MC">Monaco</stadt>
land="V">Vatican City</stadt>
land="RSM">San Marino</stadt>
11 Zeilen ausgewählt
Dr. Christian Senger
XML und Datenbanken
23
Fakultät für Informatik & Wirtschaftsinformatik
DB & IS II – SS 2015
XMLType und XQuery
Anfrage:
select xmlagg(XMLquery('let $ks := /LAND
let $stadt:=$ks/CAPITAL/text()
let $id:=$ks/@ID
return <stadt land="{$id}">{$stadt}</stadt>'
PASSING OBJECT_VALUE RETURNING CONTENT))
from kleinstaaten ks
where existsNode(value(ks),'//LAND[POPULATION > 20000]')=1 ;
<stadt land="AND">Andorra la Vella</stadt><stadt
land="FL">Vaduz</stadt><stadt land="MC">Monaco</stadt><stadt
land="RSM">San Marino</stadt><stadt land="AG">Saint Johns</stadt><stadt
land="WD">Roseau</stadt><stadt land="WG">Saint Georges</stadt><stadt
land="KN">Basseterre</stadt><stadt land="KIR">Tarawa</stadt><stadt
land="MH">Majuro</stadt><stadt land="SY">Victoria</stadt>
1 Zeilen ausgewählt.
Dr. Christian Senger
XML und Datenbanken
24