Aşağıdaki CTS arama sorgusu vardır: çocuklar üzerindekiCTS ve xPath her ikisi de gerekli mi?
cts:search(/parent,
cts:and-query((
cts:element-attribute-value-query(xs:QName('parent'), xs:QName('attr'), 'value'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-1'), 'value-2'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-2'), 'value-3')
))
)/child[@attr-1 eq 'value-2' and @attr-2 eq "value-3"]
(: Returns /parent/child elements matching criteria :)
Ben ebeveyn bazı eleme var, hem de eleme. İstediğim sonuç sadece çocuklar. Yukarıda gördüğünüz gibi, bunu yapmak için, ben sahip olmak: Aynı kriterler mantıkla çocukları süzmek, + çocuk kriterleri
- Arama
Bu, ancak cts'de aynı mantığa sahip olmamız çok aptalca görünüyor: çocuklar için xPath üzerinde yaptığım gibi. Mantık gereksiz yere kopyalanır.
Tüm bunları cts'de yapabilmemin bir yolu var: sorgu, ve yukarıdaki örnekte olduğu gibi ek xPath ifadeleri olması gerekmez mi?
Bu ne istiyorum benzer, ancak yorumların belirtilen sorun için çalışmaz:
cts:search(/parent/child,
cts:and-query((
cts:element-attribute-value-query(xs:QName('parent'), xs:QName('attr'), 'value'), (: The problem is this line... I can't filter by the parent, as it is above the scope of my first parameter (/parent/rule) :)
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-1'), 'value-2'),
cts:element-attribute-value-query(xs:QName('child'), xs:QName('attr-2'), 'value-3')
))
)
Hala arama karşısında bile, veli sorgulayabilir
Bu benim için çalışmıyor. Aranabilir ifadesi olarak/ebeveyne sahip olduğumda, ebeveyni cts: search'den geri alırım. Aranabilir ifadesi olarak/ebeveyni/altkümeyi koyduğumda, geri bir şey alamıyorum. Cts: Sorgu hiç değişmez, tek değişmem aranabilir ifadedir./Ebeveyne/çocuğum olduğunda, işe yaramıyor. Benim varsayımım, üst öğedeki ilk öğe-öznitelik-değer-sorgusudur, herşeyi atar, çünkü aranabilir ifadenin altında değildir (?) – CtheGood
Güncelleme için teşekkürler wst. Ayrıca, mantığı kolayca tersine çevirebilir ve ebeveynleri cts'den yakalayabilirsiniz: arama, ardından xPath kullanarak çocukları filtreleyin. Çocukları filtrelediğiniz yerde, benim durumumda, ebeveynlerden daha özgül olduğu için aslında daha hızlı olacaktır. Yine de (soruya göre) tüm bunları cts'de çözmeyi umuyordum: tamamen stilistik nedenleri araştırmak, ama belki de mümkün değil.Hesaplama maliyeti, bir cts'i filtrelemenin maliyetiyle aynı mıdır: bir xPath ifadesiyle filtreleme için olduğu gibi ara? – CtheGood
@CtheGood Hesaplamalı olarak, cts yapmak: arama, olabildiğince çok ağır kaldırma işlemini en iyi stratejidir. Geri dönebileceği tüm sonuçlar * filtrelenmemiş * sadece dizinler kullanılarak çözülür, böylece çok hızlı olurlar. Eğer cts üzerinden filtrelemeyi kullanmanız gerekiyorsa: XPath ile arama veya manuel olarak veri tabanı 1) daha fazla doküman seçebilir, aksi halde 2) filtrelemeyi gerçekleştirmek için belleğe yükler. İlkeyi nasıl en üst düzeye çıkarmanız ve ikincisini en aza indirmeniz için genel bir kural yoktur - sadece belgelerinize bağlıdır, bu yüzden farklı yaklaşımları test etmek, yapabileceğiniz her şeyle ilgilidir. – wst