Eclipse& EMF - 元素的子元素也可作为属性显示

时间:2013-01-10 11:06:09

标签: eclipse xsd schema emf ecore

我对EMF有一些问题

<xs:complexType name="SomeElement">
    <xs:sequence>
        <xs:element name="SomeContents" type="cfg:SomeContents" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="SomeContents" abstract="true">
</xs:complexType>

基本上在上面给出的示例中,SomeElement应该只有子节点但根本没有属性。不幸的是,这不起作用,并且所有可能的子项也显示为属性(无法编辑它们)。代码几乎是由Eclipse生成的,所以我相信schema或ecore文件可能有问题。

<eClassifiers xsi:type="ecore:EClass" name="SomeElement">
    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
      <details key="name" value="SomeElement"/>
      <details key="kind" value="elementOnly"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EReference" name="SomeContents" lowerBound="1"
        eType="#//SomeContents" containment="true" resolveProxies="false">
      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
        <details key="kind" value="element"/>
        <details key="name" value="SomeContents"/>
        <details key="namespace" value="##targetNamespace"/>
      </eAnnotations>
    </eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="SomeContents" abstract="true">
    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
      <details key="name" value="SomeContents"/>
      <details key="kind" value="empty"/>
    </eAnnotations>
</eClassifiers>

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我相信,您必须在生成器模型中更改某些内容,而不是更改源模式。

打开您的genmodel,并查找作为子元素错误显示的属性。然后,在“属性”视图中,查找“编辑”类别,并检查以下设置:

  • 儿童
  • 创建孩子
  • 物业类型

我相信,当您初始化生成器模型时,这些设置是以错误的方式生成的,并且它们正在控制树编辑器的子行为。