270 likes | 417 Views
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
E N D
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.0z.B. keine rekursiven XML-Schemataund Garantie für Element-Reihenfolge
XML und SQL Server 2005 • XML als Datentyp • Schemata und Indexe • XQuery und XML-DML
XML und SQL Server 2005XML 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 2005XML 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 2005XML 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 2005XML als Datentyp • Bsp. 1:SELECT xCol.query(‘/doc[@id = 123]//section‘)FROM docs WHERE xCol.exists(‘/doc[@id=123]‘) = 1
XML und SQL Server 2005XML 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 2005XML 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 2005Schemata 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 2005Schemata 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 2005Schemata 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 2005Schemata 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_Pathon docs (xCol) USING XML Index idx_xCol FOR PATH • Bsp. Volltext-Index auf XML-Spalte:Create Fulltext Catalog ft as DefaultCreate Fulltext Index on dbo.docs (xCol) Key Index PK_docs_7F60ED59
XML und SQL Server 2005Schemata und Indexe • Bsp. Volltext und XQuery kombiniert:SELECT * FROM docsWHERE 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 2005XQuery 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 2005XQuery 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 2005XQuery 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 2005XQuery 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 2005XQuery 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 2008Listen 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 2008Listen und Vereinigungen, Lax Validation • Lax Validation • SQL Server 2005: • Wildcards à la any, anyType, anyAttributenur durch Angabe skip in Schema validierbar (lax wird nicht verstanden) • SQL Server 2008: • Angabe lax wird jetzt richtig berücksichtig
XML und SQL Server 2008XQuery- 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/Invoicelet $count := count($invoice/Items/Item)order by $countreturn <Order>{$invoice/Customer] <ItemCount>{$count}</ItemCount> </Order>}</Orders>‘) • Einschränkung: keine Zuweisung von zusammengesetzten Elementen möglich
XML und SQL Server 2008XQuery- und XML-DML-Neuerungen • XML-DML-Neuerung: • Einfügen von Subbäumen über SQL-Variablen möglich(zuvor nur für Auswertung möglich) • Bsp.: Declare @newBike xmlSet @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 SQL-Anfrageergebnissen. Abschnitt 2.12.2 – MS SQL Server 2005. Jena, April 2008.