1

我目前正在尝试使用 Eclipse 建模框架将 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,解析器将抛出错误。

如何告诉 EMF idref 是对属于同一个 A 元素的 B 元素的属性 id 的引用?

4

1 回答 1

3

如果 XML 模式确实使用 ID 和 IDREF,那么您显示的实例对于该模式无效。这不是问题吗?它更像是一个 key/keyref,Ecore 也不支持。

如果归根结底是想要一个可以读取和写入此类实例的 Ecore 模型,我将定义一个idref只是字符串的属性并定义resolvedRefA 类型的瞬态引用,然后我会修改 getter 和 setter,以便每个都从其他。即,当您调用 时getResolvedRef,它会检查该字段是否为空,如果该字段idref有值,它将遍历模型进行解析(在适当的范围内查找该名称)并将其存储在该字段中.

以合理的方式为 getter 和 setter 定义相互推导有点棘手,但它应该是可能的。

于 2013-01-17T13:09:34.873 回答