# =============================================================

# HEADER

# =============================================================

# MODULE:    DITA DITA Topic

# VERSION:   1.1

# DATE:      June 2006

#

# =============================================================

# =============================================================

# PUBLIC DOCUMENT TYPE DEFINITION

# TYPICAL INVOCATION

#

# Refer to this file by the following public identifier or an 
#       appropriate system identifier 
# PUBLIC "-//OASIS//ELEMENTS DITA Topic//EN"
#       Delivered as file "topic.mod"

# =============================================================

# SYSTEM:     Darwin Information Typing Architecture (DITA)

#

# PURPOSE:    Declaring the elements and specialization

# attributes for the base Topic type

#

# ORIGINAL CREATION DATE:

# March 2001

#

# (C) Copyright OASIS Open 2005, 2006.

# (C) Copyright IBM Corporation 2001, 2004.

# All Rights Reserved.

#

# UPDATES:

# 2005.11.15 RDA: Corrected the public ID for tblDecl.mod

# 2005.11.15 RDA: Removed old declaration for topicreftypes

# entity

# 2005.11.15 RDA: Corrected the PURPOSE in this comment

# 2005.11.15 RDA: Corrected Long Names for alt, indextermref

# 2006.06.06 RDA: Bug fixes:

# Added xref and fn to fig.cnt

# Remove xmlns="" from global-atts

# 2006.06.06 RDA: Moved shared items to commonElements file

# 2006.06.07 RDA: Added <abstract> element

# 2006.06.07 RDA: Make universal attributes universal

# (DITA 1.1 proposal #12)

# 2006.06.14 RDA: Add dir attribute to localization-atts

# 2006.06.20 RDA: defn.cnt now explicitly sets its content

# 2006.07.06 RDA: Moved class attributes in from topicAttr

# =============================================================

# =============================================================

# ARCHITECTURE ENTITIES

# =============================================================

# default namespace prefix for DITAArchVersion attribute can be
# overridden through predefinition in the document type shell

# must be instanced on each topic type

namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace ditaarch = "http://dita.oasis-open.org/architecture/2005/"

arch-atts =
  [ a:defaultValue = "1.1" ]
  attribute ditaarch:DITAArchVersion { string "1.1" }?
# =============================================================

# ELEMENT NAME ENTITIES

# =============================================================

# Definitions of declared elements
include "topicDefn.ent.rnc"
# Content elements common to map and topic
include "commonElements.mod.rnc"
# MetaData Elements, plus indexterm
include "metaDecl.mod.rnc"
# =============================================================

# ENTITY DECLARATIONS FOR ATTRIBUTE VALUES

# =============================================================

# =============================================================

# COMMON ATTLIST SETS

# =============================================================
body.cnt =
  basic.block
  | required-cleanup
  | data.elements.incl
  | foreign.unknown.incl
section.cnt =
  text
  | basic.ph
  | basic.block
  | title
  | txt.incl
  | data.elements.incl
  | foreign.unknown.incl
section.notitle.cnt =
  text
  | basic.ph
  | basic.block
  | txt.incl
  | data.elements.incl
  | foreign.unknown.incl
# =============================================================

# COMMON ENTITY DECLARATIONS

# =============================================================

# for use within the DTD and supported topics; these will NOT work
# outside of this DTD or dtds that specialize from it!

# =============================================================

# NOTATION DECLARATIONS

# =============================================================

# DITA uses the direct reference model; 
# notations may be added later as required

# =============================================================

# STRUCTURAL MEMBERS

# =============================================================
info-types = topic.element
# =============================================================

# COMMON ATTLIST SETS

# =============================================================

# Copied into metaDecl.mod

# <!ENTITY % date-format 'CDATA'                                >
rel-atts =
  attribute type { text }?,
  attribute role {
    "parent"
    | "child"
    | "sibling"
    | "friend"
    | "next"
    | "previous"
    | "cousin"
    | "ancestor"
    | "descendant"
    | "sample"
    | "external"
    | "other"
  }?,
  attribute otherrole { text }?
