Görünmeyen Güncellemeler Sorunu¶
Güncellemelerin yalnızca bir betiğin yürütülmesinin sonunda uygulanmasının programlama açısından biri can sıkıcı, diğeri olumlu iki sonucu vardır:
Can sıkıcı sonuç, güncellemelerinizi sonuna kadar görememenizdir; bu nedenle başka değişiklikler yapmak için kendi değişikliklerinizin üzerine inşa edemezsiniz.
Bir örnek: PERSON adlı öğeleriniz olduğunu varsayalım. Bir PERSON öğesinin içinde BID öğelerinden oluşan bir liste (bu kişinin verdiği teklifleri temsil eden) bulunabilir ve BID öğelerini bir BIDS öğesinin içine almak isteyebilirsiniz. Ancak başlangıçta PERSON öğesinin BIDS alt öğesi yoktur.
Başlangıçta:
1 2 3 | |
Şunu eklemek <BID id="b0022">data</BID> ve şu sonucu elde etmek istiyoruz:
1 2 3 4 5 6 | |
Örneğin DOM kullanarak geleneksel yöntemde iki adım izlerdik:
-
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 $personinto /BIDS yönergesi, eşleşen hiçbir düğüm bulamaz $person/BIDS ve dolayısıyla yürütme hatası verir.
Peki bunu doğru yapmanın yolu nedir? İki durumun her biri için kendi kendine yeterli bir çözüme ihtiyacımız var:
1 2 3 4 5 6 | |
Olumlu sonuç ise üzerinde çalıştığınız belgelerin betiğinizin yürütülmesi sırasında kararlı olmasıdır. Üzerinde durduğunuz dalı kesmediğinizden emin olabilirsiniz. Örneğin, rahatça şunu yazabilirsiniz:
1 2 | |
Bu işlem tamamen öngörülebilirdir ve erken sonlanmaz. Ya da sonsuz döngüye girme riski olmadan bir öğeyi kendisinden sonra çoğaltabilirsiniz:
1 2 | |