XML Databases by Sebastian Graf Hier beginnt mein toller Vortrag
Table of Contents XML Database Overview XML Database Example XPath XML-QL XQuery Storing of XML Databases Relational DB vs. XML XML based Systems Hier sieht man gerade das Inhaltsverzeichnis. Echt jetzt.
XML Database Overview XML DB Navigation in Tree Tree structure Think in nodes & axes Navigation in Tree XPath Tree structure contrast to SQL where relations are basic Big difference between SQL & XML SQL says what should be selected, but not how ( Oracle,DB2) Very important in the navigation XPath
XML Database Example <europe> <country car_code = D memberships = org-eu org-nato …> <name>Germany</name> <capital>Berlin</capital> <poulation> 82 440 134</population> <country code>de</country code> <bundesland> <name>NRW</name> <capital>Düsseldorf</captial> <population>18 052 000 </population> </bundesland> </country> </europe> As every XML File, a XML Database has a root europe Elemets in country cannot have childs could also be written as childs Design Feature 2 Capitals !!! no problem because they are on different hirachy level
XPath Describes how to process XML items logical path to a node (location path) Provides abstraction for XML languages XSLT XPointer XQuery XPath is a language that describes a way to locate and process items in Extensible Markup Language XSLT Extensible Stylesheet Language Transformations XPointer XPointer is a language for locating data within a XML document based on properties such as location within the document, character content, and attribute values
XPath /europe/country/name Selects all names With predecessor „country“ With predecessor „europe“ Addressing like in the Unix Filesystem /europe/country/name selects all nodes „name“ that have a predecessor (father) country which has a father europe
XPath examples /europe/country[population > 50 000 000] All countries with population > 50 000 000 /europe/country/@car_code All car_codes of Europe /europe/country[name = Germany]//capital All captials in Germany
XPath Conclusion XPath offers basics navigation and selection features However it is no complete XML Query Language No joins possible
Table of Contents XML Database Overview XML Database Example XPath XML-QL XQuery Storing of XML Databases Relational DB vs. XML XML based Systems
XML-QL Early proposal for XML Query language Structure: <Selection part> <construction part> WHERE #### IN #### CONSTRUCT #### Result : XML Document Selection Part : conditions for finding Construction Part : way of creating an XML document Structure : like SQL : select #### from #### where #### only the other way round
XML-QL Example WHERE <country car_code=$id> <name>$name</> </> IN “…/europe.xml“ CONSTRUCT <country car_code=$id name=$name</> <result> <country car_code=“D” name=“Germany”></> <country car_code=“F” name=“France”></> ….. </result> $id und $name are bonded to the car_code attribute and the content of the name element For every variable bounding a new country element ist created
XQuery XQuery should extend functionality of XML-QL Design was related to SQL XQueries are of the form : FOR ### LET ### WHERE ### RETURN ### FLWR or Flower Also possible: FOR-IN (FLWR) WHERE … (FLWR) … RETURN … (FLWR)… Extended to XML-QL joins are possible Like XML-QL, Xquery returns a XML decument The basic structure cann be enhanced by putting more variables into the FOR and LET parts Where gives conditions like in SQL Return produces XML document Nested queries are possible
XQuery example Task : find all countires, that have a population > 1 000 000 and have at least 10 cities FOR $c IN document(„europe.xml“) // country LET $cities := $c // city WHERE $c/@population > 1 000 000 AND count($cities) > 10 RETURN <bigcountry population = {$c/@population}> <name>{$c/@name}</name> {$cities} </bigcountry> $c runs over all country elements. For every „$c“ the variable $cities is connected to all cities of $c
XQuery Join example Task : find all pairs of countires and cities, that have the same name FOR $country IN //country, $city IN //city WHERE $country/name/text() = $city/name/text() RETURN <pair name={$country/name/text()} country={$country/@car_code} city={$city/@country}> This is a nested query
XQuery – what is missing? No data manipulation in version 1.0 Raw Data has to be accessed for data manipulation Planned for later versions: Delete Rename Insert Replace What does this mean? Data can only be manipulated, by directly accessing the raw data
Table of Contents XML Database Overview XML Database Example XPath XML-QL XQuery Storing of XML Databases Relational DB vs. XML XML based Systems
Storing of XML Databases First Approach : one CLOB Whole Database stored as value Very easy to implement SQL statements cannot be used for query Second Approach : transformation Transformation to Relations SQL statements can be used High transformation effort Relational Databases!! A Character Large OBject (CLOB) is a varying-length string, measured in bytes, that can be up to 2 gigabytes long. A CLOB is used to store large single-byte character set data such as documents. A CLOB is considered to be a character string.
Relational DB vs. XML The SilkRoute Xperanto Automatic transformation : relations XML Predefined DTD Xperanto Mapping of relational Database to XML Adds XML functionality to DB2
XML based Systems (B2B) Software AG eXcelon Tamino XML platform Storing Development Integreation eXcelon Query interface for XPath Software AG Tamino XML platform Storing Development Integreation
More about XML databases Web & Datenbanken dpunkt.verlag by Erhard Rahm & Gottfried Vossen ISBN : 3-89864-189-9 BA Library : INF G 5100.62
Thanks for your attention THE END Thanks for your attention