PureXML IBM DB2’nun özgün XML kullanma ve depolama özelliğidir. Query dili, Depolama teknolojisi, İndex alma teknolojisi ve birçok özelliği de vardır. Bu sistem ile XML Dökümanlarının hiyeraşik yapısı bozulmadan saklanması sağlanmıştır.  Hiyearşik yapı bozulmadığı ve döküman yapısına karışılmadığı için Pure(Saf) XML adını almıştır. PureXML ile kodlar daha okunabilir ve kısa olmaktadır.

pureXML sayesinde DB2’da depolanacak XML datayi mevcut hiyeraşik formu ile etkili bir şekilde arama-getirme, ve güncelleme yapılabilmektedir. XML data sorgularında Xquery,SQL veya her ikisinin karışımı kullanılabilir. Sorgu ile birlikte SQL Fonksiyonu XML Data veya XML argumenti geri döndürebilmektedir. Makaledeki tüm komutlar, DB2 Express – C Programının Control Center’ındaki query kısmında uygulanmış-test edilmiştir.

Not: Bu Makaledeki örneklerin tam anlaşılabilmesi için Temel SQL ve Temel XQuery bilgisinin olması gerekmektedir.

Query ve Güncelleştirme

XML sütunlarında depolanan XML dökümanları Query-Sorgu ve güncelleştirmeleri aşağıdaki metodlardan biri ile yapılabilir.

XQuery

Xquery XML dataları yönetme-geri getirme ve değiştirmek için kullanılır. DB2 Database Xquery’nin direk yada SQL aracılığı ile kullanılmasına izin verir.

SQL statements and SQL/XML functions

Birçok SQL cümlesi XML data tipini destekler. Bunun sayesinde database yaratma, sütun satır oluşturma ekleme çıkarma gibi birçok çok kullanılan database operasyonunu XML data ile yapılabilmektedir.

Xquery SQL Query’nin içindede kullanılabilir.

Uygulama development

Java,C++,Visual Basic, PHP gibi Birçok Uygulama geliştirme ortamını ve programlama dilini desteklemektedir.

XML schema repository (XSR)

XML Şema Deposu(The XML schema repository (XSR)) sayesinde XML’in depolantığı XML sütunları ve XML şemalarını kaydedebilir.

Örnekler

 Çalışma 1 : DB2’da XML depolayacak bir tablo oluşturma.

Aşağıdaki Kod’un 1.satırı sayesinde “xmltut” isimli bir database oluşturuyoruz.
2.Satırında o database’ye bağlanıyoruz
3.Satırında “Cid” isimli boş olmayan ve primary key olan bir BIGINT türünden sütun ile XML türünden ismi info olan bir “Customer” isimli tablo oluşturuyoruz.

CREATE DATABASE xmltut
CONNECT TO xmltut
CREATE TABLE Customer (Cid BIGINT NOT NULL PRIMARY KEY, Info XML)

Çalışma2: İndex Yaratma
Dosyamızda Genelde Update Yaparken veya farklı arama sistemlerinde işi kolaylaştıran, sıralayan çok güzel bir sistem.

CREATE UNIQUE INDEX cust_cid_xmlidx ON Customer(Info)
 GENERATE KEY USING XMLPATTERN
 'declare default element namespace "http://posample.org"; /customerinfo/@Cid'
 AS SQL DOUBLE

 Çalışma3 : Tablo’ya Veri Ekleme

Bu Örnekte Tablomuza Cid sütununa ve XML sütununa veri-satır ekleyeceğiz. Klasik SQL sorgusu’na çok benzemektedir.

