XML-Unterstützung durch MS SQL Server Vortrag Nr. 11 im Seminar „XML und Datenbanken“ im SoSe 2008 (Block: 08./09.05.2008) von Mirko Zipfel Übersicht XML und SQL Server 2000 XML und SQL Server 2005 XML als Datentyp Schemata und Indexe XQuery und XML-DML XML und SQL Server 2008 Listen und Vereinigungen, Lax Validation XQuery- und XML-DML-Neuerungen Zusammenfassung Quellen XML und SQL Server 2000 Interface zum Zugriff auf relationale Daten (Import: OpenXML, Export: FOR XML) also nur Mapping möglich XML in DB: CLOB oder BLOB Keine Unterstützung für Validierung oder spezielle Indizierung Client-API: SQLXML Untermenge von XPath 1.0 z.B. keine rekursiven XML-Schemata und Garantie für Element-Reihenfolge XML und SQL Server 2005 XML als Datentyp Schemata und Indexe XQuery und XML-DML XML und SQL Server 2005 XML als Datentyp Einführung des Datentyps „xml“ für Spalten, Variable und Parameter Eigenes internes Format auf Basis von BLOB 2 Arten: untyped und typed XML und SQL Server 2005 XML als Datentyp Untyped XML an kein Schema gebunden, nur allgemeine Komformitätsprüfung kann XML-Dokumente, Fragmente und Texte aufnehmen Bsp.: Create Table docs ( pk int Primary Key, xCol xml not null) XML und SQL Server 2005 XML als Datentyp 5 Methoden mit XQuery-Argumenten 4 lesende: query(): Extraktion von Teildokumenten value(): Extraktion eines Skalars exists(): Existenzprüfung von Knoten nodes(): Knotenextraktion 1 modifizierende: modify(): Änderung von Skalaren, Hinzufügen und Löschen von Teilbäumen XML und SQL Server 2005 XML als Datentyp Bsp. 1: SELECT xCol.query( ‘/doc[@id = 123]//section‘) FROM docs WHERE xCol.exists(‘/doc[@id=123]‘) = 1 XML und SQL Server 2005 XML als Datentyp Bsp. 2: UPDATE docs SET xCol.modify( ‘insert <section num=“2“> <title>Background</title> </section> after (/doc//section[@num=1])[1]‘) XML und SQL Server 2005 XML als Datentyp Typed XML Bindung an Sammlung von XML-Schemata Validierung bei Insert und Update 2 Varianten möglich: Document (nur eine Wurzelelement) Content (mehrere Wurzelelemente möglich) Bsp.: Create Table xmlCat ( id int primary key, doc xml(content myColl)) XML und SQL Server 2005 Schemata und Indexe Schemata für typed XML nötig Ablage in Collections Möglichkeit nachträglich Collection um weitere Schemata zu erweitern XML-Indexe: 2 Arten (primär + sekundär) sowohl auf typed wie untyped möglich Volltext-Index (ignoriert MarkUp-Elemente nur Inhalte werden indiziert) XML und SQL Server 2005 Schemata und Indexe Primärer XML-Index Gruppierter Index auf Basistabelle nötig B+-Baum mit Einträgen für: Elementnamen Attributnamen Knotenwerte Typangaben Knotenreihenfolge Pfad- und Strukturangaben Tagwerte werden durch Integer substituiert Pfadangaben in „reverse order“ (schnelles Auffinden bei vollständig geg. Pfad) XML und SQL Server 2005 Schemata und Indexe Sekundäre XML-Indexe aufbauend auf primären XML-Index 3 Arten für spezielle Anfragen PATH B+-Baum für (path, value) PROPERTY B+-Baum für (PK, path, value) VALUE B+-Baum für (value, path) Weitere Eigenschaften: Tiefe max. 128 Ebenen Werte bis 128 Bytes in Index, sonst interner Verweis Cost-Based Optimizer berücksichtigt auch XML-Indexe XML und SQL Server 2005 Schemata und Indexe Bsp. Primärer XML-Index: Create Primary XML Index idx_xCol on docs (xCol) Bsp. Sekundärer XML-Index: Create XML Index idx_xCol_Path on docs (xCol) USING XML Index idx_xCol FOR PATH Bsp. Volltext-Index auf XML-Spalte: Create Fulltext Catalog ft as Default Create Fulltext Index on dbo.docs (xCol) Key Index PK_docs_7F60ED59 XML und SQL Server 2005 Schemata und Indexe Bsp. Volltext und XQuery kombiniert: SELECT * FROM docs WHERE CONTAINS(xCol, ‘Secure‘) AND xCol.exists( ‘/book/title/text() [fn:contains(.,“Secure“)]‘) = 1 Secure im Titel (per XQuery) und irgendwo im Text (per VT-Index) XML und SQL Server 2005 XQuery und XML-DML Server-seitige Unterstützung für XQuery in T-SQL Untermenge orientiert an Entwurf vom Juli 2004 Untermenge von FLWOR vorhanden Iteration per FOR (F) Knotenprüfung per WHERE (W) Sortierung per ORDER BY (O) Rückgabe der Werte per RETURN (R) XML und SQL Server 2005 XQuery und XML-DML Bsp. XQuery mit FLWOR: SELECT pk, xCol.query( FOR $s in /doc[@id = 123]//section WHERE $s/@num >= 3 RETURN <topic>{data($s/title)}</topic> FROM docs XML und SQL Server 2005 XQuery und XML-DML XQuery-Abfragen mit FLWOR: eigener XQuery-Compiler stellt Unterabfrage-Baum im Abfragebaum der Gesamtabfrage dar WHERE-Klausel für jede Zeile in Tabelle Nutzung der XML-Datentyp-Methoden und Indexe Wenn Bedingung erfüllt Sperre auf Zeile und Auswertung der SELECT-Klausel Sonst überspringen und zu nächster Zeile XML und SQL Server 2005 XQuery und XML-DML XML-DML als Erweiterung zu XQuery für Manipulationen Einfügen / Löschen von Teilbäumen mit Positionsangaben beim Einfügen Einfügen von Attributen, Elemente und Text-Knoten wird unterstützt Ändern von Skalarwerten XML und SQL Server 2005 XQuery und XML-DML Bsp. Preisänderung bei Buch: UPDATE xmlCat SET document.modify (‘ declare namespace bk = “http://myBooks“ replace value of ( /bk:bookstore/bk:book[ @ISBN=“1-861003-11-0“]/bk:price)[1] with 49.99‘) XML und SQL Server 2008 Listen und Vereinigungen, Lax Validation XQuery- und XML-DML-Neuerungen XML und SQL Server 2008 Listen und Vereinigungen, Lax Validation SQL Server 2005: Keine Unterstützung für Vereinigung von List-Typen Größenangabe 1: S, M, L Größenangabe 2: 22, 24, 26 Validierung erst in SQL Server 2008 möglich von: Vereinigungen von List-Typen Listen von Vereinigungstypen XML und SQL Server 2008 Listen und Vereinigungen, Lax Validation Lax Validation SQL Server 2005: Wildcards à la any, anyType, anyAttribute nur durch Angabe skip in Schema validierbar (lax wird nicht verstanden) SQL Server 2008: Angabe lax wird jetzt richtig berücksichtig XML und SQL Server 2008 XQuery- und XML-DML-Neuerungen XQuery: bei FLWOR nun auch LET (L) möglich LET für Variablenzuweisung Bsp.: SELECT @x.query( ‘<Orders> { for $invoice in /Invoices/Invoice let $count := count($invoice/Items/Item) order by $count return <Order>{$invoice/Customer] <ItemCount>{$count}</ItemCount> </Order> } </Orders>‘) Einschränkung: keine Zuweisung von zusammengesetzten Elementen möglich XML und SQL Server 2008 XQuery- und XML-DML-Neuerungen XML-DML-Neuerung: Einfügen von Subbäumen über SQLVariablen möglich (zuvor nur für Auswertung möglich) Bsp.: Declare @newBike xml Set @newBike =‘<Bike>Racing Bike</Bike>‘ Set @productList.modify( ‘insert sql:variable(“@newBike“) as last into (/Products)[1]‘) Zusammenfassung SQL Server 2000: Nur Mapping für Im-/Export SQL Server 2005: XML-Datentyp Submenge von XQuery (nicht normkonformen bezeichnete Methoden) Einschränkungen bei Schemata Keine Vereinigungstypen von Listen, … SQL Server 2008: Gegenüber Version 2005 einige Nachbesserungen Immer noch keine Normkomformität bei: SQL/XML:2006-Typen (nur Untermenge) Nur XQuery-Untermenge und Bezeichnungen wie query statt XMLQUERY, … Quellen Pal, Fussell, Dolobowsky: Microsoft SQL Server 2005 – XML Support in Microsoft SQL Server 2005. Microsoft Corp.: November 2005 (http://download.microsoft.com/download/f/1/c/ f1cf7b8d-7fb9-4b71-a658-e748e67f9eba /XML_Support_in_SQL.doc) Malcolm: Microsoft SQL Server 2008 – What‘s New for XML in SQL Server 2008. Microsoft Corp.: Final Publishing should be in August 2008 (http://download.microsoft.com/download/a/c/d/ acd8e043-d69b-4f09-bc9e-4168b65aaa71 /WhatsNewSQL2008XML.doc) Rys: XML and Relational Database Management Systems: Inside Microsoft SQL Server 2005. SIGMOD 2005, June 14-16, 2005. Baltimore, Maryland, USA. Müller: Verfahren zur Verarbeitung von XML-Werten in SQLAnfrageergebnissen. Abschnitt 2.12.2 – MS SQL Server 2005. Jena, April 2008.