Как переопределить keydef в картах DITA?

У меня есть одна тема и два дитамапа. Я хочу переопределить переменную во вложенном 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>

тест.дита

<?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>

Но я ожидаю два файла с разным значением переменной.


person Artem Ryzhov    schedule 06.05.2020    source источник


Ответы (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

person Radu Coravu    schedule 07.05.2020