INSERT INTO Customer (Cid, Info) VALUES (1000,
'<customerinfo xmlns="http://posample.org" Cid="1000">
  <name>Kathy Smith</name>
  <addr country="Canada">
    <street>5 Rosewood</street>
    <city>Toronto</city>
    <prov-state>Ontario</prov-state>
    <pcode-zip>M6W 1E6</pcode-zip>
  </addr>
  <phone type="work">416-555-1358</phone>
</customerinfo>')
NOT: Özelikle İD’ye primary olmasından dolayı dikkat edilmesi gerekiyor.
SELECT * from Customer

kodu ile de O anda tablonuzda olan değerleri görebilirsiniz (Ekran Görüntüm Aşağıdadır)

Çalışma4: Update- Veri Güncelleştirme

Bu kod aracılığı ile bir satırımızı güncelleştireceğiz

UPDATE customer SET info =
'<customerinfo xmlns="http://posample.org" Cid="1002">
  <name>Jim Noodle</name>
  <addr country="Canada">
    <street>1150 Maple Drive</street>
    <city>Newtown</city>
    <prov-state>Ontario</prov-state>
    <pcode-zip>Z9Z 2P2</pcode-zip>
  </addr>
  <phone type="work">905-555-7258</phone>
</customerinfo>'
WHERE XMLEXISTS (
 'declare default element namespace "http://posample.org";
  $doc/customerinfo[@Cid = 1002]'
  passing INFO as "doc")

Cid’lere dikkat ediniz, tablonuzdkai Cid’ler ile uyumlu olmalıdır Eğer SQL içinde XQuery ile bu işi yapmak isterseniz;

UPDATE customer set info =
  XMLQUERY( 'declare default element namespace "http://posample.org";
  transform
  copy $mycust := $cust
  modify
    do replace $mycust/customerinfo/addr with
      <addr country="Canada">
        <street>25 EastCreek</street>
        <city>Markham</city>
        <prov-state>Ontario</prov-state>
        <pcode-zip>N9C 3T6</pcode-zip>
     </addr>
  return $mycust'
  passing INFO as "cust")
WHERE CID = 1002

Aracılığı ile yapabilirsiniz.

Çalışma 5: Delete Veri silme

DELETE FROM Customer
WHERE XMLEXISTS (
 'declare default element namespace "http://posample.org";
  $doc/customerinfo[@Cid = 1003]'
  passing INFO as "doc")

veya

UPDATE Customer
SET info = XMLQUERY(
   'declare default element namespace "http://posample.org";
    transform
    copy $newinfo := $info
    modify do delete ($newinfo/customerinfo/phone)
    return $newinfo' passing info as "info")
WHERE cid = 1003~
ile yapılabilir.

Çalışma 6: Query-Sorgu

Bu makaledeki en önemli kısım diyebilirz

SQL-Sorgu;

SELECT Cid, Info FROM Customer

ile Genel olarak tüm tabloyu görmemiz-almamız aslında çokta işimize yaramaz, WHERE komutu ile sadece ihtiyacımız olan satırları almamız gerekir.

Filtreleme ve XML Data olarak Geri Alma;

Alttaki Örnek aslında bir fonksiyona da benziyor. Örnekte, Customer tablosunda, City=Toronto olan, Satırdaki $d/name yani name bilgisini <out> içinde return komutu ile geri döndürüyor.

SELECT XMLQUERY (
  'declare default element namespace "http://posample.org";
   for $d in $doc/customerinfo
   return <out>{$d/name}</out>'
   passing INFO as "doc")
FROM Customer as c
WHERE XMLEXISTS ('declare default element namespace "http://posample.org";
   $i/customerinfo/addr[city="Toronto"]' passing c.INFO as "i")

Sonuç: <out xmlns=”http://posample.org”><name>Kathy Smith</name></out> olacaktır

XQuery ile Sorgu;

XQUERY declare default element namespace "http://posample.org";
  for $d in db2-fn:xmlcolumn('CUSTOMER.INFO')/customerinfo
  where $d/addr/city="Toronto"
  return <out>{$d/name}</out>~

Sonuç:

<out xmlns="http://posample.org">
<name>Kathy Smith
</name>
</out>

Yazımı Burada Bitiriyorum. Daha Ayrıntılı bilgi ve Daha Fazla örneği, Kaynakça’da 1.Madde’de ki linkten ulaşabilirsiniz.

Kaynakça

  1. http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=%2Fcom.ibm.db2.luw.xml.doc%2Fdoc%2Fc0023610.html
  2. http://en.wikipedia.org/wiki/PureXML
  3. http://www.developersland.net/index.php/arastirmalar/75-purexml-nedir.html
Reklamlar