重组自定义建模属性
如果将具有自定义建模属性的对象从系统 A 中导出,然后导入到系统 B 中,而导入系统 B 中的对象不包含自定义建模属性,则导入失败。应将自定义的模型化属性导出为可重用属性。本节介绍如何编写映射规则来在导出时使用,以确保在这些情况下导入成功。
使用此类规则可以实现以下目标:
自定义的模型化属性被忽略。
应该映射标记,特别是根标记,以便导入系统可以处理 XML 文件。
在 XML 中指定的 DTD 应该是可映射的,以便识别新 DTD,导入系统也能验证 XML 文件。
例如,假定有一个类 SubTypeOfWTPart,它扩展 wt.part.WTPart,并带有一个额外属性 mySubTypeAttr1。在导出侧是具有客户 DTD (Customer-DTD.dtd) 的对应处理程序,此客户 DTD 不包括在 IXB 架构中。导出系统有导出 SubTypeOfWTPart 的处理程序,但不幸的是,导入系统没有这种处理程序。
导出系统可提供一个映射规则来实现上述目的,以保证导入成功。在此例中,应忽略属性 mySubTypeAttr1,并将标记 SubTypeOfWTPart 更改为 WTPart,且应将 Customer-DTD.dtd 更改为导入系统可识别的 DTD (例如 standardX26.dtd)。
在 IXB 中导出时,IXB 框架支持两种格式的映射规则文件:XML 文件和 XSL 文件。
映射文件格式示例
XML 文件 exportMapping.xml 和 XSL 文件 exportMapping.xsl 是映射文件的两个示例。
XML 示例
<?xml version="1.0" encoding="UTF-8"?>
<userSettings>
<mappingRules>
<IGNORE>
<tag> mySubTypeAttr1</tag>
<value>*</value>
</IGNORE>
<CHANGE_TAG>
<tag>SubTypeOfWTPart</tag>
<newTag>WTPart</newTag>
<newDtd>standardX26.dtd</newDtd>
</CHANGE_TAG>
</mappingRules>
</userSettings>
XSL 示例
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="SubTypeOfWTPart">
<xsl:choose>
<xsl:when test="name='simplePart'">
<mappingRules>
<IGNORE>
<tag> mySubTypeAttr1</tag>
<value>*</value>
</IGNORE>
</mappingRules>
<mappingRules>
<CHANGE_TAG>
<tag>SubTypeOfWTPart</tag>
<newTag>WTPart</newTag>
<newDtd>standardX26.dtd</newDtd>
</CHANGE_TAG>
</mappingRules>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
忽略属性
要忽略属性,请在语法中使用内置命令 <IGNORE>,如下所示:
<IGNORE>
<tag>tagName</tag>
<path>pathOfTheTag</path>
<value>tagValue</value>
</IGNORE>
在上述语法中,这一行可选:
<path>pathOfTheTag</path>
在上述语法中,您可以在以下行中使用星号 (*) 作为通配符:
<value>tagValue</value>
继续上例 (扩展 wt.part.WTPart 的类 SubTypeOfWTPart,它具有一个额外的属性 mySubTypeAttr1),tagName 是 mySubTypeAttr1,且 tagValue 是 * (通配符)。这将忽略具有任意值的所有 mySubTypeAttr1。
如果存在另一个对象类型,其属性具有与 mySubTypeAttr1 相同的名称并且不忽略这种类型,则可通过指定 <path>pathOfTheTag</path> 来包括此种类型。例如 <path> SubTypeOfWTPart</path>,表示仅在 mySubTypeAttr1 是 SubTypeOfWTPart 下的标记时,才可忽略。
将标记更改为另一名称
要将标记更改为不同名称,请使用内置命令 <CHANGE_TAG>。下列是将标记更改为另一名称的语法。
<CHANGE_TAG>
<tag>oldTagName</tag>
<path>pathOfTheOldTag</path>
<newTag>newTagName</newTag>
<newDtd>newDTD</newDtd>
</CHANGE_TAG>
可以通过指定 <newDtd> 的值,编写同样的代码来更改 DTD。请查看本主题前部分的两个较长示例文件来了解如何实现这些更改。
上述示例中以下两行是可选的:
<path>pathOfTheOldTag</path>
<newDtd>newDTD</newDtd>
常见管理对象的管理冲突
本部分介绍了一些常见管理项 (例如,可重用属性定义、属性组织器、测量数量、测量系统以及子类型定义) 的冲突。
潜在冲突
行为
解决方案或消息
可重用属性定义、属性组织器和子类型定义的说明不匹配
用户通知
“说明”的属性不同。属性 <类型> 的值不同于数据库中查找到的值。要求的值为:<类型>,找到的值为:<类型>
可重用属性定义、属性组织器和子类型定义的显示名称不匹配
用户通知
“显示名称”的属性不同。属性 <类型> 的值不同于数据库中查找到的值。要求的值为:<类型>,找到的值为:<类型>
可重用属性定义、属性组织器和子类型定义的分级显示名称不匹配
用户通知
“分级显示名称”的属性不同。属性 <类型> 的值不同于数据库中查找到的值。要求的值为:<类型>,找到的值为:<类型>
“属性组织器”不存在
用户通知
无法找到“属性组织”<类型>
有关详细信息,请参阅查看和编辑属性组织器
不允许创建分级可重用属性定义
用户通知
不允许分层定义 <类型>
可重用属性定义不匹配
用户通知
属性定义 <类型> 在本地定义为 <类型>,但作为 类型 导入。
有关详细信息,请参阅管理可重用属性
不存在可重用属性定义或属性组织器
用户通知
无法找到基于实例的属性 <类型>
有关详细信息,请参阅管理可重用属性
“测量数量”不存在
用户通知
“测量数量”<类型> 不存在。
“单位定义”带有不同的基本单位
用户通知
“单位定义”<类型> 的测量数量 <类型> 带有不同的显示单位或已忽视显示单位。
“测量系统”与基本符号值不匹配
用户通知
“测量系统”<类型> 带有不同的基本符号值。
“测量系统”不存在
用户通知
“测量系统”<类型> 不存在。
“类型定义”不存在
用户通知
无法找到“类型定义”:<类型>
现有子类型的可重用属性比 XML 文件中的少
用户通知
导入 <类型> 时应该生成 IBA 值 (属性类型:<类型>,路径:<类型>,值:<类型>)
相对于 XML 文件而言,现有子类型具有额外的可重用属性
用户通知
导入 <类型> 时应该找到 IBA 值 (属性类型:<类型>,路径:<类型>,值:<类型>)
现有子类型的约束比 XML 文件中少
用户通知
针对 <类型> 导入时要求类型约束 (enforcementRuleClassname:<类型>,bindingRuleClassName:<类型>,enforcementRuleData:<类型>,IBA 定义路径:<类型>)
相对于 XML 文件,现有子类型具有额外的约束
用户通知
针对 <类型> 导入时找到额外的类型约束 (enforcementRuleClassname:<类型>,bindingRuleClassName:<类型>,enforcementRuleData:<类型>,IBA 定义路径:<类型>)
这对您有帮助吗?