全部学习汇总: GitHub - GreyZhang/hack_autosar: learning autosar documents, aha, very hard!

       继续学习AUTOSAR,看一下官方的文档。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_xml   

6.3.2 将关联实现为参考

       本节说明了关联的实现,即使它尚未 (R4.0) 实现为真正的模型转换。

       建立参考

       元类之间的引用表示为关联。 引用的元类派生自 Referrable,主要是 Identifiable。 因此,它们定义了一个 shortName,它在其名称空间中必须是唯一的(参见 [constr_2508])。 因此,引用(元模型中的关联)由以下方式进行表达:

       1. 通过指定 shortNames(绝对或相对)的区分大小写的路径

       2. 引用的目标类型

       3. 引用库的大小写敏感名称。

       相对引用 名称空间层次结构在元模型中通过从 Identifiable 派生的类的复合关联来定义。 每个 Identifiable 是其直接或间接关联(复合关联)类的名称空间。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_xml_02

 

       参考文献区分大小写

       请注意,术语“区分大小写”表示集合中的字符是上面俩大括号中的信息。

       分别认为是不同的。 换句话说,区分大小写的路径 /X/Y 和 /x/y 是不一样的。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_元模型_03

 

       类型引用的表示

       请注意,对于使用 isOfType 构造型的关联,引用类的角色是 theRoleTref。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_autosar_04

 

       组合的模型转换

       关联被转换为具有属性 dest 的匿名 3 元类的聚合。 根据 [TPS_GST_00166] 执行转换后,此元类继承自 Ref。  Ref 因此提供了表示被引用对象的 shortName 路径的值。

       图 6.7 说明了等效模式。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_xml_05

 

       6.3.2.1 绝对 ShortName路径

       ShortName 路径由短名称序列组成,以“/”分隔。 以下规则适用于 AUTOSAR 中使用的 ShortName 路径:

       1. 绝对路径是通过收集从模型的根元素到引用元素的包含路径上的模型元素的shortName 来计算的。

       2. 绝对路径以字符“/”开头。

       3. 在绝对引用路径的情况下,属性基础被忽略。

       请注意,可以通过删除由基指定的 shortName-path 将绝对路径转换为相对路径。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_autosar_06

 

       6.3.2.2 相对 ShortName路径

       相对引用路径不以字符“/”开头。 通过在相对 ShortName-path 前面添加 ReferenceBase 的相应 ShortName-path,可以将相对引用路径转换为绝对路径。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_元模型_07

 

       识别相对引用的 ReferenceBase

       适当的 ReferenceBase 由以下信息来标识:

       • 属性base。 这表示来自引用的第一个包含 ARPackage 可见(从引用到模型根的第一个祖先包),该引用的 referenceBase 和 shortLabel 等于基础。 换句话说:当包被嵌套时,适当的 referenceBase 是自下而上搜索的。

       • 或者最里面的包,它有一个默认设置为“true”的referenceBase。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_autosar_08

 

       应提供指定的参考基础

       如果存在相对引用,则包含的包之一应具有一个 referenceBase,其 shortLabel 等于引用的基址。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_it技术_09

 

       部分模型中的 ReferenceBase

       请注意, ReferenceBase 是 atpSplitable 。 因此有必要在整个模型中搜索合适的ReferenceBase。 换句话说,应在所有部分模型中搜索 ReferenceBase。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_xml_10

 

       清单 6.1 展示了最简单的相对引用形式。 在这种情况下,包内的相对引用应独立于包名称。 请注意指定为 xml 注释的标注 <!- 1 ->: 1. <!- 1 ->: 这是相对引用的基础。 请注意, isDefault 表示它是默认值。

       2. <!- 2 ->:这是一个相对引用。 由于未指定 base 属性,因此使用 <!- 1 -> 中指定的默认 base 解析引用。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_it技术_11

 

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_抽象类_12

 

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_autosar_13

 

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_xml_14

 

       清单 6.2 说明了可以有多个引用库。 在这种情况下,除了前面的示例之外,还为 CompuMethods 提供了另一个基础,因为它们位于单独的包中。

       1. <!- 1.1 ->: 这是相对引用的另一个基础。 请注意,缺少 isDefault 属性。 这与将其指定为 false 相同。

       2. <!- 2.1 ->:这是一个相对引用。 属性base表示在相对引用前使用带有shortLabel compum(定义在<!-1.1->中的base。对应的绝对引用为/CompuMethods/MyCompu。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_xml_15

 

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_it技术_16

 

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_元模型_17

 

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_抽象类_18

 

       清单 6.3 说明了可以嵌套引用库。 在这种情况下,CompuMethods 的基是相对于默认基定义的。 这允许在包的开头维护整个包关系。

       它进一步表明需要从内到外搜索参考库。

       1. <!- 1.1.1 ->: 这是另一个相对引用的基础。 请注意,现在明确指定了 base 属性。 也可以与此处的默认机制相关。

       2. <!- 1.2 ->:这是单位的基础。 请注意,此基数也是相对于默认值定义的。

       3. <!- 2.2 ->:这是一个相对引用。 属性base表示在相对引用前使用shortLabel compum(定义在<!-1.1.1->中的base。对应的绝对引用为/MyComponent/CompuMethods/MyCompu。

       4. <!- 3 ->: 这是 CompuMethods 的包。 它现在作为 /MyComponent 5 中的嵌套包存在。 <!- 3.1 ->:这是对 Unit 的引用,它与 <!- 1.2 -> 中定义的基本命名单位相关。      请注意,引用位于没有包基础的内部包中。

       这说明,相关的参考base在一个外包装中,但不一定在直接包含的包装中。

       6. <!- 4 ->: 这是单元包。 它位于 /MyComponent 的子包中。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_xml_19

 

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_抽象类_20

 

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_元模型_21

 

       生硬的翻译并没能很好的理解这个设计,可能我这方面了解少。这最后一个,直接不去翻译了,先跳过去了。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_xml_22

 

       6.3.2.3 目标类型

       目标类型(在引用元素中指定为属性 dest)定义了被引用对象的类型。 目标类型还可以引用子类(抽象和具体)。 此属性的值是

       • 如果元模型中的引用指向一个抽象类,则 dest 的值是该抽象类或其任何子类的 XML 名称。 即使 dest 是抽象类的 XML 名称,引用的目标也可以是从所表示的抽象类派生的任何具体类的实例。

       • 如果元模型中的引用指向一个具体的类,则dest 的值就是这个类的名称。 引用的目标只能是所指类的一个实例。

870_AUTOSAR_TPS_GenericStructureTemplate21_元模型中的模型转换_抽象类_23

 

       目标类型提高了 XML 描述的稳健性,例如:

       • 工具可以找到引用错误类型对象的引用。

       • 如果引用的对象不可用,工具可以指示正确的类型。例如实例化一个合适的代理。

       但是,如果 dest 的可能值不包括抽象类,则会导致问题:

       • 如果引用目标更改为另一个子类,则需要维护引用,即使引用不关心这一点。

       • 它不会将元模型的信息传播到 XML 模式 图 6.8 说明了关联的实现。

       上面这部分,主要是看完了元模型中的模型转换,看了几个实际的说明例子。