Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Corso di Complementi di Informatica MS SQL Server Supporto XML Prof. Pasquale Basile pabasile@unina.it HTTP e SQL Server Accesso HTTP verso SQL Server per SELECT, INSERT, DELETE, DDL OpenXML Espone XML come se fossero dati relazionali Updategrams Update SQL Server tramite HTTP SQL Server Over HTTP: Setup L accesso è effettuato mediante filtri ISAPI DLL e OLE DB Provider Un apposita utility MMC (plug in) permette la configurazione delle directory virtuali di IIS con gli opportuni filtri ISAPI
XML 101 Attributo dichiarazione XML <?xml version="1.0"?> <Order o_id="7845" o_date="1999-02 02-01"01" o_cur="usd" c_id="jantoy" > <ShippingAddress sa_city="erie" sa_state="pa" sa_pcode="19130"> Elemento <Line l_text="jan's Toys" /> <Line l_text="1818 Market Street" /> Elemento vuoto <Line l_text="3rd Floor, Room 1219" /> </ShippingAddress ShippingAddress> <OrderDetails> <Item p_id="325" p_name="whirlygig Whirlygig" od_qty="5" od_unitp="15.50" /> <Item p_id="326" p_name="zapper" od_qty="2" od_unitp="10.25" /> <Item p_id="327" p_name="whirlygig Whirlygig" od_qty="5" od_unitp="15.50" /> </OrderDetails OrderDetails> <Comments> Start-tag This order replaces order 7844 which was cancelled by the customer. </Comments> </Order> End-tag Contenuto Elemento Root XML in SQL Server 2000 SQL Server produce e consuma documenti XML HTTP GET/POST i documenti XML possono essere passati come testo o manipolati tramite S.P. Query XML Supporto schemi XDR Supporto elaborazione XSL server-side XML Web Updategrams Retrieving and Writing XML Data Istruzioni T-SQL per XML clausola FOR XML modalità RAW, AUTO e EXPLICIT keywords TAG e PARENT OpenXML Funge da rowset provider a partire da documenti XML Permette di macinare documenti XML per INSERT UPDATE DELETE dati in tabelle Utilizza due S.P. di sistema sp_xml_preparedocument sp_xml_removedocument
SELECT FOR XML SELECT statement ::= < query_expression > [ FOR XML { RAW AUTO EXPLICIT } [, XMLDATA ] [, ELEMENTS ] [, BINARY base64 ] ] RAW RAW Ogni riga risultante dalla query viene trasformata in un elemento XML con una tag generica <row />. AUTO Ritorna un semplice albero XML. Ogni tabella (FROM) con almeno una colonna in SELECT è rappresentata come un elemento XML. Le colonne in SELECT sono mappate nel corrispondente elemento attributo. EXPLICIT L albero XML risultante è definito esplicitamente. Con questa modalità le query devono essere scritte in modo particolare al fine di specificare esplicitamente le informazioni addizionali sulla struttura. OpenXML OpenXML fornisce una vista rowset a partire da un documento XML. Essendo OPENXML un rowset provider, può essere usato negli statement T-SQL, come INSERT o UPDATE, al posto di una tabella, view o altri provider (come OPENROWSET).
Stored Procedures per OpenXML sp_xml_preparedocument Legge il testo XML in input, lo analizza con il parser MSXML (Msxml2.dll) e fornisce il documento analizzato in uno stato pronto per essere consumato. Questo documento è una rappresentazione ad albero dei vari nodi (elementi, attributi, text, commenti,...) nel documento XML. OPENXML, come detto, traduce questo documento XML in un rowset utilizzabile in T-SQL. sp_xml_preparedocument hdoc OUTPUT [, xmltext] [, xpath_namespaces] OpenXML OPENXML(idoc int [in],rowpattern nvarchar[in],[flags byte[in]]) [WITH (SchemaDeclaration TableName)] HTTP SQL Server Architecture Browsers Applications IIS I S A P I OLE/DB (SQLOLEDB) SQL Server 2000 DB DB Client Middle Tier SQL Server
Accessing SQL Server through a URL Interfacce HTTP URL query Query T-SQL embedded in una URL Template query Query T-SQL embedded in un documento XML Query XPath Querie definite mediante schemi XDR Query DBObject Fanno riferimento ad oggetti di database Utilissime per il recupero di BLOB s Accesso mediante URL URL Query http://server/virtualroot?sql= Template http://server/virtualroot/vname/tname?parametri XML View http://server/virtualroot/vname/nomeschema/xpath?parametri Query diretta http://server/virtualroot/vname/dbobjectname/xpath Setup: directory virtuale
Setup: directory virtuale Setup: nomi virtuali