如何在 EMF Ecore 中映射 xs:any?
How to map xs:any in EMF Ecore?
我在 xsd 中有以下类型:
<xs:complexType name="VendorSpecificType">
<xs:sequence>
<xs:any namespace="##any" processContents="skip" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
我在 Ecore 中创建了这个类型:
我试图注入包含以下标签的 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.
用于在元模型中注入模型的代码已经过测试并且可以正常工作。
如果我删除供应商标签,即使这个 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);
如何告诉它加载元数据?
我添加了以下行
((EMFModelFactory) modelFactory).getResourceSet().getLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
在注入元模型之前。
现在可以使用了!
我在 xsd 中有以下类型:
<xs:complexType name="VendorSpecificType">
<xs:sequence>
<xs:any namespace="##any" processContents="skip" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
我在 Ecore 中创建了这个类型:
我试图注入包含以下标签的 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.
用于在元模型中注入模型的代码已经过测试并且可以正常工作。 如果我删除供应商标签,即使这个 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);
如何告诉它加载元数据?
我添加了以下行
((EMFModelFactory) modelFactory).getResourceSet().getLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE);
在注入元模型之前。
现在可以使用了!