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