2

DITA 中的 subjectScheme 是一种适合创建元数据分类的格式,但它应该如何真正使用呢?具体来说,我的问题涉及以下方面:

  1. 它可以用于表示元数据元素,还是仅用于表示元数据属性?我只看到它应用于属性,这使得它有点受限,因为据我所知,元素通常用于检索元数据,即不用于过滤的元数据。
  2. 如果您可以将它用于元素,该值是否仍应位于 subjectdef 的“keys”属性中?
  3. 如果你想为元数据值添加定义/描述,你会在哪里做呢?
  4. 您可以/应该发布主题方案吗?我已经看到它暗示它不适合发布,因为它的资源默认属性。但这不是限制吗?如果您使用它来创建分类法,您肯定还想要一种简单的方法来发布它以造福于用户吗?
4

2 回答 2

5

我将尽力解决您最初的问题。总体而言,subjectScheme 专业化旨在创建主题分类和受控值。它具有定义可用于检索的主题分类以及定义和控制属性值的强大功能。目前,DITA-OT 仅提供属性控制值领域的功能。

问题:“它可以用于表示元数据元素还是仅表示元数据属性”?

答:我不会说它的目的是“表示元素或属性”。它旨在代表主题和受控价值。它的设计基于键,因此大量使用属性。

问题:如果您想为属性值添加定义,您在哪里做?

答:您有多种选择:

  • 您可以创建描述主题或属性值的关联主题。您可以使用 subjectdef 元素上的 @href 属性来引用本主题。这对于提供一致定义或有关何时应使用条件处理值的信息特别有用。
  • 您可以在 subjectdef 元素中嵌套一个 topicmeta 元素;在 topicmeta 元素中,您可以访问 shortdesc 和 navtitle 元素。
  • 您将内容添加到 subjectdef 元素的 @navtitle 属性。我不建议这样做,因为 @navtitle 属性已被弃用并且通常无法翻译。

问题:您可以将 subjectScheme 特化与元数据元素一起使用吗?

回答:是的。在我的脑海中,这是一种基于 HTML 的输出格式的直接可能性和设计:

  • 对于特定主题,将 topicmeta 元素添加到 subjectdef 元素。在 topicmeta 元素中,您可以完全访问所有元数据元素。添加尽可能多的元数据元素。
  • 将 DITA 主题与相关主题相关联。这可以通过使用特定的属性和值来完成,也可以通过使用分类域中的 subjectref 元素来完成。
  • 调整输出处理,以便与该主题关联的每个 DITA 主题都将元数据写入 HTML,就像元数据元素位于 DITA 主题本身一样。通过这种设计,您已经强制执行一致性,并且由于基于密钥的架构、易于维护和抽象层。

问题:你们可以发布主题方案吗?

回答:是的,如果使用 @href 属性为 subjectdef 元素引用主题。虽然默认情况下,subjectScheme 元素的@processing-role 属性设置为“resource-only”,@toc 属性设置为“no”,您可以修改这些值,它们将在整个地图中级联,使其成为可能生成输出。当然,这只是目前使用 DITA-OT 可以做到的;使用自定义处理实现,可能性是无限的。

我认为 subjectScheme 映射和分类域提供了许多令人兴奋的可能性,包括分面和过滤浏览(用于输出)和分面搜索(用于 DITA 源)。

我希望构建使用 subjectScheme 和分类的实现的人们将分享故事,演示他们的实现等等。我认为这将使 DITA 架构的这一部分可以做的事情更清晰,更易于人们使用。

于 2013-03-10T18:21:59.017 回答
2

就 DITA-OT 而言,我认为您只能将其用于使用 DITAVAL 文件对元素进行条件处理(过滤和标记)。

我认为主题方案地图的潜力远不止于此。它们可以用于分面浏览,因此我们可以省去静态主题图。静态内容似乎只是属于前网络时代。DITA略显沉稳的气场就可以这样解决。

无论如何,这是您目前可以执行的操作:

主题方案图:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE subjectScheme PUBLIC "-//OASIS//DTD DITA Subject Scheme Map//EN" "map.dtd"> 
<subjectScheme>
    <hasInstance>
        <subjectdef keys="all_routes">
            <subjectdef keys="every_route">
                <subjectdef keys="anglia"/>
                <subjectdef keys="east_midlands"/>
                <subjectdef keys="kent"/>
                <subjectdef keys="lne_london_north_eastern"/>
                <subjectdef keys="lnw_london_north_western"/>
                <subjectdef keys="scotland"/>
                <subjectdef keys="wales"/>
                <subjectdef keys="sussex"/>
                <subjectdef keys="wessex"/>
               <subjectdef keys="western"/>
            </subjectdef>
        </subjectdef>
    </hasInstance>

    <enumerationdef>
        <attributedef name="route"/>
        <!-- Above is my new specialized attribute "routes"! -->
     <subjectdef keyref="all_routes"/>
    </enumerationdef>

这是带有元数据的主题文本:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE task PUBLIC "-//OASIS//DTD DITA General Task//EN" "task.dtd">
<task id="task_ozd_ckn_qh">
  <title>Route specialization test</title>
  <shortdesc route="">This tests the new route attribute!</shortdesc>
  <taskbody>
     <section>
         <title>Lines of text</title>
         <p route="anglia">Anglia text text text text text text.</p>
         <p route="sussex">Sussex text text text text text text.</p>
         <p route="east_midlands">East Midlands text text text text text.</p>
         <p route="kent">Kent text text text text text text.</p>
         <p route="lne_london_north_eastern"NE text text text text text text.</p>
         <p route="lnw_london_north_western">LNW text text text text text text.</p>
         <p route="scotland">Scotland text text text text text text.</p>
         <p route="sussex"Sussex text text text text text text.</p>
         <p route="wales">Wales text text text text text text.</p>
         <p route="western">Western text text text text text text.</p>
         <p route="wessex">Wessex text text text text text text.</p>
         <p route="every_route">Text.</p>
         <p>Not profiled.</p>
     </section>
  </taskbody>

这是 DITAVAL 过滤器:

  <prop action="exclude" att="route"/>
  <prop action="include" att="route" val="scotland"/>

这将淘汰除标有“苏格兰”的路线之外的所有其他路线。

基本上就是这样。

您可以像这样将元数据添加到主题方案映射中:

   <subjectdef keys="story_attributedef">

       <subjectdef keys="monster">
           <hasKind>
               <subjectdef keys="zarbi" href="glossary/contemporary.dita">
                   <topicmeta>
                       <navtitle>The Zarbi</navtitle>
                       <shortdesc>Ant-like creature</shortdesc>
                   </topicmeta>
               </subjectdef>

主题方案映射被渲染为“仅资源”(无论它们是否具有该值),因此它不适合渲染。

于 2013-02-28T13:41:18.340 回答