2

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

根.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>

测试.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>

测试.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>

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

4

1 回答 1

3

默认情况下,根据 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

于 2020-05-07T06:50:37.880 回答