getOwnershipHierarchy
说明
示例
本示例假设有一个名为 SysML v2 的工程,其具体内容由这段 SysML v2 文本描述。
package test1 {
part def myArch;
part def subArch :> myArch;
part def myTopArch {
part A:subArch;
}
}如果您可以使用 SysML v2 编辑器,则可以将 SysML v2 文本发布到存储库中。
连接到一个本地存储库。发布到存储库后,SysML v2 文本会被转换为 SysML v2 元素,您可以通过 getElements 函数访问这些元素。
首先,连接到服务器。如果您的服务器支持通过持有者令牌进行身份验证,请将您的令牌作为 credentials 参量 systemcomposer.sysml.Repository.connect(serverUrl,credentials="my-token") 提供。
serverUrl = 'http://vdi-abcde-123:8000';
repo = systemcomposer.sysml.Repository.connect(serverUrl)repo =
Repository with properties:
BaseUri: 'http://vdi-abcde-123:8000'通过调用 getProjects,您可以获取存储库中所有工程的信息。或者,如果您知道要使用的工程的 ID,也可以通过调用 getProjectById 直接获取该工程。
allProjects = repo.getProjects();
projectToUse = repo.getProjectById('f6deaa82-d16f-40aa-a2bb-f4b04f8e0fc6')projectToUse =
Project with properties:
ResourceIdentifier: 'http://vdi-ahdsl2-016:9000/projects/f6deaa82-d16f-40aa-a2bb-f4b04f8e0fc6'
Id: 'f6deaa82-d16f-40aa-a2bb-f4b04f8e0fc6'
Description: ''
Name: 'supers'要查看工程的元素,首先需要通过调用 createWorkspace 为工程中的某个指定提交创建一个工作区。如果调用 createWorkspace 时不带任何参量,则创建的工作区将锚定在默认分支的最新提交上,并检索所有元素。或者,如果您知道当前正在操作的分支,则可以通过调用 createWorkspace(branchId="123456") 来提供分支 ID。
myFullWorkspace = projectToUse.createWorkspace()
myFullWorkspace = Workspace with no properties.
检查工作区中元素的最简单方法是调用 getElements,该函数会列出工作区中锚定提交快照中的所有元素,并检索所有元素(如果这些元素在创建工作区时未被检索)。输出结果显示,该快照包含 17 个元素,这些元素填充了快照的本地缓存,并根据 SysML v2 元模型以图的形式组织起来。
allElements = myFullWorkspace.getElements()
allElements =
1×17 Element array with properties:
meta现在,您可以编写代码来检查工作区的元素。例如,您可以查找所有类型为 Package 的元素。在此示例中,只有一个元素 test1 具有此类型。
theOnlyPackage = allElements([allElements.meta] == "Package"); theOnlyPackage.get("declaredName")
ans = "test1"
利用元素的 SysML v2 属性,您可以从任何元素导航至其相关元素。例如,我们可以看一下该包中的一个成员。
allOwnedMembers = theOnlyPackage.ownedMember
aMember = allOwnedMembers(3);
aMember.get("declaredName")ans = "myTopArch"
该成员是一个包含单个零件的零件定义。您可以找到该部件及其类型。此类型的所有者即为原始包。
thePart = aMember.ownedPart thePartsType = thePart.type backToTheStart = thePartsType.owner == theOnlyPackage
thePart =
Element with properties:
meta: "PartUsage"
aliasIds: []
declaredName: "A"
isComposite: 1
declaredShortName: []
type: [1×1 systemcomposer.sysml.Element]
isPortion: 0
isConstant: 0
isImpliedIncluded: 0
direction: []
isAbstract: 0
elementId: "d94aa221-0952-4e8e-8a66-51488d990275"
ownedFeature: [0×0 systemcomposer.sysml.Element]
isDerived: 0
feature: [0×0 systemcomposer.sysml.Element]
isSufficient: 0
isEnd: 0
variant: [0×0 systemcomposer.sysml.Element]
isIndividual: 0
isOrdered: 0
documentation: [0×0 systemcomposer.sysml.Element]
isUnique: 1
isVariable: 0
isVariation: 0
ownedRelationship: [1×2 systemcomposer.sysml.Element]
owningRelationship: [1×1 systemcomposer.sysml.Element]
portionKind: []
annotation: [0×0 systemcomposer.sysml.Element]
chainingFeature: [0×0 systemcomposer.sysml.Element]
definition: [1×1 systemcomposer.sysml.Element]
nestedAttribute: [0×0 systemcomposer.sysml.Element]
nestedPart: [0×0 systemcomposer.sysml.Element]
ownedFeatureMembership: [0×0 systemcomposer.sysml.Element]
ownedElement: [1×1 systemcomposer.sysml.Element]
ownedEndFeature: [0×0 systemcomposer.sysml.Element]
ownedFeatureChaining: [0×0 systemcomposer.sysml.Element]
ownedSubsetting: [0×0 systemcomposer.sysml.Element]
ownedImport: [0×0 systemcomposer.sysml.Element]
ownedMember: [1×1 systemcomposer.sysml.Element]
ownedTyping: [1×1 systemcomposer.sysml.Element]
ownedMembership: [1×1 systemcomposer.sysml.Element]
ownedRedefinition: [0×0 systemcomposer.sysml.Element]
ownedReferenceSubsetting: [0×0 systemcomposer.sysml.Element]
owner: [1×1 systemcomposer.sysml.Element]
typedFeature: [0×0 systemcomposer.sysml.Element]
referenceExpression: [0×0 systemcomposer.sysml.Element]
satisfiedRequirement: [0×0 systemcomposer.sysml.Element]
subsetting: [0×0 systemcomposer.sysml.Element]
textualRepresentation: [0×0 systemcomposer.sysml.Element]
usage: [0×0 systemcomposer.sysml.Element]
valuation: [0×0 systemcomposer.sysml.Element]
thePartsType =
Element with properties:
meta: "PartDefinition"
aliasIds: []
declaredName: "subArch"
variant: [0×0 systemcomposer.sysml.Element]
isIndividual: 0
declaredShortName: []
elementId: "9c0d5f85-07cb-4013-aaec-7be7c8bc362e"
feature: [0×0 systemcomposer.sysml.Element]
isSufficient: 0
isAbstract: 0
isImpliedIncluded: 0
isVariation: 0
ownedRelationship: [1×1 systemcomposer.sysml.Element]
owningRelationship: [1×1 systemcomposer.sysml.Element]
annotation: [0×0 systemcomposer.sysml.Element]
documentation: [0×0 systemcomposer.sysml.Element]
ownedAttribute: [0×0 systemcomposer.sysml.Element]
ownedFeatureMembership: [0×0 systemcomposer.sysml.Element]
ownedElement: [0×0 systemcomposer.sysml.Element]
ownedEndFeature: [0×0 systemcomposer.sysml.Element]
ownedFeature: [0×0 systemcomposer.sysml.Element]
ownedImport: [0×0 systemcomposer.sysml.Element]
ownedMember: [0×0 systemcomposer.sysml.Element]
ownedMembership: [0×0 systemcomposer.sysml.Element]
ownedPart: [0×0 systemcomposer.sysml.Element]
ownedSubclassification: [1×1 systemcomposer.sysml.Element]
owner: [1×1 systemcomposer.sysml.Element]
textualRepresentation: [0×0 systemcomposer.sysml.Element]
typedFeature: [0×0 systemcomposer.sysml.Element]
usage: [0×0 systemcomposer.sysml.Element]
backToTheStart = logical
1查看 PartUsage 元素周围的元素关系,以进一步了解这些元素之间的关联。
elemRels = getElementRelationships(myFullWorkspace,thePart)
elemRels =
1×3 Element array with properties:
meta确认元素 thePart 是唯一一个类型为 PartUsage 的元素。
queryString = '{"@type":"Query","name":"string","where":{"@type":"PrimitiveConstraint","operator":"=","property":"@type","value":["PartUsage"]}}'; flag = isequal(getElement(myFullWorkspace,"d94aa221-0952-4e8e-8a66-51488d990275"),... executeQuery(work,queryString))
flag = logical 1
编写代码是查找元素最灵活的方法,但您也可以通过查看工程的根元素来获取元素之间的关系。根元素没有所有者。在此示例中,工程仅有一个根元素,该根元素包含一个成员,即包 test1。
root = myFullWorkspace.getRootElements()
rootMember = root.ownedMember.get("declaredName")root =
Element with properties:
meta: "Namespace"
aliasIds: []
declaredName: []
declaredShortName: []
annotation: [0×0 systemcomposer.sysml.Element]
elementId: "2e329208-1900-4282-9229-7f5da441bee5"
isImpliedIncluded: 0
owningRelationship: [0×0 systemcomposer.sysml.Element]
ownedRelationship: [1×1 systemcomposer.sysml.Element]
documentation: [0×0 systemcomposer.sysml.Element]
ownedElement: [1×1 systemcomposer.sysml.Element]
ownedImport: [0×0 systemcomposer.sysml.Element]
ownedMember: [1×1 systemcomposer.sysml.Element]
ownedMembership: [1×1 systemcomposer.sysml.Element]
owner: [0×0 systemcomposer.sysml.Element]
textualRepresentation: [0×0 systemcomposer.sysml.Element]
rootMember = "test1"您还可以查找具有指定元数据类型和名称的元素。
theTopArch = myFullWorkspace.getElementsByTypeAndName('PartDefinition','myTopArch'); theTopArch.get("declaredName")
ans = "myTopArch"
一旦某个提交的元素被放入缓存,您就可以使用 MATLAB® 来浏览该工程的元素图。不过,您也可以通过单次函数调用来获取一些元素集合。例如,您可以使用 getMembershipHierarchy 获取某个命名空间中的所有成员。返回向量中的第一个元素是源元素。反之,您可以通过调用 getOwnershipHierarchy 来获取某个元素的所有权层次结构。与之前一样,向量的第一个元素是源元素。
myMembers = myFullWorkspace.getMembershipHierarchy(theOnlyPackage) myOwners = myFullWorkspace.getOwnershipHierarchy(thePart)
myMembers =
1×7 Element array with properties:
meta
myOwners =
1×4 Element array with properties:
metaSysML v2 还支持对元素进行轻松分类。您可以使用 getDescendants 方法查找某个定义的子类。在此示例中,subArch 是唯一的子类。
myArch = myFullWorkspace.getElementsByTypeAndName('PartDefinition','myArch'); mySubDefinitions = myFullWorkspace.getDescendants(myArch) mySubDefinitions(end).get("declaredName")
mySubDefinitions =
1×2 Element array with properties:
meta
ans = "subArch"您可以通过调用 getAncestors 来查找其超类。在此示例中,myArch 是唯一的超类。
mySuperDefinitions = myFullWorkspace.getAncestors(subArch)
mySuperDefinitions(end).get("declaredName")mySuperDefinitions =
1×2 Element array with properties:
meta
ans = "myArch"您还可以使用 getUsages 方法查找给定定义的所有用法。在此工程中,只有一个定义被使用过,即 subArch,它包含一个 PartUsage A。
theOnlyUsage = myFullWorkspace.getUsages(subArch);
theOnlyUsage.get("declaredName")ans = "A"
输入参数
工作区,指定为 systemcomposer.sysml.Workspace 对象。
元素,指定为 systemcomposer.sysml.Element 对象。
输出参量
元素,以 systemcomposer.sysml.Element 对象数组形式返回。
详细信息
| 术语 | 定义 | 应用 | 更多信息 |
|---|---|---|---|
| 存储库 | 存储库是用于存储 SysML v2 工程的存储位置。 | 通过 URL 连接到远程存储库。然后,检索存储库中所有工程的详细信息。 | systemcomposer.sysml.Repository |
| 工程 | 工程是用于存储 SysML v2 数据元素的容器。工程包含一组提交,这些提交是带有时间戳的工程快照。工程还包含一组分支,这些分支描述了工程中的并行开发路径。 | 使用工程来存储 SysML v2 建模活动的数据。 | systemcomposer.sysml.Project |
| 工作区 | 工作区保留为给定工程提交的快照的本地缓存。 | 使用工作区,可访问工程演化过程中某个特定时间点快照中的所有 SysML v2 元素。 | systemcomposer.sysml.Workspace |
| 元素 | 元素是建模的基本单元。元素是 SysML v2 模型的构建模块,包括部件、模块、需求、活动、接口和关系。每个元素在存储库中都有一个唯一的标识,可以在不同工程间进行引用和复用。 | 工作区中的一个元素对应一个或多个 SysML v2 元素。您可以使用元素对象来访问特定于 SysML v2 元素的数据和关系。 | systemcomposer.sysml.Element |
版本历史记录
在 R2026a 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)