Temel Özellikler¶
Güncelleme İlkelleri¶
XQuery Update Facility (kısaca XQUF), XML düğümleri üzerinde işlem yapan beş temel işlem sunar::
- ekleme bir veya birkaç düğümü inside/after/before belirtilen bir düğüme
- silme bir veya birkaç düğümü
- değiştirme bir düğümü (öğeyse tüm alt öğeleriyle birlikte) bir düğüm dizisiyle değiştirme.
- değiştirme düğümün içeriğini (alt öğelerini) bir düğüm dizisiyle veya düğümün değerini bir dize değeriyle değiştirme.
- yeniden adlandırma bir düğümü (öğeler, öznitelikler ve işleme yönergeleri için geçerlidir), içeriğini veya özniteliklerini etkilemeden yeniden adlandırma.
Güncelleme İlkellerini Temel Dille Birleştirme¶
Genellikle güncellemek istediğimiz düğümleri seçmek için basit bir sorgu kullanır, ardından bu düğümlere güncelleme işlemleri uygularız. Bu, SQL'deki UPDATE... WHERE... yönergesine benzer.
Örnek 1: Bir belgede doc.xmlbir öğenin altındaki tüm öğeleri yeniden adlandırın: CATEGORY as CATEGORY_NAME:
1 2 | |
Örnek 2: Id özniteliği olan tüm BOOK öğelerinde bu özniteliği, ilk sıradaki bir ID alt öğesiyle değiştirin:
1 2 3 4 5 6 | |
Aşağıdaki parça, bu son komut dizisiyle
1 | |
şuna dönüştürülür:
1 | |
Not¶
İkinci örnekte, silme işleminin **insert node ** işleminden önce mi sonra mı yazıldığı hiç önemli değildir. XQUF'nin bu şaşırtıcı özelliği aşağıda açıklanmaktadır.
5 güncelleme işleminin temel XQuery diliyle birleştirilme biçiminde bazı kısıtlamalar vardır. XQUF, Güncelleme İfadeleri (güncelleme ilkellerini kapsayan) ile güncelleme yapmayan ifadeleri birbirinden ayırır. Güncelleme İfadeleri her yerde kullanılamaz. Bu konu daha ayrıntılı açıklanacaktır.
İşleme modelleri¶
Güncelleme ilkellerini kullanmanın iki temel yolu vardır:
XML veritabanını doğrudan güncelleme:¶
Önceki konudaki örneklerde bir veritabanına ait düğümler seçilir ve ardından güncellenir.
Info
XQUF'deki veritabanı kavramı oldukça geneldir: XML belgelerinden veya iyi biçimlendirilmiş parçalardan (ağaçlardan) oluşan herhangi bir koleksiyonu ifade eder.
XQuery Update, güncelleme işlemlerinin bir veritabanına uygulanma protokolünü kesin olarak tanımlamaz. Bu, uygulamalara bırakılmıştır. Örneğin, belirtimler işlem ve yalıtım konularını ele almaz.
Güncellemelerin, komut dizisi yürütmesi tamamlandığında veritabanına uygulandığı varsayılır. Dil, "apply-updates" işleminin anlamı kesin olarak tanımlanacak, ancak veritabanı uygulamalarının iyileştirme yapmasına mümkün olduğunca fazla alan bırakılacak biçimde tasarlanmıştır.
Dikkat edilmesi gereken noktalar:
- Güncellemeler, güncelleme ifadesi yürütülürken hemen uygulanmaz*. Bunun yerine "Bekleyen Güncelleme Listesi"nde biriktirilir. Yürütmenin sonundaki bir noktada Bekleyen Güncellemeler tek seferde uygulanır ve veritabanı atomik olarak güncellenir.
Dikkat çekici bir sonuç olarak, güncellemeler komut dizisi yürütülürken görünmez; yalnızca yürütme sonrasında görünür. Bu, geliştiriciler için oldukça can sıkıcı olabilir. Ayrıca programlama tarzını da belirgin biçimde etkiler. Bu etkinin örneklerini ve bununla nasıl başa çıkılacağını ileride göreceğiz.
- Aynı ifade aynı anda birden fazla belgeyi güncelleyebilir. Yukarıdaki örnekler, tek bir doc.xml belgesi yerine herhangi bir belge koleksiyonuna uygulanabilir. Örnek:
1 2 | |
Yan etkisiz dönüştürmeler:¶
XQUF'de transform adlı, var olan bir düğümün kopyasını asıl düğümü değiştirmeden güncelleyen ve dönüştürülmüş ağacı döndüren ek bir işlem vardır.
Aşağıdaki örnek, özgün belgeye gerçekten dokunmadan doc.xml'in dönüştürülmüş bir sürümünü oluşturur:
1 2 3 4 5 6 | |
modify yan tümcesinde XQUF'nin, kopyalanan ağaçların özgün sürümünün (burada doc.xml belgesinin kendisi) değiştirilmesini yasakladığını unutmayın; yalnızca kopyalanan ağaçlar değiştirilebilir.
Aşağıdaki ifade hataya neden olur:
1 2 3 4 5 6 7 | |