如何在EMF Ecore中映射xs:any?

时间:2016-02-08 14:05:01

标签: xsd eclipse-emf-ecore

我在xsd中有以下类型:

<xs:complexType name="VendorSpecificType">
    <xs:sequence>
        <xs:any namespace="##any" processContents="skip" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

我在Ecore中创建了这个类型:

Ecore type

我尝试注入包含以下标记的xml:

<VendorSpecific>
    <Vendor ID="1"/>
</VendorSpecific>

但它崩溃了

org.eclipse.m2m.atl.core.ATLCoreException: Error loading test.xml: org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'Vendor' not found.

用于在元模型中注入模型的代码已经过测试和运行。 如果删除Vendor标记,甚至可以正确加载此test.xml。

我的问题是如何将xsd any映射到ecore类型,以便可以加载?

更新:

调试后,似乎我用来将模型注入ecore模型的代码不完整:extendedmetadata始终为null

// Load in metamodel
IReferenceModel metamodel = modelFactory.newReferenceModel();
injector.inject(metamodel, metamodelPath);

model = modelFactory.newModel(metamodel);
injector.inject(model, modelPath);

如何告诉它加载元数据?

1 个答案:

答案 0 :(得分:0)

我添加了以下行

((EMFModelFactory) modelFactory).getResourceSet().getLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);

在注入元模型之前。

现在有效!