# =============================================================

# SPECIALIZATION OF DECLARED ELEMENTS

# =============================================================
topic-info-types = info-types
# =============================================================

# DOMAINS ATTRIBUTE OVERRIDE

# =============================================================

# =============================================================

# ELEMENT DECLARATIONS

# =============================================================

# LONG NAME: Topic
topic.element =
  element topic {
    topic.attlist,
    title,
    titlealts?,
    (shortdesc | abstract)?,
    prolog?,
    body?,
    related-links?,
    topic-info-types*
  }
topic.attlist &=
  attribute id { xsd:ID },
  attribute conref { text }?,
  select-atts,
  localization-atts,
  attribute outputclass { text }?,
  arch-atts,
  [
    a:defaultValue =
      "(topic ui-d) (topic hi-d) (topic pr-d) (topic sw-d)                          (topic ut-d) (topic indexing-d)"
  ]
  attribute domains { text }?
# LONG NAME: Title Alternatives
titlealts.element =
  element titlealts { titlealts.attlist, navtitle?, searchtitle? }
titlealts.attlist &= univ-atts
# LONG NAME: Navigation Title
navtitle.element = element navtitle { navtitle.attlist, words.cnt* }
navtitle.attlist &= univ-atts
# LONG NAME: Search Title
searchtitle.element =
  element searchtitle { searchtitle.attlist, words.cnt* }
searchtitle.attlist &= univ-atts
# LONG NAME: Abstract
abstract.element =
  element abstract {
    abstract.attlist, (section.notitle.cnt | shortdesc)*
  }
abstract.attlist &=
  univ-atts,
  attribute outputclass { text }?
# LONG NAME: Short Description

# <!ELEMENT shortdesc     (%title.cnt;)*                               >
# <!ATTLIST shortdesc    
#              %univ-atts;
#              outputclass 
#                         CDATA                            #IMPLIED    >

# LONG NAME: Body
body.element =
  element body { body.attlist, (body.cnt | section | example)* }
body.attlist &=
  univ-atts,
  attribute outputclass { text }?
# LONG NAME: No Topic nesting
no-topic-nesting.element =
  element no-topic-nesting { no-topic-nesting.attlist, empty }
# LONG NAME: Section
section.element = element section { section.attlist, section.cnt* }
section.attlist &=
  attribute spectitle { text }?,
  univ-atts,
  attribute outputclass { text }?
# LONG NAME: Example
example.element = element example { example.attlist, section.cnt* }
example.attlist &=
  attribute spectitle { text }?,
  univ-atts,
  attribute outputclass { text }?
# LONG NAME: Description

# Desc is used in context with figure and 
# table titles and also for content models 
# within linkgroup and object (for 
# accessibility)

# <!ELEMENT desc          (%desc.cnt;)*                                >
# <!ATTLIST desc           
#              %univ-atts;
#              outputclass 
#                         CDATA                            #IMPLIED    >

# =============================================================

# PROLOG (METADATA FOR TOPICS)

# TYPED DATA ELEMENTS

# =============================================================

# typed content definitions

# typed, localizable content

# LONG NAME: Prolog
prolog.element =
  element prolog {
    prolog.attlist,
    author*,
    source?,
    publisher?,
    copyright*,
    critdates?,
    permissions?,
    metadata*,
    resourceid*,
    (data.elements.incl | foreign.unknown.incl)*
  }
prolog.attlist &= univ-atts
# LONG NAME: Metadata
metadata.element =
  element metadata {
    metadata.attlist,
    audience*,
    category*,
    keywords*,
    prodinfo*,
    othermeta*,
    (data.elements.incl | foreign.unknown.incl)*
  }
metadata.attlist &=
  univ-atts,
  attribute mapkeyref { text }?
# =============================================================

# BASIC DOCUMENT ELEMENT DECLARATIONS

