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

# HEADER

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

# MODULE:    DITA Concept

# 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 Concept//EN"
#       Delivered as file "concept.mod"

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

# SYSTEM:     Darwin Information Typing Architecture (DITA)

#

# PURPOSE:    Define elements and specialization atttributes

# for Concepts

#

# 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: Removed old declaration for

# conceptClasses entity

# 2006.06.07 RDA: Added <abstract> element

# 2006.06.07 RDA: Make universal attributes universal

# (DITA 1.1 proposal #12)

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

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

# 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

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

# SPECIALIZATION OF DECLARED ELEMENTS

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

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

# ELEMENT NAME ENTITIES

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

namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"

conbody = conbody.element
# =============================================================

# DOMAINS ATTRIBUTE OVERRIDE

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

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

# ELEMENT DECLARATIONS

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

# LONG NAME: Concept
concept.element =
  element concept {
    concept.attlist,
    title,
    titlealts?,
    (shortdesc | abstract)?,
    prolog?,
    conbody?,
    related-links?,
    concept-info-types*
  }
concept.attlist &=
  attribute id { xsd:ID },
  attribute conref { text }?,
  select-atts,
  localization-atts,
  arch-atts,
  attribute outputclass { text }?,
  [
    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: Concept Body
conbody.element =
  element conbody { conbody.attlist, body.cnt*, (section | example)* }
conbody.attlist &=
  id-atts,
  localization-atts,
  attribute outputclass { text }?
# =============================================================

# SPECIALIZATION ATTRIBUTE DECLARATIONS

# =============================================================
concept.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/topic concept/concept " ]
  attribute class { text }?
conbody.attlist &=
  global-atts,
  [ a:defaultValue = "- topic/body  concept/conbody " ]
  attribute class { text }?
# ================== End DITA Concept  ========================
