Ana içeriğe geç

Sıralama ve Çakışmalar

"Bekleyen Güncellemeler" mekanizmasının bir başka sonucu da güncellemelerin belirtilme sırasının önemli olmamasıdır. Aşağıdaki örnekte, Id özniteliğini (şununla gösterilen $idattr), ardından $idattreklemek için /.. (üst ITEM öğesi) kullanmakta hiçbir sakınca yoktur! Önce ekleyip sonra silebilirsiniz de.

1
2
3
4
5
for $idattr in doc("data.xml")//ITEM/@Id   (: selection :)
return (                                   (: updates :)
   delete node $idattr,
   insert node <ID>{string($idattr)}</ID> as first into $idattr/..
)

Ancak bunun sonucunda bazı çakışan değişiklikler öngörülemeyen sonuçlar doğurabilir. Örneğin, aynı düğümde iki kez yeniden adlandırma işlemi çakışır; çünkü hangi sırayla uygulanacaklarını bilemeyiz. Diğer belirsiz işlemler: aynı düğüm üzerinde iki kez * replace işlemi ve aynı düğümün değerini veya içeriğini iki kez değiştirme* işlemi.

XQUF belirtimleri, bu tür belirsiz güncellemeleri yasaklar. Böyle bir çakışma algılandığında güncellemeleri uygulama aşamasında hata oluşturulur.

Biraz ironik biçimde, anlamsız ancak belirsiz olmayan çakışmalarda hata oluşturulmaz; örneğin aynı düğümü hem yeniden adlandırmak hem de silmek gibi (delete node diğer işlemlere göre önceliklidir).