私は、次のCTSの検索クエリを持っている:CTSとxPathの両方が必要ですか?
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 :)
は、私はいくつかの親の修飾子だけでなく、子供たちに修飾子を持っています。私が望む最終的な結果はただの子供です。あなたは上から見ることができるよう、そのためには、私が持っている:同じ基準ロジックによって子どもを除外し、+子供基準
- 検索上記のように
これはうまくいきますが、私は子供のxPathで行うのと同じ論理をcts:クエリで持たなければなりません。ロジックは不必要に重複しています。
上記のサンプルのように、私はcts:クエリでこれをすべて実行でき、xPath式を追加する必要はありませんか?
これは私が欲しいものに似ていますが、それはコメントで指定された問題のために動作しません:
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')
))
)
これは私のためには機能しません。検索可能な式として '/ parent'があると、私は親をcts:searchから戻します。検索可能な式として '/ parent/child'を入れると、何も戻ってこない。 cts:クエリ自体は決して変更されず、私が変更しているのは検索可能な式だけです。私は '/ parent/child'を持っていても動作しません。私の前提は、検索可能な式(?)の下にないので、親の最初の要素属性値のクエリはすべてをスローします。 – CtheGood
更新wstをお寄せいただきありがとうございます。ロジックを簡単に逆にして、cts:searchから親を取得し、xPathを使って子をフィルタリングすることもできます。あなたが子供をフィルタリングしたところでは、私の場合、実際には親よりも具体的であるため、実際には高速になります。私はまだctsのすべてを解決することを望んでいました(純粋に文体的な理由で検索しますが、おそらく不可能です)。計算コストは、xPath式によるフィルタリングの場合と同じように、cts:検索のフィルタリングと同じですか? – CtheGood
は、CTSを作り、計算上の@CtheGood:検索が可能と重労働の多くを行う最善の戦略です。返すことができるすべての結果*は、インデックスのみを使用して解決されるため、非常に高速になります。あなたはCTSを経由してフィルタリングを使用する必要がある場合:検索または手動でのXPathを経由して、データベースを1に持っている)、それはかもしれないより多くの文書を選択し、それ以外の場合は2)フィルタリングを実行するためにメモリにロードします。どのように元を最大化し、後者を最小限にするための一般的なルールはありません - それはちょうどあなたの文書に依存するため、異なるアプローチをテストすることは、あなたが行うことができますについてのすべてです。 – wst