如何覆盖 DITA 映射中的 keydef?

How to override keydef in DITA maps?

我有一个主题和两个ditamaps。我想覆盖嵌套 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>

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

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

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