主要内容

本页采用了机器翻译。点击此处可查看英文原文。

getOwnershipHierarchy

获取元素所属所有权层次结构中的元素

自 R2026a 起

    说明

    elements = getOwnershipHierarchy(workspace,element) 获取由 element 指定的元素的所有权层次结构中的所有元素,该元素必须位于由 workspace 指定的 SysML® v2 工作区中。

    示例

    示例

    全部折叠

    本示例假设有一个名为 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:
    
        meta

    SysML 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 对象数组形式返回。

    详细信息

    全部折叠

    版本历史记录

    在 R2026a 中推出