Görünmeyen Güncellemeler Sorunu¶
Güncellemelerin yalnızca komut dizisi yürütmesinin sonunda uygulanması programlamayı iki şekilde etkiler: biri can sıkıcı, diğeri olumlu:
Can sıkıcı sonuç şudur: güncellemelerinizi sonuna kadar göremezsiniz; bu nedenle yaptığınız değişiklikleri temel alarak başka değişiklikler yapamazsınız.
Örneğin, PERSON adlı öğeleriniz olduğunu varsayalım. Bir PERSON içinde, bu kişinin verdiği teklifleri temsil eden BID öğelerinden oluşan bir liste bulunabilir ve BID öğelerini bir BIDS öğesi içine almak isteyebilirsiniz. Ancak başlangıçta PERSON öğesinin BIDS alt öğesi yoktur.
Başlangıçta:
1 2 3 | |
Ekleme yaparak <BID id="b0022">data</BID> şunu elde etmek istiyoruz:
1 2 3 4 5 6 | |
Örneğin DOM kullanırken geleneksel olarak iki adımda ilerlerdik:
-
PERSON içinde BIDS öğesi yoksa bir tane oluştur
-
ardından BID öğesini BIDS öğesinin içine ekle
XQuery Update'te bu yanlış biçimde şöyle yazılırdı:
1 2 3 4 5 6 7 | |
Warning
Bunu denemeyin: işe yaramaz! Neden?
Çünkü BIDS öğesi ancak en sonda oluşturulur; bu nedenle insert ... as last into $personyönergesi, eşleşen hiçbir düğüm bulamaz $person/BIDS ve dolayısıyla yürütme hatası verir.
Peki doğru yöntem nedir? İki durumun her biri için kendi başına yeterli bir çözüme ihtiyacımız var:
1 2 3 4 5 6 | |
Olumlu sonuç, üzerinde çalıştığınız belgelerin komut diziniz yürütülürken sabit kalmasıdır. Üzerinde durduğunuz dalı kesmediğinizden emin olabilirsiniz. Örneğin rahatça şöyle yazabilirsiniz:
1 2 | |
Bu tamamen öngörülebilirdir ve vaktinden önce durmaz. Ya da sonsuz döngüye girme riski olmadan bir öğeyi kendisinden sonra çoğaltabilirsiniz:
1 2 | |