gpt4 book ai didi

java - 用Java解析Enterprise Architect生成的SysML

转载 作者:行者123 更新时间:2023-12-01 10:15:58 24 4
gpt4 key购买 nike

我有一个从 Enterprise Architect 生成的扩展名为 XMI 的 SysML 文件,我想使用 EMF、UML2 和 Papyrus 插件解析它以获取 Java 中 SysML 文件内的对象。

我尝试新建一个 EMF 项目并导入此 SysML 文件,但失败了。它说这个文件中有一些非法值。

然后我尝试写一个阅读器来阅读这个,它也不起作用。代码如下:

ResourceSet resourceSet = new ResourceSetImpl();
Registry packageRegistry = resourceSet.getPackageRegistry();
packageRegistry.put(XMI_NAMESPACE, UMLPackage.eINSTANCE);
packageRegistry.put(UML_NAMESPACE, UMLPackage.eINSTANCE);
packageRegistry.put(SysmlPackage.eNS_URI, SysmlPackage.eINSTANCE);
//packageRegistry.put(ADA_NAMESPACE, UMLPackage.eINSTANCE);
//packageRegistry.put(VERILOG_NAMESPACE, UMLPackage.eINSTANCE);
//packageRegistry.put(ARCGIS_NAMESPACE, UMLPackage.eINSTANCE);
//packageRegistry.put(EAUML_NAMESPACE, UMLPackage.eINSTANCE);
//packageRegistry.put(THE_CUSTOMER_PROFILE_NAMESPACE,UMLPackage.eINSTANCE);
// Add the load option
resourceSet.getLoadOptions().put(XMIResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
// Deine the extension to factory map
Map<String, Object> extensionToFactoryMap = resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap();
UMLResourceFactoryImpl umlResourceFactory = new UMLResourceFactoryImpl();
extensionToFactoryMap.put(XMI2UMLResource.FILE_EXTENSION, umlResourceFactory);
URI uri = URI.createFileURI(xmiFile.getPath());
Model umlModel = UML2Util.load(resource, uri, UMLPackage.Literals.MODEL);
System.out.println(umlModel);

此代码适用于 Papyrus 生成的 SysML,但不适用于 Enterprise Architect 生成的文件。

正如里面的注释,在SysML文件的头部,有很多特定的命名空间。命名空间如下:

<?xml version="1.0" encoding="windows-1252"?>
<xmi:XMI xmi:version="2.1" xmlns:uml="http://schema.omg.org/spec/UML/2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:thecustomprofile="http://www.sparxsystems.com/profiles/thecustomprofile/1.0" xmlns:Ada="http://www.sparxsystems.com/profiles/Ada/1.0" xmlns:Verilog="http://www.sparxsystems.com/profiles/Verilog/1.0" xmlns:ArcGIS="http://www.sparxsystems.com/profiles/ArcGIS/1.0" xmlns:sysml="http://www.omg.org/spec/SysML/20080501/SysML-profile" xmlns:SysML="http://www.omg.org/spec/SysML/20120322/SysML" xmlns:EAUML="http://www.sparxsystems.com/profiles/EAUML/1.0">
<xmi:Documentation exporter="Enterprise Architect" exporterVersion="6.5"/>
<uml:Model xmi:type="uml:Model" name="EA_Model" visibility="public">
....

我想获取标签中的信息....

有人可以帮助我吗?

编辑:

  1. 我在代码中使用的插件:
<小时/>
org.eclipse.emf.common;bundle-version="2.11.0",
org.eclipse.emf.ecore;bundle-version="2.11.1",
org.eclipse.emf.mapping;bundle-version="2.9.0",
org.eclipse.uml2.common;bundle-version="2.1.0",
org.eclipse.uml2.uml;bundle-version="5.1.0",
org.apache.log4j;bundle-version="1.2.15",
org.junit;bundle-version="4.12.0",
org.eclipse.papyrus.sysml;bundle-version="1.1.3"
  • 我使用的代码可以解析 Papyrus 以及 IBM Rhapsody 生成的 SysML。不幸的是,我需要解析 EA 生成的文件。另外,我尝试使用Rhapsody导入EA生成的SysML,然后从Rhapsody导出一个新的SysML文件。这次我可以解析新的 SysML 文件。

  • 当我从 EA 解析 SysML 时显示错误,如下所示:

    Line: 3501 : Value 'org.eclipse.emf.ecore.xml.type.impl.AnyTypeImpl@1ddeb95 (eClass: org.eclipse.emf.ecore.impl.EClassImpl@77270b15 (name: ActivityEdge) (instanceClassName: null) (abstract: false, interface: false)) (mixed: null, anyAttribute: [XMI_2.1:idref=EAID_B206112C_3845_4058_8987_AAB974C081D8])' is not legal. (file:/home/pzhengshuai/workspace-papyrus/SysMLReader/resource/import/export_file_xmi_2.1/eaexample_model.xmi, 3501, 77)
  • 还有一些这样的

    Line: 1989 : Unresolved reference 'EAID_425E703B_8FB1_4be3_9264_C470555CFF8F'. (file:/home/pzhengshuai/workspace-papyrus/SysMLReader/resource/import/export_file_xmi_2.1/eaexample_model.xmi, 1989, 73)
  • 猜测:
  • 我猜我的代码可能无法识别 EA SysML 文件中特定的命名空间。如果我们能在 EA 中找到定义命名空间的模式或其他东西,并将它们添加到 SysML 文件中,也许代码就可以工作。但我没有找到任何相关文件。

    最佳答案

    你没有说明你遇到了什么样的错误。如果知道的话那就太好了。

    从上面的 XMI 来看,Sparx EA 似乎将 SysML 表示为 UML,并应用了 SysML 配置文件。这是合法的,但它与直接使用 SysML 元模型不同。您的代码似乎直接使用元模型。

    关于java - 用Java解析Enterprise Architect生成的SysML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35887624/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com