Vortrag

Werbung
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.
Herunterladen