2016-04-11 29 views

cevap

4

ait //a/b[c] en az bir c alt öğesi olan tüm b unsurları eşleşir.

Çocukken c olmamasından 0 b unsurların olduğunu iddia ediyorum rağmen: işlemci ilk sayaç bulduktan sonra durdurabilirsiniz emin olur not(//a/b[not(c)]) (yerine count(...) = 0) olarak sorguyu formüle

count(//a/b[not(c)]) = 0 
+0

, sadece seçer:

daha açık olmasını istiyorsanız

(aynı zamanda biraz daha ayrıntılı), bir quantified expression kullanabilirsiniz Durumun – user898465

+0

@ kullanıcı898465 olduğu, güncellendiği. – alecxe

+0

Bu işe yaradı! – user898465

2

-örnek saymak yerine, örnek. Tüm b elemanları AC elemanı olsaydı yine size değil

every $b in //a/b satisfies $b/c 
+0

İyi bir nokta - ancak işlemciler prensip olarak, bir testin "count (...) = 0" formuna sahip olduğu ve iki ifadenizi aynı derlenmiş kodla derledikleri zaman fark edebilirler. Bazılarının olduğuna inanıyorum. –

+0

BaseX'in çalıştığını biliyorum (ve ayrıca Saxon'un da güvende olduğuna eminim), ancak hangi işlemciyi kullandığımı bilmediğim sürece böyle bir optimizasyona güvenmem. Gelişmiş XQuery optimize edicilerden çok daha fazla XQuery uygulaması vardır. ;) –

+1

Oldukça doğru. Ama biliyorsunuz ki, kendim için, çift negatif bataklıkları okuma olasılığındaki programcı zamanındaki maliyet bana göre, bu yüzden bu test sadece söz konusu test tutulacak kadar maddeye dönüşmüşse tekrar tekrar bekliyorum. Jon Bentley'in konuyla ilgili müthiş kitabı tarafından öğretilen [textual-level] optimizasyonunun ilk kuralı şudur: * kesinlikle * yapmazsanız yapmayın. –