首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析生成的SysML

解析生成的SysML
EN

Stack Overflow用户
提问于 2016-03-09 09:28:37
回答 1查看 960关注 0票数 0

我有一个扩展为XMI的Enterprise生成的SysML文件,我想解析它,通过使用EMF、UML2和Papyrus插件在SysML文件中获取对象。

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

然后我试着写一个读者来读这个,它也不起作用。守则如下:

代码语言:javascript
复制
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生成的文件。

作为内部的注释,在SysML文件的开头,有很多特定的名称空间。名称空间如下:

代码语言:javascript
复制
<?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. 我在代码中使用的插件:
代码语言:javascript
复制
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"
  1. 我使用的代码可以解析Papyrus和IBM生成的SysML。不幸的是,我需要解析EA生成的文件。此外,我尝试使用Rhapsody导入EA生成的SysML,然后从Rhapsody导出一个新的SysML文件。这一次我可以解析新的SysML文件。
  2. 从EA解析SysML时显示的错误如下所示: 行: 3501 : Value 'org.eclipse.emf.ecore.xml.type.impl.AnyTypeImpl@1ddeb95 (eClass: org.eclipse.emf.ecore.impl.EClassImpl@77270b15 (name: ActivityEdge) (instanceClassName: null) (抽象: false,接口: false)) (混合: null,anyAttribute: XMI_2.1:idref=EAID_B206112C_3845_4058_8987_AAB974C081D8)‘不合法。(file:/home/pzhengshuai/workspace-papyrus/SysMLReader/resource/import/export_file_xmi_2.1/eaexample_model.xmi,3501,77)

像这样的人

代码语言:javascript
复制
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)
  1. 猜测:

我猜可能我的代码无法识别EA SysML文件中的特定名称空间。如果我们能够找到模式或其他东西,在EA中定义名称空间,并将它们添加到SysML文件中,那么代码可能会工作。但我没有发现任何与此相关的文件。

EN

回答 1

Stack Overflow用户

发布于 2016-03-09 12:49:58

你不会说你会犯什么样的错误。很高兴知道。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35887624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档