3

公式ドキュメントhttp://docs.basex.org/wiki/Commands#String_Syntaxを使用していますが、論理演算子のリストを見つけることができませんでした。クエリできるようにしたいtext contains 'A' or 'B'

これらの同じ方針に沿って、返される結果の数を制限する方法も理解しようとしています。また、BaseXでリレーションテーブルを作成するための優れたガイドを見つけようとしています。

これが私が取り組んでいることです....私は'または'を実行する方法を理解しましたが、さまざまなターゲットの変数を渡す方法をまだ理解していません。

let $items := ('Creditcard', 'Money order')
for $item score $s in doc('xmark')//item
  [payment contains text "$items" using stemming using case sensitive]
order by $s descending
return <item ranking= '{ $s }'>{ $item/payment/text() }</item>

-編集-

次に、既存の回答に基づいたこのコードを見てみましょう。

let $items := ('Creditcard', 'Money order')
for $item in descendant::*:$item | descendant-or-self::*[text() contains text "$item"] | .//item//payment[descendant-or-self::node()/@*:lang = "bnt"][descendant-or-self::node()/@*:lang = "afr"][descendant-or-self::node()/@*:lang = "eng"][descendant-or-self::node()/@*:lang = "chi"]
return <payment>{ .//item//payment/text() }</payment>
       <buyer_name>{ .//item//buyer/text() }</buyer_name>

-編集-

別の試み:

let $list := doc('xmark')
return for $p in $list/payments/item/payment-method[text() = 'Creditcard']
return $p//text()

0の結果を返します。テキストから「支払い方法」の値である「クレジットカード」を取得しようとしています。基本的に、一貫性のある、または成功した例を見つけることができませんでした。

-編集-

最近の試みは非常に近いです。ただし、BaseXサンプルデータベースではなく、実際にアクセスしようとしているデータベースに適用すると、特別なブランドのエラーが発生します。

http://basex.org/products/live-demo/経由

doc('test'):=

<item>
<item_number>1171270</item_number>
<seller_info>
<seller_company_id>6356</seller_company_id>
<seller_rating>C31</seller_rating>
<seller_rating>T150 hr.</seller_rating>
</seller_info>
<product_info>
<unit>2022</unit>
<sinfo>55 cases</sinfo>
<sinfo>Yu-gi-oh trading card pack</sinfo>
<sinfo>.45kg per unit</sinfo>
<sinfo>24.7500kg shipment</sinfo>
</product_info>
<product_info>
<unit>9291</unit>
<sinfo>7 units</sinfo>
<sinfo>Naruto, Classic, action figure</sinfo>
<sinfo>1.8kg per unit</sinfo>
<sinfo>12.6kg shipment</sinfo>
</product_info>
</item>

0:独自のクエリを作成します...:=

let $doc := doc('test') 
for $v in $doc//item
where contains($v//seller_rating,'C31')
return $v//product_info/sinfo

戻り値:

Error:
Stopped at line 3, column 39: [XPTY0004] Single item expected, (element seller_rating { ... }, element seller_rating { ... }) found.

このような問題に遭遇することを予期していなかったとは言えません。残念ながら、私はXMLドキュメントをフォーマットしませんでした。このように、すべてひどくフォーマットされています。これが、(再構築するために)アクセスしようとしている理由の一部です。 次の質問:「XQueryで同じノードを持つ値をターゲットにするにはどうすればよいですか?」

4

1 に答える 1

2

これはあなたの質問に最もよく似ています。

let $results := 
( (: Prepare a sequence of results for each $keyword in $keywords :)
let $keywords := ('Money order', 'Creditcard', 'Personal Check')
for $keyword in $keywords
  (: see http://docs.basex.org/wiki/Full-Text#Scoring for information regarding
  scores :)
  for $item score $s in doc('xmark')//item[
    payment contains text {$keyword} all words using stemming using case sensitive
  ]
  order by $s descending
  return <item ranking= '{ $s }'>{ $item/payment/text() }</item>
)
(: now sort and group these results, grouping is done to eliminate duplicate payment
methods that have been matched by two or more keywords :)
for $result in $results
  group by $val := $result/text()
  order by $result[1]/@ranking descending
return $result[1]

それでも、あなたは興味がないかもしれませんがscore、キーワードを含む個別の支払い方法の総数に興味があると思いますが、次のクエリでこれらのデータが提供されます。

let $keywords := ('Cash', 'Personal Check')
for $keyword in $keywords 
return <keyword name="{$keyword}">
{
for $result in //item/payment
  group by $payment-method := $result/text()
  order by count($result) descending
return element {"item"} {
    attribute {"count"} {count($result)},
    $payment-method
  }[. contains text {$keyword} phrase]
}</keyword>

これがあなたの質問に役立ち、答えてくれることを願っています。それ以上の助けを気軽に求められない場合に備えて:)

于 2012-09-15T15:00:14.983 に答える