1

現在、Eclipse Modeling Framework を使用して XML スキーマを ECore に変換しようとしています。EMF は属性 ecore:reference を提供して、属性を EReference に変換する必要があることを示します。ただし、これは、属性のタイプが IDREF または anyURI の場合にのみ機能します。私の問題は、IDREF を介して参照される ID は、XML ドキュメント全体で一意でなければならないということです。ただし、私の XML には次の構造があります。

<A id="a1">
<B id="b1">
<ref idref="b2" />
</B>
<B id="b2">
<ref idref="b1" />
</B>
</A>

<A id="a2">
<B id="b1">
<ref idref="b2" />
</B>    
<B id="b2">
<ref idref="b1" />
</B>
</A>

B 要素の ID は、周辺の A 要素内でのみ一意です。したがって、B 要素の ID をタイプ ID として宣言すると、パーサーはエラーをスローします。

idref が同じ A 要素に属する B 要素の属性 id への参照であることを EMF に伝えるにはどうすればよいですか?

4

1 に答える 1

3

XML スキーマが実際に ID と IDREF を使用している場合、表示されるインスタンスはそのスキーマに関して有効ではありません。それは問題ではありませんか?これは、Ecore でもサポートされていない key/keyref に似ています。

そのようなインスタンスを読み書きできる Ecore モデルが必要になるだけの場合は、idref単なる文字列の属性を定義し、型 A の一時的な参照resolvedRefを定義し、ゲッターとセッターを変更して、それぞれがから適切に派生するようにします。他の。つまり、を呼び出すとgetResolvedRef、そのフィールドが null かどうかがチェックされ、そのフィールドにidref値がある場合は、モデルをたどって解決し (適切なスコープでその名前を検索)、フィールドに格納します。 .

両方の getter と両方の setter に対して適切な方法で相互派生を定義するのは少し難しいですが、可能であるはずです。

于 2013-01-17T13:09:34.873 に答える