1

XML スキーマと、そのスキーマに有効な XML インスタンスがあります。

この XML インスタンスにはいくつかのデータが含まれています。

提供されたスキーマに対して有効に保ちながら、XML インスタンスをさらにデータ (XML インスタンス内の XML 要素ごとの独自のメタデータ) で拡張したいと考えています。

実際の使用例は、XML 経由でデータを取得する独自のコントロールがあり、コントロールのシリアル化に関連する追加のメタデータを保持する新しい XML を生成したいと考えています。

私の解決策のいくつかは、XML をロードした後の 2 番目のパスでロードする「XPath,Mode,Color」のリストを含む別のドキュメントを保持することでした。

もう 1 つの解決策は、ID を XML ノードに追加し、この方法で (XPath を使用する代わりに) 別のドキュメントからノードを参照することでした。

もう 1 つのアイデアは、(要素ごとに私の名前空間にある) 属性をデータ XML インスタンスに何らかの方法で追加することでしたが、問題は、後で再度ロードしようとしたときに、新しい属性を使用して XML を検証するのにおそらく問題があることです。(XML に追加する属性が彼のスキーマで定義されていないため)

この問題のより良い解決策はありますか? どのソリューションに投票しますか? (説明してください。)

ありがとう!

4

1 に答える 1

1

追加のメタデータが一度生成されるのか、それとも保存して後続のロードで使用する必要があるのか​​は、あなたの質問からは明らかではありません。

XSLT を使用して、メタデータを含む新しい XML を生成することを検討してください。新しいデータが単純で元の XML から推測されたものである場合は、XSLT を使用してノードごとにメタデータを簡単に生成できます。予測可能で一貫性がある場合は、データをロードして同じ新しい XML を取得するたびにプロセスを繰り返すことができます。たとえば、XSLT をオンザフライで作成する必要がある場合など、予測できない場合でも、生成された XSL を保存し、それを使用して元の XML から同じ新しい XML を再生成することができます。

提案された解決策ごとに:

  1. XPATH による参照: 元の XML が変更されず、最終的な XPATH を構築できる場合に適しています。
  2. ノード ID による参照: 良いですが、まだ ID を持っていない場合は元の XML に ID を追加する必要があります。また、元の XML が変更された場合は ID を更新する必要があります (したがって、ID を割り当てるために ID カウンターが必要になる場合があります)。 、または生成された GUID を ID として使用します)。
  3. メタデータを元の XML に追加する場合は、スキーマを更新するか、「更新されたドキュメント」用に新しいスキーマを作成します (そして XML ドキュメントのスキーマ参照を変更します)。

よろしく、インバー

于 2009-01-12T19:40:36.490 に答える