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.