Tablo şeklinde oluşturulmuş verilerden karmaşık XML belgeleri oluşturulmak isteniyorsa en iyi kullanılacak araç FOR XML PATH’tir. Çünkü PATH modu XPATH standardının avantajlarını almaktadır. XPATH, XML hiyerarşileri geliştirmek için kullanılan bir W3C standardıdır. XPATH ayrıca XQuery ve XPointer gibi diğer kullanışlı araçları da içermektedir.
Burada kısaca W3C nedir açıklayayım. W3c veya diğer adı ile World Wide Web Consortium (www.w3.org), bir gruptur. Bu grup kimisi ücretli kimisi gönüllü olarak hizmet eden ve internet standartlarını tanımlayan profesyonellerden oluşmaktadır. Standartların tek bir merkezden geliştirilmesi ve belirlenmesi tabi bu aşamada çok önemli, aksi halde istenmeyen durumlar ile karşılaşılabilirdi. İşte XPATH’de bu grup tarafından XML belgeleri oluşturabilmek için geliştirilmiş bir standarttır.
Şimdi PATH kullanımına basit bir örnek verelim. Bunun için AdventureWorks2012 veri tabanı üzerinde çalışıyorum. Production.Product tablosu üzerinde SELECT deyimini kullanarak aşağıdaki gibi kodlarımı yazıyorum.
SELECT p.FirstName, p.LastName, s.Bonus, s.SalesYTD FROM Person.Person p JOIN Sales.SalesPerson s ON p.BusinessEntityID = s.BusinessEntityID FOR XML PATH
Bu sorgumu çalıştırdıktan sonra, Results alanında link şeklinde XML dokümanım oluşur, ilgili linke tıkladığımda XML dokümanımı elde etmiş olurum. Aşağıdaki gibi bir veri elde ediyorum. Hepsini yazmıyorum..
|
Stephen Jiang 0.0000 559697.5639 |
Michael Blythe 4100.0000 3763178.1787 ... ... ...
Linda Mitchell 2000.0000 4251368.5497
Herhangi bir değişiklik olmadan XML PATH ile basit bir şekilde XML dokümanını elde ettik. Burada dikkat edileceği üzere element odaklı bir XML dokümanı mevcut. Her bir satır için bir element üretildi. Tabi daha karmaşık XML dokümanları da elde edebilirsiniz. Bunun içinde aşağıdaki örneği inceleyelim. Burada da attribute odaklı bir XML dokümanı oluşturacağız.
SELECT p.FirstName "@FirstName", p.LastName "@LastName", s.Bonus "Sales/Bonus", s.SalesYTD "Sales/YTD" FROM Person.Person p JOIN Sales.SalesPerson s ON p.BusinessEntityID = s.BusinessEntityID FOR XML PATH
Bu sorgumu çalıştırdıktan sonra, Results alanında link şeklinde XML dokümanım oluşur, ilgili linke tıkladığımda XML dokümanımı elde etmiş olurum. Aşağıdaki gibi bir veri elde ediyorum. Hepsini yazmıyorum..
|
0.0000 559697.5639 |
4100.0000 3763178.1787 ... ... ...
2000.0000 4251368.5497
Bu sorgum aslında WITH deyimi ile birlikte OPENXML ile yapmış olduğumuz sorgulara oldukça benzemektedir.
Şimdi sorgum sonucu elde etmiş olduğum XML dokümanı üzerinde satır adları row olarak listelenmiş durumda. Ben bunları istediğim şekilde değiştirebilirim. Örneğin bunu ürün şeklinde yazacak bir sorgu oluşturalım.
SELECT ProductID "@ProductID", Name "Product/ProductName", Color "Product/Color" FROM Production.Product FOR XML PATH ('Ürün')
Bu sorgumu çalıştırdıktan sonra, Results alanında link şeklinde XML dokümanım oluşur, ilgili linke tıkladığımda XML dokümanımı elde etmiş olurum. Aşağıdaki gibi bir veri elde ediyorum. Hepsini yazmıyorum.
<Ürün ProductID="1">Ürün> <Ürün ProductID="2"> Adjustable Race Ürün> <Ürün ProductID="3"> Bearing Ball Ürün> ... ... BB Ball Bearing
KArmaşık şekilde XML dokümanları oluşturabilmek için en sık tercih edilen metot PATH modudur. Ayrıca doküman üzerinde daha fazla kontrol sağlayabilmektedir, EXPLICIT modu da kontrol sağlar ancak PATH modu EXPLICIT modu gibi karışık değildir.