XML Data in MS SQL Server Query and Modification Steven Blundy, Duc Duong, Abhishek Mukherji, Bartlett Shappee CS561
Outline Introduction XML Data Type Structure and storage Schema, validation Methods Publishing FORXML Queries
Approaches for XML integration to DB Mid-tier Bi-directional XML view Query view using XPath Schema-driven approach for shredding Server-side rowset-to-XML aggregator for XML Publishing - FOR XML Query-driven shredding mechanism- Open XML
SQL SERVER 2005 XML Architecture
XML Storage - Native Checks Well Formedness Validation is optional XML Documents or Fragments
XML Storage - DB SQL BLOB Allows for utilization BLOB optimizations Streaming Parsing Compression Unicode (UTF-16) Strings - UNTYPED Requires Conversion XML Schema - TYPED Encode to match schema Much more efficient
XML Storage - The Numbers Advantages of Binary Storage 20 to 30% Size Reduction Faster Limitations 2gb of stored binary per instance Hierarchy is limited to 128 Levels
Storage - Schema Storage Optimization Size Processing Uses the XML Infoset Defined in an XMLSchemaCollection
Validation - Schema XML Schema Collection Stores 1+ XML Schemas Identified by Name Space Not the Same as Constraints (No Business Logic) Metadata Entity Certain Type are Format Constrained i.e. Date must use ISO 8601 format Uses the XML Infoset
Validation - Schema Collection CREATE XML SCHEMA COLLECTION myCollection AS '<xsd:schema xmlns:xsd=" xmlns=" elementFormDefault="qualified" targetNamespace=" '
Validation - How? At Data Entry Validness checked when typed data is inserted Checking Data Applied using Cast Updated Schema Does not Require re-validation
XML DT Methods All evaluate an XQuery Methods query() - returns XML output exists() - checks if expression results in nodes nodes() - returns XML DT values value() - returns value as SQL DT modify() - modify XML data
query() & nodes() methods Both take XQuery string query() returns list of untyped XML nodes Can be converted to strings For SELECT output nodes() returns list of typed XML nodes All XML DT methods available count(*) works No converting to strings
exist() & value() methods exist() returns true if XQuery returns any nodes value() Takes 2 params: an XQuery & a SQL DT Converts xml value returned by XQuery to specified SQL type
Example: value() SELECT data.value(‘(/bibliograph/book/[1]/title)[1]’, ‘NVARCHAR(255)’) AS Title FROM Test Title Design Patterns
Example: value() w/ nodes() SELECT book.value(‘(title)[1]’, ‘NVARCHAR(255)’) AS Title FROM Test CROSS APPLY data.nodes(‘/bibliograph/book’) AS R(book) Title Design Patterns All about XML …
Example: exist() SELECT book.value(‘(title)[1]’, ‘NVARCHAR(255)’) AS Title FROM Test CROSS APPLY data.nodes(‘/bibliograph/book’) AS R(book) WHERE data.exist(‘/bibliograph/book’) = 1 Title Design Patterns All about XML …
modify() method Uses extended XQuery insert, delete, and replace keywords Used in SQL UPDATEs
Example: modify() UPDATE docs SET xCol.modify(‘ insert Background after
Example 2: modify() UPDATE XmlCatalog SET Document.modify (' declare namespace bk = " replace value of (/bk:bookstore/bk:book 0"]/bk:price)[1] with 49.99')
XML Publishing select CustomerID as City as "address/city", PostalCode as "address/zip", ContactName as "contact/name", Phone as "contact/phone", from Customers for xml path('Customer'), root('Doc')
Additional Papers Used XML Support in Microsoft SQL Server 2005 Shankar Pal, Mark Fussell, and Irwin Dolobowsk XML Best Practices for Microsoft SQL Server 2005 Shankar Pal, Vishesh Parikh, Vasili Zolotov, Leo Giakoumakis, Michael Rys us/library/ms345115(d=printer).aspx us/library/ms345115(d=printer).aspx
Questions