如何覆盖 DITA 映射中的 keydef?

Posted

技术标签:

【中文标题】如何覆盖 DITA 映射中的 keydef?【英文标题】:How to override keydef in DITA maps? 【发布时间】:2020-08-21 09:40:06 【问题描述】:

我有一个主题和两个 ditamap。我想覆盖嵌套 ditamap 中的变量。有可能吗?

root.ditamap

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN"
"map.dtd">
<map>
  <title>Root</title>
  <keydef keys="testvar">
    <topicmeta>
      <linktext>testvalue</linktext>
    </topicmeta>
  </keydef>
  <topicref href="test.dita"/>
  <mapref href="test.ditamap"/>
</map>

test.ditamap

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN"
"map.dtd">
<map>
  <title>Testmap</title>
  <keydef keys="testvar">
    <topicmeta>
        <linktext>othervalue</linktext>
    </topicmeta>
  </keydef>
  <topicref href="test.dita"/>
</map>

test.dita

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN"
"topic.dtd">
<topic id="test">
  <title>Test header</title>
  <body>
    <p>var: <keyword keyref="testvar"/></p>
  </body>
</topic>

然后我运行命令:

dita -i root.ditamap -f html5

结果是两个链接指向同一个文件test.html

Root
  Test header
  Test header

test.html 内容

<!DOCTYPE html
  SYSTEM "about:legacy-compat">
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="UTF-8"><meta name="copyright" content="(C) Copyright 2020"><meta name="DC.rights.owner" content="(C)$
  <h1 class="title topictitle1" id="ariaid-title1">Test header</h1>

  <div class="body">
    <p class="p">var: <span class="keyword">test</span></p>
  </div>
</article></main></body></html>

但我希望两个文件具有不同的变量值。

【问题讨论】:

【参考方案1】:

默认情况下,根据 DITA 标准,键被设置为它被初始化并用于整个 DITA 资源集的第一个值,因此定义键不像在编程语言中那样可以重新定义相同的值本地上下文中的变量名。 但是在 DITA 1.3 标准中添加了一个称为键作用域的概念:

http://docs.oasis-open.org/dita/dita/v1.3/errata02/os/complete/part3-all-inclusive/langRef/attributes/the-key-scope-attribute.html#keyscope-attribute

这意味着如果在“test.ditamap”中将根地图元素上的“keyscope”属性设置为某个值(该值无关紧要),这意味着该键在该键中将具有不同的值范围。 使用键范围的其他示例:

https://blog.oxygenxml.com/keyscopes/keyscopesBlog.html

【讨论】:

以上是关于如何覆盖 DITA 映射中的 keydef?的主要内容,如果未能解决你的问题,请参考以下文章

如何在通过dita-ot生成pdf时使用父topicref中的navtitle而不是child one

使用 DITA-OT 在 Eclipse InfoCenter TOC 中设置***链接

DITA OT 中的主题编号更简单?

我需要如何在氧气中使用名为 com.elovirta.ooxml 的 DITA OT 插件将 dita 转换为 word 的步骤

docker-compose环境会覆盖jar中的变量,docker环境变量和jar中的变量是如何映射的?

在 DITA OT 1.8.5 中使用插件 com.elovirta.ooxml 将 DITA 转换为 DOCX