如何使用DITA subjectSchemes?

时间:2013-02-26 23:03:54

标签: dita

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

问题:如果要为属性值添加定义,请执行此操作?

答案:您可以选择以下几种方式:

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

问题:您是否可以将subjectScheme专精化与元数据元素结合使用?

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

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

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

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

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

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

答案 1 :(得分: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>

主题方案地图呈现为“仅限资源”(无论它们是否具有该值),因此它不适合渲染。