1

XML ドキュメントのセット (すべて同じスキーマ) でパターンを照合する必要があり、パターンが一致した場合は、コンテンツを取得して特定の変換を行う必要があります。

正規表現に似ていますが、要素と属性を持つ「パターン」のリストがあります。

疑似パターンの例:

(//ELEMENTx) (node())* (//ELEMENTy[@ATTRIBUTEz]) (node())* (//@ATTRIBUTEw)

括弧内のみで XPath 構文を使用しました。他の量指定子を使用できます...

これは、xml が最初の要素として ELEMENTx を持ち、ATTRIBUTEw を持つ 1 つの要素で終わり、その間に ATTRIBUTEz を持つ ELEMENTy を持つ必要がある場合に一致します。

パターンの一部だけでなく、パターン全体に対してドキュメント全体を一致させる必要があることに注意してください。

この場合、要素のネストは問題ではありませんが (ELEMENTy が ELEMENTx の子であるかどうかは関係ありません)、特定の順序である必要があります。

編集: 明確にするために、XML には構文情報を含むツリーがあります。構文パターンを一致させる必要があります。

例:

 
     上  
     / \  
    XY  
    |\ |\  
    1 2 3 4  

一致するパターンは次のようになります (ノード名、属性なしと仮定):
XY
1 * Y
X 3 4
1 * 4


XPath を使用してパターンの個々の部分を取得することはできますが、その場合、順序の感覚が失われます... 2 つの XPath クエリを実行すると、互いに対する結果の位置がわかりません。

照合後、各パターンのルールを作成します。これは、コンテンツに対するいくつかの変換 (変更命令など) を指定します。

XPath または XQuery を使用してこのようなことを行う方法はありますか? DOM を使用してパターン マッチング コードを自分で作成することもできますが、これを行うためのより良い方法が既に存在する可能性があります。

ご指摘ありがとうございます。

4

1 に答える 1

1

XML ドキュメントのセット (すべて同じスキーマ) でパターンを照合する必要があり、パターンが一致した場合は、コンテンツを取得して特定の変換を行う必要があります。

ここまでは、XSLT のかなり適切な説明のように思えます。単一のノードではなく、一連のノードにルールを一致させたいと言うまでは。

ただし、一致させるノードのシーケンスが親ノードの子のシーケンスである場合は、親ノードを一致させるためのルールとしてこれを再キャストできます。

XSLT のパターン マッチング言語は、探しているほど強力ではありませんが、必要に応じて調整できる可能性があります。思いつく 2 つの可能性は、(a) 照合する構造情報を文字列に変換し、正規表現照合を使用して文字列を評価する、または (b) 照合する文法の XSD 複合型定義を記述することです。一致し、XSLT 型による検証機能を (XSLT 3.0 の try/catch と組み合わせて) 使用して、ノードのシーケンスがスキーマ内の名前付き複合型と一致するかどうかをテストします。

于 2012-04-17T07:50:42.500 に答える