测试一下getResource(URI,boolean):
createResource每次创建新的,getResource则是唯一实例的。
每个生成的XxxPackage.eINSTANCE会自行创建自己的Resource。如果在插件中修改了EcorePackge.eInstance.eResource(),会不会天下大乱呢?
==================eclispe编辑器右边的Mark Occurrence很方便,但是家里电脑上的这个黄色小标记很不清楚。前几天调整了老半天,修改配色方案,换显示器驱动,调整显示器对比度、亮度都收效不大。昨天偶然把XP的桌面风格换回传统模式,搞定了。
ecore.ecore这个问题很有意思,以前看过schema.xsd,就是自己定义自己。据说JDK也是用java开发编译出来的。。。先有鸡还是现有蛋呢?
在RS中同一URI可以createResource多个Resource,List方式存放。还存在另外一种Map存放方式, getResource(URI,boolean loadOnDemand)就是通过这种方式存取,如果不存在的话创建。这两个方法看起来有些冲突。似乎用于不同场合。再来看看怎样通过URL存取EObject:RS整个相当于一个DataBase, Resource相当于表,存放的是EObject, 每个EObject可以看成对象或者XML。表用URI来区分,URI中的Segment用来定位EObject。URI的例子参见探索(1)getEObject(URL, boolean loadOnDemand)很简单,getResource找到对应的Resource,在里面根据Segment查找,就是那个#///@xxx.n格式的东西,注意,还有ID方式。getPackageRegistry()用来返回RS的URL->Package注册表,它也是个本地的注册表,代理了全局的EPackage.Registry.INSTANCE。这个注册表用于取得EPackage(类型信息)和EFactory(创建实例)Resource就不说了,主要load,save, 一些具体子类,比如XmlResourceImpl可以直接使用,指定Encoding之类。看看ResourceSet对EMF了解了很多~