在发布中的适用性
概述
XML 主题中可包含逻辑表达式,以确定是否要在元素级别包括内容。可定义选项和选择 (应用于某些内容) 的标注称为内嵌可用性。有关包括还是排除内容的决定,将通过计算此逻辑表达式进行确定,此逻辑表达式对应于发布时适用性过滤器所选定的选择。或者利用 rootApplicabilityExpression 参数,前提是此参数已在发布规则中设置。
适用性表达式可表示产品选项和选择的子集,用于为内容提供注释。表达式会将内容与一个或多个特定产品相关联,然后可对其进行筛选。简单的表达式可使用逻辑运算符进行结合。
在服务结构用户界面,您可以使用“结构”选项卡工具栏上的“筛选器”操作集来设置动态文档的服务结构和内嵌适用性。发布将在发布结构及其动态文档中应用“选项筛选器”。如果发布规则参数 rootApplicabilityExpression 已设置,它将覆盖使用“过滤器”操作集定义的过滤表达式。
内嵌适用性过滤仅支持 PDF,且需使用 XSL 输出类型。如果为束输出,则在发布期间不会进行任何筛选,因为筛选由 Arbortext Content Delivery 用户执行。
适用性表达式需要一个解析器,以便能够解密使用相交和分离运算符 (如 AND、OR 和 NOT) 指定的选项和选择表达式。
关于 APEX
Windchill 使用 ATO 语法表示适用性表达式。在发布束时,根据发布规则,适用性表达式会以 Arbortext Content Delivery 可使用的 APEX 格式发布。有关发布规则的详细信息,请参阅“束中的适用性表达式”部分。
APEX 是一种基于 LISP 编程语言的语法。LogicalExpression 属性值是应用至 Windchill 对象的 APEX 适用性表达式。此属性可分别在已发布束的服务结构和服务产品层次结构的 DMPmap.xml 和 hierarchy.xml 文件中找到。
使用下表可以更好地理解 APEX 表达式语法。
APEX 语法符号
|
APEX 表达式语法
|
expression
|
"(" expression-body ")" | constant
|
expression-body
|
polyadic-body | choice-body | function-body
|
polyadic-body
|
polyadic-op s expression expression-list
|
choice-body
|
"IS" s quote string-list
|
function-body
|
name string-list
|
expression-list
|
empty | s expression s expression-list
|
string-list
|
empty | s quote s string-list
|
S
|
" " | " " s
|
polyadic-op
|
"AND" | "OR" | "NOT"
|
constant
|
"TRUE" | "FALSE" | "UNKNOWN"
|
quote
|
' string '
|
示例
|
您必须在括号内定义已分配表达式,因为用 + 表示的 AND 运算符优先于用 / 表示的 OR 运算符。
|
示例 1:
Windchill 中的某个对象分配了这样表达式,其中“轮胎”选项为 155 或 145,“颜色”选项为黑色或红色。ATO 格式为:
("155"/"145") + (Black/Red)
相应的 APEX 格式为:
(AND (IS 'Tire' '155' '145') (IS 'Colour' 'Black' 'Red')
示例 2:
Windchill 中的某个对象分配了这样一个表达式,其中版本选项为 X-24 或 X-26。对于版本 X-24,维护选项可以是 M022 或 M023。则 ATO 格式为:
(“X-24” + (“M022”/”M023”) ) / ”X-26”
相应的 APEX 格式为:
(OR (AND (IS 'release' 'X-24') (IS 'maintenance' 'M022' 'M023')) (IS 'release' 'X-26'))
示例 3:
某个 Windchill 对象分配了这样一个表达式,其服务有效性如下:
族选项分配了 X96,上下文为 K95 或 K96 模型。服务有效性类型为范围设置在 12000 至 13000 之间的序列号。以上表达式和服务有效性的 APEX 格式为:
(AND (IS 'family' 'X96') (IS 'model' 'K95' 'K96') (IS 'serialNo' '12000' '13000'))
设置样式表
如果需要有效载荷中发送的根服务结构文档 Identfier.xml 中的内嵌适用性表达式,您需要修改 pubstructXsl 样式表,以便将适用性表达式从 Identfier.xml 复制到输出 DITA 映射 (例如 topicref 与 topic 元素) 中的正确位置。
设置发布规则
为 PDF 和 XSL 输出创建发布规则时,应考虑在 Arbortext Publishing Engine 服务器上进行发布期间要应用的发布规则参数。您可以将基本的适用性发布规则参数应用至动态文档中的结构和内嵌内容。以下内容以 com.ptc.arbortext.pe/ 开头:
• applicabilitySyntax
指定用于有效载荷中适用性表达式的适用性语法名称。指定使用 applic::registerSyntax() ACL 方法在 Arbortext Publishing Engine 服务器上注册的名称。无默认值。
如果发布与 Arbortext Content Delivery 结合使用的束,且其结构及主题均使用 ATO 和相同的源语法,则 applicabilitySyntax 是发布束所需的唯一参数。
• rootApplicabilityExpression
指定要在发布期间应用于整个服务结构和其内容适用性的表达式。表达式语法必须与服务结构和其 XML 文本内容的语法相匹配。
使用 disableInlineApplicFiltering 启用或禁用内嵌动态文档的适用性。指定 true (默认值) 可禁用内嵌适用性,而指定 false 可将其启用。
有关发布规则参数的详细信息,请参阅
服务工作器参数。
执行语法解析器
假定标签是唯一的选择名称,适用性语法可以采用使用“选项集”的标签这一基本形式。适用性表达式使用运算符来组合或放弃选择。使用已注册的语法计算表达式时需要解析器。
要实施新的语法解析器,您需要使用以下位于 Arbortext Publishing Engine 服务器中的 lib\classes\applicability.jar 格式的 Java 包:
• com.ptc.arbortext.applicability.expression
此 Java 包中包含的界面支持通过选项和选择数据筛选内容时所需的适用性表达式对象。“选项”元素具有“名称”、“说明”和一组“选择”元素。“选项”和“选择”元素具有用于用户界面和适用性表达式中的标签属性。标签在每个“选项集”内必须唯一。
• com.ptc.arbortext.applicability.representation
此 Java 包中包含的界面支持元素、属性、内容和处理指令的适用性标记。
在有效载荷中,选项和选择包括在 OptionsDefinition.xml 文件中。
注册适用性语法
您需要在 Arbortext Publishing Engine 服务器上使用 ACL 函数注册适用性语法,然后才能在发布期间使用。使用以下注册函数:
applic::registerSyntax(NAME, TEST_XPATH, EXPR_XPATH, PARSER_CLASS)
• NAME 为适用性语法的名称。
• TEST_XPATH 为 XPath 布尔表达式,用于检查是否存在元素的适用性表达式。
• EXPR_XPATH 为 XPath 表达式,用于检索特定元素的适用性。
• PARSER_CLASS 为适用性语法解析器的类名称。
默认情况下,在服务器上可使用 ATO 解析器,注册如下 (忽略换行符):
applic::registerSyntax("ATO", "boolean(@*[namespace-uri() =
'http://arbortext.ptc.com/namespace/ATO'
and local-name() = 'applic'])",
"@*[namespace-uri() = 'http://arbortext.ptc.com/namespace/ATO'
and local-name() = 'applic']",
"com.ptc.arbortext.applicability.representation.ATOParser")
束中的适用性表达式
发布束期间不会执行适用性筛选。而会将适用性表达式转换为可在 Arbortext Content Delivery 中应用的格式。
发布结构适用性位于 LogicalExpression 元数据属性中。来自主题的适用性将复制到 {http://arbortext.ptc.com/namespace/ATO}applic 属性中,然后进行转换。
以下内嵌适用性参数适用于发布到束的结构:
• com.ptc.arbortext.pe.service/structureSourceApplicSyntax
指定用于服务结构中适用性表达式的适用性语法名称。指定 Arbortext Publishing Engine 服务器上由 applic::registerSyntax 注册的名称。如果未指定,则将使用 applicabilitySyntax 的值。如果未指定 applicabilitySyntax,则默认值为 ATO。
• com.ptc.arbortext.pe.service/structureTargetApplicSyntax
指定在服务子系统完成处理后用于适用性表达式的适用性语法名称。指定 Arbortext Publishing Engine 服务器上由 applic::registerSyntax 注册的名称。如果未指定,则将使用 applicabilitySyntax 的值。如果未指定 applicabilitySyntax,则默认值为 ATO。
• disableStructureApplicabilityConverter
指定是否在结构中查找并转换适用性表达式。指定 false (束的默认值) 可将其启用。指定 true 可将其禁用。默认情况下,对于 PDF 其为禁用状态。
以下内嵌适用性参数适用于在束中发布的结构:
• com.ptc.arbortext.pe.service/topicCcfParam.sourceApplicabilitySyntax
指定用于束主题内的适用性表达式的适用性语法名称。指定在 Arbortext Publishing Engine 服务器上注册的名称。如果未指定,则将使用 applicabilitySyntax 的值。如果未指定 applicabilitySyntax,则默认值为 ATO。
• com.ptc.arbortext.pe.service/topicCcfParam.targetApplicabilitySyntax
指定在服务子系统完成处理后用于主题内适用性表达式的适用性语法名称。指定在 Arbortext Publishing Engine 服务器上注册的名称。如果未指定,则将使用 applicabilitySyntax 的值。如果未指定 applicabilitySyntax,则默认值为 APEX。
• com.ptc.arbortext.pe.service/topicCcfParam.disableApplicabilityConverter
指定是否在主题中查找并转换适用性表达式。指定 false (默认值) 可将其启用。指定 true 可将其禁用。
配置文件适用性表达式
信息元素可以具有创作时所应用的配置文件。使用适用性语法可以将配置文件标记转换为适用性表达式。配置文件转换由布尔发布参数 com.ptc.arbortext.pe.service/topicCcfParam.disableProfilingConverter 控制。
例如,以下标记可在 XML 文档中找到,其中 os 和 userlevel 可指定配置文件:
<chapter os="Windows Vista;Unix" userlevel="Novice">
将 APEX 语法指定为适用性表达式的发布请求会把配置文件信息转换为下列标记:
<book xmlns:prf=http://arbortext.ptc.com/namespace/
applicability/profiling prf:syntax="APEX"
prf:optionSet="axdocbook">
<chapter prf:applic="(AND (IS 'os' 'Windows Vista' 'Unix')
(IS 'userlevel' 'Novice'))">
</chapter>
</book>
顶级 prf 的命名空间 URI 可指定配置文件的配置。命名空间配置文件属性由 com.ptc.arbortext.pe.service/topicCcfParam.profilingAttribute 发布参数指定。
prf:syntax 属性可指定表达式的语法。prf:optionSet 属性可指定正在使用的配置文件的文档类型。
prf:applic 属性将放置在包含配置文件标记的元素中,并分配到已转换的表达式。
当使用 com.ptc.arbortext.pe.service/topicCcfParam.removeProfilingMarkup 发布参数发布至束时,原始配置文件属性可以从信息元素中移除。
在发布有效负载中,OptionsDefinition.xml 文件包含配置文件选项集的列表。在之前的示例中,选项集可能如下所示:
<OptionSet container="axdocbook.pcf" token="_oset_axdocbook_pcf"
label="Operating System, User Level, Output Type, Security Level Options">
<Option label="os" token="_opt_axdocbook_os"><Name>Operating System</Name>
<Choice label="Windows XP" token="_ch_axdocbook_pcf_os_windows_xp">
<Name>Windows XP</Name></Choice>
<Choice label="Windows Vista" token="_ch_axdocbook_pcf_os_windows_vista">
<Name>Windows Vista</Name></Choice>
<Choice label="Windows 7" token="_ch_axdocbook__pcf_os_windows_7">
<Name>Windows 7</Name></Choice>
<Choice label="Unix" token="_ch_axdocbook_pcf_os_unix">
<Name>Unix</Name></Choice>
</Option>
<Option label="userlevel" token="_opt_axdocbook_pcf_userlevel">
<Name>User Level</Name>
<Choice label="Novice" token="_ch_axdocbook_pcf_userlevel_novice">
<Name>Novice</Name></Choice>
<Choice label="Typical" token="_ch_axdocbook_pcf_userlevel_typical">
<Name>Typical</Name></Choice>
<Choice label="Expert" token="_ch_axdocbook_pcf_userlevel_expert">
<Name>Expert</Name></Choice>
</Option>
</OptionSet>
有关配置文件发布参数的详细信息,请参阅
服务工作器参数。