# (rich text)

# =============================================================

# =============================================================

# BASE FORM PHRASE TYPES

# =============================================================

# =============================================================

# LINKING GROUPING

# =============================================================

# LONG NAME: Related Links
related-links.element =
  element related-links {
    related-links.attlist, (link | linklist | linkpool)+
  }
related-links.attlist &=
  rel-atts,
  univ-atts,
  attribute format { text }?,
  attribute scope { "local" | "peer" | "external" }?,
  attribute outputclass { text }?
# LONG NAME: Link
link.element = element link { link.attlist, linktext?, desc? }
link.attlist &=
  attribute href { text }?,
  attribute keyref { text }?,
  attribute query { text }?,
  rel-atts,
  univ-atts,
  attribute format { text }?,
  attribute scope { "local" | "peer" | "external" }?,
  attribute outputclass { text }?
# LONG NAME: Link Text
linktext.element = element linktext { linktext.attlist, words.cnt* }
linktext.attlist &= univ-atts
# LONG NAME: Link List
linklist.element =
  element linklist {
    linklist.attlist, title?, desc?, (linklist | link)*, linkinfo?
  }
linklist.attlist &=
  attribute collection-type {
    "unordered" | "sequence" | "choice" | "tree" | "family"
  }?,
  attribute duplicates { "yes" | "no" }?,
  attribute mapkeyref { text }?,
  rel-atts,
  univ-atts,
  attribute spectitle { text }?,
  attribute format { text }?,
  attribute scope { "local" | "peer" | "external" }?,
  attribute outputclass { text }?
# LONG NAME: Link Information
linkinfo.element = element linkinfo { linkinfo.attlist, desc.cnt* }
linkinfo.attlist &= univ-atts
# LONG NAME: Link Pool
linkpool.element =
  element linkpool { linkpool.attlist, (linkpool | link)* }
linkpool.attlist &=
  attribute collection-type {
    "unordered" | "sequence" | "choice" | "tree" | "family"
  }?,
  attribute duplicates { "yes" | "no" }?,
  attribute mapkeyref { text }?,
  rel-atts,
  univ-atts,
  attribute format { text }?,
  attribute scope { "local" | "peer" | "external" }?,
  attribute outputclass { text }?
# =============================================================

# MODULES CALLS

# =============================================================

# Table Elements

# 2005.11.15 RDA: Corrected the public ID for tblDecl.mod,

# from the old value "-//OASIS//ELEMENTS DITA CALS Tables//EN"

# Tables are now part of commonElements

# <!ENTITY % tableXML       PUBLIC  
# "-//OASIS//ELEMENTS DITA Exchange Table Model//EN" 
# "tblDecl.mod"                                                        >
# %tableXML;

# =============================================================

# SPECIALIZATION ATTRIBUTE DECLARATIONS

# =============================================================
abstract.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/abstract " ] attribute class { text }?
body.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/body " ] attribute class { text }?
example.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/example " ] attribute class { text }?
link.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/link " ] attribute class { text }?
linkinfo.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/linkinfo " ] attribute class { text }?
linklist.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/linklist " ] attribute class { text }?
linkpool.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/linkpool " ] attribute class { text }?
linktext.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/linktext " ] attribute class { text }?
metadata.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/metadata " ] attribute class { text }?
navtitle.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/navtitle " ] attribute class { text }?
no-topic-nesting.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/no-topic-nesting " ]
  attribute class { text }?
prolog.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/prolog " ] attribute class { text }?
related-links.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/related-links " ]
  attribute class { text }?
searchtitle.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/searchtitle " ] attribute class { text }?
section.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/section " ] attribute class { text }?
titlealts.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/titlealts " ] attribute class { text }?
topic.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/topic " ] attribute class { text }?
# Shortdesc in map uses map/shortdesc so this one must be 
# included, even though the element is common.
shortdesc.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/shortdesc " ] attribute class { text }?
# ================== End DITA Topic  ==========================
