Converting XSD to ECore



我目前正在尝试用Eclipse建模框架将XML模式转换为ECore。EMF提供了属性ecore:reference来指示一个属性应该被转换成一个引用。但是,这仅在属性为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的引用?

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

如果它只是归结为想要一个Ecore模型,可以读取和写入这样的实例,我将定义一个属性idref,这只是一个字符串,并定义一个瞬态引用resolvedRef类型a,我将修改getter和setter,使每个都从另一个明智地派生。例如,当您调用getResolvedRef时,它将检查该字段是否为空,如果idref的字段有值,它将遍历模型以解析(在适当的范围内查找该名称)并将其存储在字段中。

以一种合理的方式为getter和setter定义相互派生有点棘手,但应该是可能的。

最新更新