BAB
VII
XML DAN DATABASE
Riza Muhammad Nurman, S.Kom
Email : rizaman@eng.ui.ac.id ; rizamn@ymail.com
Sunday, April 22, 2018 Riza Muhammad Nurman 2
CONTENT
 MENGGUNAKAN KLAUSA FOR XML
 PENGGUNAAN KLAUSA OPENXML
 MEMBUAT DOKUMEN XML PADA SQL SERVER
 PENGGUNAAN XQUERY
Sunday, April 22, 2018 Riza Muhammad Nurman 3
MENGGUNAKAN KLAUSA FOR XML
• Dalam SQL Query, data dapat ditampilkan dalam bentuk XML
dengan menggunakan klausa FOR XML.
• FOR XML query memiliki beberapa tipe yang dapat dipilih
bergantung pada bentuk tampilan hasil yang diinginkan.
• Beberapa tipe dari query FOR XML adalah:
– FOR XML RAW
– FOR XML AUTO
– FOR XML PATH
– FOR XML EXPLISIT
Sunday, April 22, 2018 Riza Muhammad Nurman 4
FOR XML RAW
SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID]
,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt]
,[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML RAW
<row PurchaseOrderID="4012" Status="2" EmployeeID="231"
VendorID="29" ShipMethodID="3"
OrderDate="2004-07-25T00:00:00" ShipDate="2004-08-
19T00:00:00" SubTotal="997680.0000"
TaxAmt="79814.4000" Freight="19953.6000"
TotalDue="1097448.0000" />
FOR XML RAW menghasilkan data dalam bentuk atribut yang dikelompokkan
dalam elemen <row>
Sunday, April 22, 2018 Riza Muhammad Nurman 5
<row>
<PurchaseOrderID>4012</PurchaseOrderID>
<Status>2</Status>
<EmployeeID>231</EmployeeID>
<VendorID>29</VendorID>
<ShipMethodID>3</ShipMethodID>
<OrderDate>2004-07-25T00:00:00</OrderDate>
<ShipDate>2004-08-19T00:00:00</ShipDate>
<SubTotal>997680.0000</SubTotal>
<TaxAmt>79814.4000</TaxAmt>
<Freight>19953.6000</Freight>
<TotalDue>1097448.0000</TotalDue>
</row>
SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID]
,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt]
,[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML RAW, ELEMENTS
FOR XML RAW - 2
Sunday, April 22, 2018 Riza Muhammad Nurman 6
<Orders>
<Order>
<PurchaseOrderID>4012</PurchaseOrderID>
<Status>2</Status>
<EmployeeID>231</EmployeeID>
<VendorID>29</VendorID>
<ShipMethodID>3</ShipMethodID>
<OrderDate>2004-07-25T00:00:00</OrderDate>
<ShipDate>2004-08-19T00:00:00</ShipDate>
<SubTotal>997680.0000</SubTotal>
<TaxAmt>79814.4000</TaxAmt>
<Freight>19953.6000</Freight>
<TotalDue>1097448.0000</TotalDue>
</Order>
</Orders>
SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID]
,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt]
,[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML RAW('Order'), ROOT('Orders') , ELEMENTS
FOR XML RAW - 3
Sunday, April 22, 2018 Riza Muhammad Nurman 7
SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID]
,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt]
,[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML RAW('Order'), ROOT('Orders') , ELEMENTS, XMLSCHEMA
FOR XML RAW - 4
Sunday, April 22, 2018 Riza Muhammad Nurman 8
FOR XML AUTO
• FOR XML RAW tidak dapat digunakan jika data yang dihasilkan dari
query tersebut berbentuk nested data
• Perbedaan FOR XML RAW dan FOR XML AUTO akan terlihat jika
query digunakan untuk menampilkan data dari dua tabel yang saling
terhubung
• Contoh :
• query FOR XML AUTO berikut yang digunakan untuk menampilkan
data dari tabel PurchaseOrderHeader dan PurchaseOrderDetail yang
dihubungkan dengan Join
Sunday, April 22, 2018 Riza Muhammad Nurman 9
FOR XML AUTO - 2
SELECT
PO.PurchaseOrderID,PO.Status,PO.EmployeeID,PO.VendorID
,PO.ShipMethodIDPO.OrderDate,PO.ShipDate,PO.SubTotal,PO.TaxA
mt,
PO.Freight,PO.TotalDue,POD.OrderQty,POD.ProductID,POD.UnitPr
ice
FROM Purchasing.PurchaseOrderHeader PO INNER JOIN
Purchasing.PurchaseOrderDetail POD
ON PO.PurchaseOrderID = POD.PurchaseOrderID
WHERE PO.TotalDue > 1000000
FOR XML AUTO, ROOT('Orders')
Sunday, April 22, 2018 Riza Muhammad Nurman 10
FOR XML AUTO - 3
<Orders>
<PurchaseOrderHeader PurchaseOrderID="4012" Status="2"
EmployeeID="231" VendorID="29" ShipMethodID="3"
OrderDate="2004-07-25T00:00:00" ShipDate="2004-08-
19T00:00:00"
SubTotal="997680.0000" TaxAmt="79814.4000"
Freight="19953.6000" TotalDue="1097448.0000">
<PurchaseOrderDetail OrderQty="6000" ProductID="881"
UnitPrice="41.5700" />
<PurchaseOrderDetail OrderQty="6000" ProductID="882"
UnitPrice="41.5700" />
<PurchaseOrderDetail OrderQty="6000" ProductID="883"
UnitPrice="41.5700" />
<PurchaseOrderDetail OrderQty="6000" ProductID="884"
UnitPrice="41.5700" />
</PurchaseOrderHeader>
</Orders>
Sunday, April 22, 2018 Riza Muhammad Nurman 11
FOR XML EXPLICIT
• Opsi EXPLICIT dapat digunakan untuk berbagai macam hal untuk
dapat menghasilkan data dalam format XML
Sunday, April 22, 2018 Riza Muhammad Nurman 12
FOR XML PATH
• FOR XML PATH dapat digunakan untuk menampilkan data dalam
bentuk nested XML yang terdiri dari elemen dan atribut menjadi lebih
mudah
• Contoh  query yang menampilkan kolom PurchaseOrderID, Status
dan EmployeeID dalam bentuk atribut
SELECT [PurchaseOrderID] [@PurchaseOrderID],
[Status] [@Status],[EmployeeID][@EmployeeID],
[VendorID] ,[ShipMethodID],[OrderDate],[ShipDate],
[SubTotal],[TaxAmt],[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML PATH('Order'), ROOT('Orders')
Sunday, April 22, 2018 Riza Muhammad Nurman 13
FOR XML PATH - 2
<Orders>
<Order PurchaseOrderID="4012" Status="2" EmployeeID="231">
<VendorID>29</VendorID>
<ShipMethodID>3</ShipMethodID>
<OrderDate>2004-07-25T00:00:00</OrderDate>
<ShipDate>2004-08-19T00:00:00</ShipDate>
<SubTotal>997680.0000</SubTotal>
<TaxAmt>79814.4000</TaxAmt>
<Freight>19953.6000</Freight>
<TotalDue>1097448.0000</TotalDue>
</Order>
</Orders>
Sunday, April 22, 2018 Riza Muhammad Nurman 14
FOR XML PATH - 3
• FOR XML PATH juga dapat digunakan untuk
mengkontrol nesting document.
• Contoh  menampilkan data dari dua tabel yaitu
PurchaseOrderHeader dan
PurchaseOrderDetail
– data dari tabel PurchaseOrderHeader dituliskan
dalam bentuk atribut
– data dari tabel PurchaseOrderDetail dituliskan
dalam bentuk elemen.
Sunday, April 22, 2018 Riza Muhammad Nurman 15
PENGGUNAAN KLAUSA OPENXML
• Dokumen XML dan isinya dapat disisipkan ke dalam tabel database standar.
• Proses ini terdiri atas tiga tahapan dan biasanya dikenal dengan istilah
shredding
1. Langkah pertama ini dapat dianalogikan
dengan melakukan pemuatan
DOMDOcument object
2. Langkah kedua adalah langkah
memproses dokumen XML
3. Langkah terakhir adalah melakukan
penghapus representasi XML dalam
tabel internal di SQL Server
Sunday, April 22, 2018 Riza Muhammad Nurman 16
PENGGUNAAN KLAUSA OPENXML - 2
• Salah satu keuntungan dari penggunaan OPENXML adalah dapat
digunakan dengan stored procedure yang memiliki parameter dalam
bentuk array.
• Contoh  jika terdapat sebuah aplikasi e-commerce yang
memungkinkan pembeli untuk memilih barang dan jumlah barang
yang ingin dibeli dan menyimpannya dalam sebuah keranjang
pembelian
• Setelah pembeli menyelesaikan proses belanja, maka nilai yang
tersimpan dalam keranjang belanja tersebut perlu dikirimkan ke
sebuah stored procedure agar bisa dilakukan perhitungan.
Sunday, April 22, 2018 Riza Muhammad Nurman 17
PENGGUNAAN KLAUSA OPENXML - 3
Sunday, April 22, 2018 Riza Muhammad Nurman 18
MEMBUAT DOKUMEN XML PADA SQL SERVER
create table dbo.Docs
(
DocID int identity primary key,
XMLDoc XML
)
insert docs
values('<Person><FirstName>Joe</FirstName>
<LastName>Fawcett</LastName></Person>')
Sunday, April 22, 2018 Riza Muhammad Nurman 19
PENGGUNAAN XQUERY
• Data yang memiliki tipe data XML dapat diperlakukan sama seperti
data lainnya, dalam hal pemodifikasian dan juga penghapusan
dengan menggunakan Xquery
• Perintah XQuery biasanya diletakkan sebagai tambahan pada T-SQL.
Sunday, April 22, 2018 Riza Muhammad Nurman 20
PENGGUNAAN XQUERY – MENGHAPUS DATA
DECLARE @myDoc XML
SET @myDoc = '<Person><FirstName>Joe</FirstName>
<LastName>Fawcett</LastName></Person>'
SELECT @myDoc
SET @myDoc.modify(' delete /Person/*[2]')
SELECT @myDoc
Sunday, April 22, 2018 Riza Muhammad Nurman 21
PENGGUNAAN XQUERY – MENAMBAH DATA
DECLARE @myDoc XML
SET @myDoc = '<Person><LastName>Fawcett</LastName></Person>'
SELECT @myDoc
SET @myDoc.modify(' insert <FirstName>Joe</FirstName> as first
into /Person[1]')
SELECT @myDoc
DECLARE @myDoc XML
SET @myDoc = '<Person><LastName>Fawcett</LastName></Person>'
SELECT @myDoc
SET @myDoc.modify('insert <FirstName>Joe</FirstName>
before (/Person/LastName)[1]')
SELECT @myDoc
Sunday, April 22, 2018 Riza Muhammad Nurman 22
PENGGUNAAN XQUERY – MEMODIFIKASI DATA
DECLARE @myDoc XML
SET @myDoc = '<Person><FirstName>Joe</FirstName>
<LastName>Fawcett</LastName></Person> '
SELECT @myDoc
SET @myDoc.modify('replace value of (/Person/FirstName/text())[1]
with "Gillian"')
SELECT @myDoc
XML - Chapter 7 XML DAN DATABASE

XML - Chapter 7 XML DAN DATABASE

  • 1.
    BAB VII XML DAN DATABASE RizaMuhammad Nurman, S.Kom Email : rizaman@eng.ui.ac.id ; rizamn@ymail.com
  • 2.
    Sunday, April 22,2018 Riza Muhammad Nurman 2 CONTENT  MENGGUNAKAN KLAUSA FOR XML  PENGGUNAAN KLAUSA OPENXML  MEMBUAT DOKUMEN XML PADA SQL SERVER  PENGGUNAAN XQUERY
  • 3.
    Sunday, April 22,2018 Riza Muhammad Nurman 3 MENGGUNAKAN KLAUSA FOR XML • Dalam SQL Query, data dapat ditampilkan dalam bentuk XML dengan menggunakan klausa FOR XML. • FOR XML query memiliki beberapa tipe yang dapat dipilih bergantung pada bentuk tampilan hasil yang diinginkan. • Beberapa tipe dari query FOR XML adalah: – FOR XML RAW – FOR XML AUTO – FOR XML PATH – FOR XML EXPLISIT
  • 4.
    Sunday, April 22,2018 Riza Muhammad Nurman 4 FOR XML RAW SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID] ,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt] ,[Freight],[TotalDue] FROM [Purchasing].[PurchaseOrderHeader] WHERE [TotalDue] > 1000000 FOR XML RAW <row PurchaseOrderID="4012" Status="2" EmployeeID="231" VendorID="29" ShipMethodID="3" OrderDate="2004-07-25T00:00:00" ShipDate="2004-08- 19T00:00:00" SubTotal="997680.0000" TaxAmt="79814.4000" Freight="19953.6000" TotalDue="1097448.0000" /> FOR XML RAW menghasilkan data dalam bentuk atribut yang dikelompokkan dalam elemen <row>
  • 5.
    Sunday, April 22,2018 Riza Muhammad Nurman 5 <row> <PurchaseOrderID>4012</PurchaseOrderID> <Status>2</Status> <EmployeeID>231</EmployeeID> <VendorID>29</VendorID> <ShipMethodID>3</ShipMethodID> <OrderDate>2004-07-25T00:00:00</OrderDate> <ShipDate>2004-08-19T00:00:00</ShipDate> <SubTotal>997680.0000</SubTotal> <TaxAmt>79814.4000</TaxAmt> <Freight>19953.6000</Freight> <TotalDue>1097448.0000</TotalDue> </row> SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID] ,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt] ,[Freight],[TotalDue] FROM [Purchasing].[PurchaseOrderHeader] WHERE [TotalDue] > 1000000 FOR XML RAW, ELEMENTS FOR XML RAW - 2
  • 6.
    Sunday, April 22,2018 Riza Muhammad Nurman 6 <Orders> <Order> <PurchaseOrderID>4012</PurchaseOrderID> <Status>2</Status> <EmployeeID>231</EmployeeID> <VendorID>29</VendorID> <ShipMethodID>3</ShipMethodID> <OrderDate>2004-07-25T00:00:00</OrderDate> <ShipDate>2004-08-19T00:00:00</ShipDate> <SubTotal>997680.0000</SubTotal> <TaxAmt>79814.4000</TaxAmt> <Freight>19953.6000</Freight> <TotalDue>1097448.0000</TotalDue> </Order> </Orders> SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID] ,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt] ,[Freight],[TotalDue] FROM [Purchasing].[PurchaseOrderHeader] WHERE [TotalDue] > 1000000 FOR XML RAW('Order'), ROOT('Orders') , ELEMENTS FOR XML RAW - 3
  • 7.
    Sunday, April 22,2018 Riza Muhammad Nurman 7 SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID] ,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt] ,[Freight],[TotalDue] FROM [Purchasing].[PurchaseOrderHeader] WHERE [TotalDue] > 1000000 FOR XML RAW('Order'), ROOT('Orders') , ELEMENTS, XMLSCHEMA FOR XML RAW - 4
  • 8.
    Sunday, April 22,2018 Riza Muhammad Nurman 8 FOR XML AUTO • FOR XML RAW tidak dapat digunakan jika data yang dihasilkan dari query tersebut berbentuk nested data • Perbedaan FOR XML RAW dan FOR XML AUTO akan terlihat jika query digunakan untuk menampilkan data dari dua tabel yang saling terhubung • Contoh : • query FOR XML AUTO berikut yang digunakan untuk menampilkan data dari tabel PurchaseOrderHeader dan PurchaseOrderDetail yang dihubungkan dengan Join
  • 9.
    Sunday, April 22,2018 Riza Muhammad Nurman 9 FOR XML AUTO - 2 SELECT PO.PurchaseOrderID,PO.Status,PO.EmployeeID,PO.VendorID ,PO.ShipMethodIDPO.OrderDate,PO.ShipDate,PO.SubTotal,PO.TaxA mt, PO.Freight,PO.TotalDue,POD.OrderQty,POD.ProductID,POD.UnitPr ice FROM Purchasing.PurchaseOrderHeader PO INNER JOIN Purchasing.PurchaseOrderDetail POD ON PO.PurchaseOrderID = POD.PurchaseOrderID WHERE PO.TotalDue > 1000000 FOR XML AUTO, ROOT('Orders')
  • 10.
    Sunday, April 22,2018 Riza Muhammad Nurman 10 FOR XML AUTO - 3 <Orders> <PurchaseOrderHeader PurchaseOrderID="4012" Status="2" EmployeeID="231" VendorID="29" ShipMethodID="3" OrderDate="2004-07-25T00:00:00" ShipDate="2004-08- 19T00:00:00" SubTotal="997680.0000" TaxAmt="79814.4000" Freight="19953.6000" TotalDue="1097448.0000"> <PurchaseOrderDetail OrderQty="6000" ProductID="881" UnitPrice="41.5700" /> <PurchaseOrderDetail OrderQty="6000" ProductID="882" UnitPrice="41.5700" /> <PurchaseOrderDetail OrderQty="6000" ProductID="883" UnitPrice="41.5700" /> <PurchaseOrderDetail OrderQty="6000" ProductID="884" UnitPrice="41.5700" /> </PurchaseOrderHeader> </Orders>
  • 11.
    Sunday, April 22,2018 Riza Muhammad Nurman 11 FOR XML EXPLICIT • Opsi EXPLICIT dapat digunakan untuk berbagai macam hal untuk dapat menghasilkan data dalam format XML
  • 12.
    Sunday, April 22,2018 Riza Muhammad Nurman 12 FOR XML PATH • FOR XML PATH dapat digunakan untuk menampilkan data dalam bentuk nested XML yang terdiri dari elemen dan atribut menjadi lebih mudah • Contoh  query yang menampilkan kolom PurchaseOrderID, Status dan EmployeeID dalam bentuk atribut SELECT [PurchaseOrderID] [@PurchaseOrderID], [Status] [@Status],[EmployeeID][@EmployeeID], [VendorID] ,[ShipMethodID],[OrderDate],[ShipDate], [SubTotal],[TaxAmt],[Freight],[TotalDue] FROM [Purchasing].[PurchaseOrderHeader] WHERE [TotalDue] > 1000000 FOR XML PATH('Order'), ROOT('Orders')
  • 13.
    Sunday, April 22,2018 Riza Muhammad Nurman 13 FOR XML PATH - 2 <Orders> <Order PurchaseOrderID="4012" Status="2" EmployeeID="231"> <VendorID>29</VendorID> <ShipMethodID>3</ShipMethodID> <OrderDate>2004-07-25T00:00:00</OrderDate> <ShipDate>2004-08-19T00:00:00</ShipDate> <SubTotal>997680.0000</SubTotal> <TaxAmt>79814.4000</TaxAmt> <Freight>19953.6000</Freight> <TotalDue>1097448.0000</TotalDue> </Order> </Orders>
  • 14.
    Sunday, April 22,2018 Riza Muhammad Nurman 14 FOR XML PATH - 3 • FOR XML PATH juga dapat digunakan untuk mengkontrol nesting document. • Contoh  menampilkan data dari dua tabel yaitu PurchaseOrderHeader dan PurchaseOrderDetail – data dari tabel PurchaseOrderHeader dituliskan dalam bentuk atribut – data dari tabel PurchaseOrderDetail dituliskan dalam bentuk elemen.
  • 15.
    Sunday, April 22,2018 Riza Muhammad Nurman 15 PENGGUNAAN KLAUSA OPENXML • Dokumen XML dan isinya dapat disisipkan ke dalam tabel database standar. • Proses ini terdiri atas tiga tahapan dan biasanya dikenal dengan istilah shredding 1. Langkah pertama ini dapat dianalogikan dengan melakukan pemuatan DOMDOcument object 2. Langkah kedua adalah langkah memproses dokumen XML 3. Langkah terakhir adalah melakukan penghapus representasi XML dalam tabel internal di SQL Server
  • 16.
    Sunday, April 22,2018 Riza Muhammad Nurman 16 PENGGUNAAN KLAUSA OPENXML - 2 • Salah satu keuntungan dari penggunaan OPENXML adalah dapat digunakan dengan stored procedure yang memiliki parameter dalam bentuk array. • Contoh  jika terdapat sebuah aplikasi e-commerce yang memungkinkan pembeli untuk memilih barang dan jumlah barang yang ingin dibeli dan menyimpannya dalam sebuah keranjang pembelian • Setelah pembeli menyelesaikan proses belanja, maka nilai yang tersimpan dalam keranjang belanja tersebut perlu dikirimkan ke sebuah stored procedure agar bisa dilakukan perhitungan.
  • 17.
    Sunday, April 22,2018 Riza Muhammad Nurman 17 PENGGUNAAN KLAUSA OPENXML - 3
  • 18.
    Sunday, April 22,2018 Riza Muhammad Nurman 18 MEMBUAT DOKUMEN XML PADA SQL SERVER create table dbo.Docs ( DocID int identity primary key, XMLDoc XML ) insert docs values('<Person><FirstName>Joe</FirstName> <LastName>Fawcett</LastName></Person>')
  • 19.
    Sunday, April 22,2018 Riza Muhammad Nurman 19 PENGGUNAAN XQUERY • Data yang memiliki tipe data XML dapat diperlakukan sama seperti data lainnya, dalam hal pemodifikasian dan juga penghapusan dengan menggunakan Xquery • Perintah XQuery biasanya diletakkan sebagai tambahan pada T-SQL.
  • 20.
    Sunday, April 22,2018 Riza Muhammad Nurman 20 PENGGUNAAN XQUERY – MENGHAPUS DATA DECLARE @myDoc XML SET @myDoc = '<Person><FirstName>Joe</FirstName> <LastName>Fawcett</LastName></Person>' SELECT @myDoc SET @myDoc.modify(' delete /Person/*[2]') SELECT @myDoc
  • 21.
    Sunday, April 22,2018 Riza Muhammad Nurman 21 PENGGUNAAN XQUERY – MENAMBAH DATA DECLARE @myDoc XML SET @myDoc = '<Person><LastName>Fawcett</LastName></Person>' SELECT @myDoc SET @myDoc.modify(' insert <FirstName>Joe</FirstName> as first into /Person[1]') SELECT @myDoc DECLARE @myDoc XML SET @myDoc = '<Person><LastName>Fawcett</LastName></Person>' SELECT @myDoc SET @myDoc.modify('insert <FirstName>Joe</FirstName> before (/Person/LastName)[1]') SELECT @myDoc
  • 22.
    Sunday, April 22,2018 Riza Muhammad Nurman 22 PENGGUNAAN XQUERY – MEMODIFIKASI DATA DECLARE @myDoc XML SET @myDoc = '<Person><FirstName>Joe</FirstName> <LastName>Fawcett</LastName></Person> ' SELECT @myDoc SET @myDoc.modify('replace value of (/Person/FirstName/text())[1] with "Gillian"') SELECT @myDoc