浅析Eclipse建模框架(EMF)及其动态能力 - 编程入门网
源注册表中注册包
resourceSet.getPackageRegistry().put(companyPackage.getNsURI(), companyPackage); //加载资源 resource.load(null); 注意到局部的和全局的包(EPackage.Registry.INSTANCE)以及资源工厂(Resource.Factory.Registry.INSTANCE)的注册差别也是很重要的。全局注册是静态的,因此任何应用程序在JVM生存期都能存取全局注册并且可能覆盖它。为确保你的注册不会覆盖全局注册并且反过来也如此,典型地,你最好使用局部资源集合注册。 五、由XML模式生成动态的Ecore 如前所提及,如果你的模型是一个XML模式但是你没有选择生成Java类,那么,你可以通过使用XSDEcoreBuilder来动态地创建一个Ecore模型。这个示例使用了ipo.xsd:
这个generate方法返回为这个模式中的每个URI生成的Ecore包。如果该模式导入了其它命名空间,那么将有多个Ecore包被返回。每个包是被注册到本地的资源集中-用于实现模式转换。因此,如果你使用同样的资源集来装载你的实例XML文档的话,你就不需要自己注册包。 因为XML模式包括更多概念而不仅仅是Ecore,例如通配符等,所以EMF使用Ecore EAnnotations来记录到XML模式的映射。在数据(反)串行化期间,EMF需要处理这些注解。为了确保这些注解在(反)串行化期间被加以考虑,你必须使用XMLResource.ExtendedMetaData选项:
EMF 2.1还增加了一项新功能-它允许你在加载一个包含一个xsi:schemaLocation或xsi:noNamespaceSchemaLocation属性的XML文档时,不断地把模式转换成Ecore。同时,它也允许你加载一个没有与之相关联的模式的XML文档。为了使用这一功能,你需要注册 org.eclipse.emf.ecore.xmi.impl.GenericXMLResourceFactoryImpl: resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xml",new GenericXMLResourceFactoryImpl()); 六、小结 本文向你简短介绍了EMF,并解释了几个核心的EMF概念。同时,对于如何利用模式EMF的动态能力提供了相关示例。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |