Как переопределить ключевое слово в картах DITA? - PullRequest
1 голос
/ 06 мая 2020

У меня одна топи c и две дитамапы. Я хочу переопределить переменную во вложенной карте. Возможно ли это?

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

2 голосов
/ 07 мая 2020

По умолчанию в соответствии со стандартом 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" в элементе карты root на некоторое значение (значение не имеет большого значения), это означает, что ключ будет иметь это другое значение внутри этой области действия ключа. Другие примеры использования ключевых областей:

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

...