【问题标题】:How to use DITA subjectSchemes?如何使用 DITA subjectSchemes?
【发布时间】:2013-02-26 23:03:54
【问题描述】:

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

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

【问题讨论】:

    标签: dita


    【解决方案1】:

    我将尽我所能解决您最初的问题。总体而言,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 架构的这一部分可以做的事情更清晰,更易于人们使用。

    【讨论】:

    • 我想你误解了我一点。特别是,当您解释它时,我没有问您是否可以使用包含元数据元素的 subjectScheme。我的意思是如果你可以用它来表示元数据元素(而不是属性)。你说这不是特别适合任何一个。我的意思是您可以使用它,例如在 Oxygen 中,获取属性值的预定义列表。我希望元数据元素也一样。但也许这仅仅取决于供应商的实施......不过,你有一些非常有趣的观点,我喜欢你所说的关于发布(续)
    • (接上一条评论)所以对我来说,如果你可以发布它,例如DITA OT(OOTB?),您可以通过主题引用包含定义,这与我想要的很接近。但问题是,我看到了更好的潜力(在我看来),但并不完全。我希望能够直接在 subjectScheme 中方便地添加定义,然后,如果只有供应商支持将其用于预定义的元素值,以及方案的方便编辑格式,它将作为一个方便的分类工具工作,用于创建分类法并能够发布其文档...
    • @Anders,您可以使用 subjectScheme 定义属性的受控值。因为属性采用 CDATA。元素的潜在内容要宽松得多,因此不能容纳在枚举列表中。
    • 我奖励你赏金,因为你确实有一个很好的答案,无论我认为 subjectScheme 是否好。 (总的来说,我这样做,但在某些方面有所欠缺)我仍然对 subjectScheme 模型不太满意,但这不是你的错 :-) 总的来说,我认为 subjectScheme 和 DITA 元数据模型的意图都已收到太少关注了,需要在这方面进行澄清。
    【解决方案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>
    

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

    【讨论】:

    • 谢谢,但那是为了过滤,我已经知道了,除了包含我可能会研究的词汇表数据,我会给你+1。但它并没有真正回答我的问题,即使用它来定义元数据元素的分类(即不过滤属性)。我不确定,但它似乎只针对属性,如果是这样,那就太可惜了,因为它似乎非常适合定义元数据关键字等等,规范本身说应该建立在分类法上。
    猜你喜欢
    • 2023-03-20
    • 2017-12-04
    • 2016-10-18
    • 2017-06-01
    • 2020-03-03
    • 2013-02-12
    • 1970-01-01
    • 2017-05-17
    • 2020-08-21
    相关资源
    最近更新 更多