【发布时间】:2011-01-19 05:34:01
【问题描述】:
我需要阅读被序列化为 XMI 的 UML 图。是否有任何库可以让我方便地阅读 UML XMI - 方便地我的意思是有一些方法来迭代模型中的类/包/方法/属性等。
我尝试了 EMF,但找不到任何教程来说明如何导入包含 UML 的 XMI。我还找到了NSUML/NSMDF,但文档链接已损坏。
【问题讨论】:
我需要阅读被序列化为 XMI 的 UML 图。是否有任何库可以让我方便地阅读 UML XMI - 方便地我的意思是有一些方法来迭代模型中的类/包/方法/属性等。
我尝试了 EMF,但找不到任何教程来说明如何导入包含 UML 的 XMI。我还找到了NSUML/NSMDF,但文档链接已损坏。
【问题讨论】:
这取决于您尝试阅读的 UML 版本。您发现的 NSUML 包仅适用于 UML 1.3。 NetBeans MetaData Repository (MDR) 将读取句柄 UML 1.4 和 UML 1.5。它可以用作一个独立的库(这就是 ArgoUML 使用的),因此您不需要 NetBeans。对于 UML 2.x,我认为 Eclipse EMF 和 UML2 库是您唯一的选择。 EMF 是一个依赖项,但它确实是您想要的 UML2 东西。与 MDR 和 NetBeans 一样,您不需要 Eclipse。 ArgoUML 使用 Eclipse 库来支持其 UML 2.x。
【讨论】:
您正在寻找的是Java specification for JMI(“Java 元数据接口”),它实现了用于描述元数据的 MOF 和用于传输元数据的 XMI。
不幸的是,我目前正在自己寻找 JMI 的实现,而 suns JMI 页面似乎有点过时了。 netbeans 的开源实现似乎已在版本 6 中被删除。
【讨论】:
我不认为你想要的存在。我知道的所有导入 XMI 的工具(包括我的 XMI 转换服务:http://modeling-languages.com/content/xmi2-tool-exchanging-uml-models-among-case-tools)都通过解析整个 XMI 文件并在主内存中创建相应的 UML 模型来工作。然后您可以通过查询模型来访问 UML 元素。
要迭代 XMI 模型,您可以轻松地使用 XML 库来选择您感兴趣的 XMI 文件片段。
【讨论】:
为了使用 EMF 读取 XMI/UML,您需要为 UML 查找、生成或编写 ECore 模型。一旦您拥有其中一个,您就可以生成内存中的类来操作 UML 并利用其他 EMF 基础架构。
但更简单的方法可能是使用由 Eclipse MDT project 开发的 UML2 基础架构。 (我的猜测是它在引擎盖下使用 EMF,并且那里有一个用于 UML2 的 ECore 模型。)
【讨论】:
也许只需看看Transforming XMI to HTML。这应该可以帮助您开始使用 XSLT 和 XMI。
【讨论】:
ArgoUML 可以将 XMI 导入其 UML 模型,并为 Java、C++、C#、PHP4 和 PHP5 生成代码。
【讨论】: