Ecore 派生 XMI インスタンスの参照にはどのようなクエリ/パス言語が使用されますか?
-
18-09-2019 - |
質問
パッケージと相互参照するいくつかのクラスを含む Ecore モデルがあると仮定します。「動的インスタンス」を作成すると、Eclipse は XMI ファイルを生成し、いくつかのクラスをインスタンス化できます。包含関係は、XMI の XML ツリーに直接シリアル化されます ( children
例の要素)。ただし、ツリー内のどこかに既に含まれている要素への参照をインスタンス化すると、エディターは次のようなパス式を作成します。 currentChild
属性:
<parent currentChild="//@parent/@children.1">
<children/>
<children/>
</parent>
私の知る限り、これは XPath ではありません。理由は次のとおりです。
- 」
childrens
" は属性ではなく要素であり、" 経由で参照する必要はありません@
" - XPath は、例えば、
elem[1]
そしてそうではありませんelem.1
たとえばリストの 2 番目の要素を取得するには
それは何ですか? それに関する情報はどこで入手できますか?すでに EMF ページ/仕様を参照しようとしましたが、見つかりませんでした。
解決
これは、EMFフラグメントのパスです。 javadocはこのようにそれを説明します:
文字列org.eclipse.emf.ecore.InternalEObject.eURIFragmentSegment(EStructuralFeature eFeature、EObject eObject) eObjectForURIFragmentSegmentに渡されたとき、このオブジェクトの特定の機能で指定されたオブジェクトを解決します、フラグメントセグメントを返します。
機能引数には、可能な場合には、推測される場合にはnullの場合もあります。デフォルトの結果は次の形式になります:
"@機能名[.INDEX]"
インデックスが唯一の複数の値を持つ機能に使用されます。それは、リスト内の位置を表しています。
パラメータ: このオブジェクトに指定されたオブジェクトに関連する機能、またはnullをeFeature。 識別されるオブジェクトをeObject。 返却値: このオブジェクトの指定された機能で指定されたオブジェクトを解決フラグメントセグメント