我目前正在尝试使用Eclipse Modeling Framework将XML Schema转换为ECore。 EMF提供attributionre ecore:引用来指示应该将属性转换为EReference。但是,这只适用于属性是IDREF或anyURI类型的情况。我的问题是,通过IDREF引用的任何ID必须通过整个XML文档是唯一的。然而,我的XML的结构如下:将XSD转换为ECore
<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-elelemts的ID仅在sourrounding A-元素中是唯一的。因此,如果我将B元素的id声明为类型ID,则解析器将引发错误。
如何判断EMF idref是否属于同一A元素的B元素的属性ID的引用?
你完全正确。事实上,我在我的模式中使用key/keyref。我只是尝试了ID/IDREF来查看EMF会产生什么。但我真正需要的是key/keyref。我已经阅读过关于瞬时引用。你能解释他们是什么吗?如果我正确理解你,我唯一的解决方法是手动编辑生成的代码。这是正确的吗? – mupro
瞬态引用只是一个不会被XML序列化器序列化的引用。是的,解决方案是专门为两个设置者和获取者生成代码。如果你已经解决了引用并且改变了被引用的东西的名字(id),你会希望自动序列化这个新名字吗?你可以尝试的最简单的方法是带有可变假的瞬态引用,所以只有一个getter,没有setter,你可以把所有的逻辑用于解析idref。 –