<!-- ....................................................................... -->
<!-- XML Common Logic 1.0 DTD .............................................. -->
<!-- file: xcl1.dtd
-->
<!-- XML Common Logic 1.0 DTD

     This is XCL, a formulation of Common Logic as an XML application.
     Copyright 2005 ISO/IEC All Rights Reserved.

     Permission to use, copy, modify and distribute the XCL DTD and its
     accompanying documentation for any purpose and without fee is hereby
     granted in perpetuity, provided that the above copyright notice and
     this paragraph appear in all copies. The copyright holders make no
     representation about the suitability of the DTD for any purpose.
     It is provided "as is" without expressed or implied warranty.

        Authors:    Murray M. Altheim <m.altheim@open.ac.uk>
                    Pat Hayes <phayes@ihmc.us>
        Status:     Draft
        Revision:   $Id: xcl1c.dtd,v 1.8 2005/12/05 23:11:15 altheim Exp $

     This DTD has the following formal public identifiers:

         "ISO/IEC 24707:2007//DTD XML Common Logic (XCL) 1.0//EN"

         "-//purl.org/xcl//DTD XML Common Logic (XCL) 1.0//EN"

     The DTD may be invoked by one of the following declarations:

         <!DOCTYPE text PUBLIC
                  "ISO/IEC 24707:2007//DTD XCL Markup Language//EN">
                  "xcl1.dtd">
             <!DOCTYPE text PUBLIC
                 "-//purl.org/xcl//DTD XML Common Logic (XCL) 1.0//EN"
                 "xcl1.dtd">

     where the system identifier ("xcl1.dtd") may be customized as
     necessary to specify the location of the DTD.

     If there is any perceived difference between the prose of the
     ISO standard and the XCL DTD, the former should be considered
     authoritive.
-->

<!-- Comments in the DTD

     The comments in this DTD which use the expressions "must", "shall"
     or "shall not" are normative requirements of this International
     Standard. Comments which use the expression "should" or "should
     not" are recommendations of this International Standard. Comments
     which use the verbs "recommend" or "deprecate" are recommendations
     and deprecations of this International Standard.
-->

<!-- a Uniform Resource Identifier, see clause 3.27
     of this International Standard and [8]
-->
<!ENTITY % URI.datatype "CDATA" >

<!-- XML namespace support ............................. -->

<!-- The XML Namespace URI for XCL 1.0 is

       "http://purl.org/xcl/1.0/"
-->
<!ENTITY XCL1.xmlns "http://purl.org/xcl/1.0/" >

<!-- 1. General Syntax ..................................................... -->

<!-- 1.1 Content Models .......................................... -->

<!ENTITY % Quantified.class
     "( quantified | forall | exists )"
>

<!ENTITY % Boolean.class
     "( boolean | and | or | implies | iff | not )"
>

<!ENTITY % Atomic.class
     "( atomic | relation | equal )"
>

<!ENTITY % Sentence.class
     "( %Quantified.class; | %Boolean.class; | %Atomic.class; )"
>
<!ENTITY % Comment.class
    "comment"
>

<!-- 1.2 Attributes .............................................. -->

<!-- 1.2.1 Common Attributes

     The following attributes are declared on all XCL element types
     (though are not included in the descriptive text within the notes).

         xmlns (optional) All XCL elements have a declared, optional
             'xmlns' attribute whose fixed, default value matches the
             XML Namespace for XCL 1.0. XML processors may imply this
             attribute when not explicitly present in the document
             instance.

         id (optional) All XCL elements have a declared, optional 'id'
             attribute whose value must match XML Name (production 5 of
             [XML]). When present, the ID value serves as the means of
             uniquely identifying a specific element within an XCL
             document. Note that this operates at the XML syntax level
             and has no semantic significance within CL. Each 'id' value
             must be unique within an XCL document.
-->

<!ENTITY % XCL.xmlns.attrib
    "xmlns         %URI.datatype;      #FIXED '&XCL1.xmlns;'"
>

<!ENTITY % id.attrib
    "id            ID                  #IMPLIED"
>

<!ENTITY % Common.attrib
    "%XCL.xmlns.attrib;
     %id.attrib;"
>

<!-- 1.2.2 CL Dialect Attribute ........................ -->

<!-- Name:         dialect
     URI:          http://purl.org/xcl/1.0/#dialect
     Declares:     http://purl.org/xcl/1.0/#dialect-xcl
                   http://purl.org/xcl/1.0/#dialect-clif
                   http://purl.org/xcl/1.0/#dialect-cgif
     Label:        CL Dialect
     Description:  an identifier for the CL dialect of the
                   element's content; see clauses 3.8 and
                   7.1 of this International Standard
-->
<!-- Notes:

     The 'dialect' attribute is used to indicate the dialect of its
     element's content. 'dialect' is a linking attribute whose value
     (a URI reference) contains a reference to one of the fixed set
     of CL dialect identifiers:

         http://purl.org/xcl/1.0/#dialect-xcl
         http://purl.org/xcl/1.0/#dialect-clif
         http://purl.org/xcl/1.0/#dialect-cgif

     For other concrete syntax representations, a suitable URI indicating
     the dialect should be used. In all XCL elements for which the
     'dialect' attribute is declared, its absence indicates the default:
     the XCL dialect defined by this DTD.

     Note that the presence of a 'dialect' attribute overrides any
     'dialect' attributes on parent elements; however, such parent-child
     dialect clashes are deprecated.

     This attribute is declared on the <text>, <module>, <import>, and
     <phrase> elements.

       Example:

           <text dialect="http://purl.org/xcl/1.0/#dialect-clif">
             (forall ex:romanceNovel ((x man)) (exists ((y woman))
             (and (loves x y) (not (loves y x))) ))
           </text>
-->

<!ENTITY XCL.dialect "http://purl.org/xcl/1.0/#dialect-xcl" >
<!ENTITY CLIF.dialect "http://purl.org/xcl/1.0/#dialect-clif" >
<!ENTITY CGIF.dialect "http://purl.org/xcl/1.0/#dialect-cgif" >

<!ENTITY % dialect.attrib
   "dialect        %URI.datatype;      '&XCL.dialect;'"
>

<!-- 1.3 Comments ................................................ -->

<!-- Name:         comment
     URI:          http://purl.org/xcl/1.0/#comment
     Label:        Comments
     Description:  Inserts a comment. <comment> elements can
                   be included within any XCL element and are
                   considered as comments on their immediate
                   parent element; see clause 6.1.1.3 of this
                   International Standard
-->
<!-- Notes:

     When well-formed XML processing is acceptable (see the section on
     XCL conformance), <comment> elements can comprise any text, can be
     mixed content, and can have any user-defined attributes; they are
     ignored by logical processors, but conforming XCL applications are
     required to preserve them and their position relative to other
     elements. Comments inside other comments are considered to be
     comments on the comment. In most cases, XCL content models include
     comments as the last children of the parent element.

     Note that XCL markup inside a comment is not considered to be part
     of the XCL containing element, and must also be suitably escaped.

     For situations where rich comment markup is desired but valid XCL is
     required, comments may contain a link to an external documentation
     source using the 'href' attribute:

           <comment href="http://www.acme.com/docs/sec7.html"/>

     If both element content and the 'href' attribute are present, the
     latter is considered optional, i.e., traversing the link is not
     considered essential to ascertain the contents of the comment.

     With appropriate XML Namespace declarations, the %Comment.class;
     parameter entity can be redeclared to contain alternative XML
     content, e.g., XHTML or DocBook.

           <!ENTITY % Comment.class
                 "( xhtml:div | comment )"
           >
-->

<!ENTITY % Comment.content
   "( #PCDATA | %Comment.class; )*"
>
<!ELEMENT comment %Comment.content; >
<!ATTLIST comment
   %Common.attrib;
   href            %URI.datatype;      #IMPLIED
>

<!-- 2. Top Level Elements ................................................. -->

<!-- 2.1 XCL Document Element .................................... -->

<!-- Name:         text
     URI:          http://purl.org/xcl/1.0/#text
     Label:        XCL document element
     Description:  Used to surround any piece of XCL content, as the
                   delimiters of an XCL (i.e., XML) document. Text inside
                   this element must be valid XCL. It need not be a module
                   (ontology) See the XCL Conformance section for details
                   on well-formedness constraints. See clause 6.1.1.1 of
                   this International Standard.
-->

<!-- Notes:

     Attributes:

         xml:base (optional) Indicates the document base URI.

         dialect (optional) see description in 1.2.2 of this section. When
             not explicitly specified, this attribute defaults to the value
             indicating the XCL 1.0 (XML) syntax.

         href (optional) Used to assign an "importing name" to a text. This
             is a URI reference or IRI, and often it will be the same as
             xmlns default namespace and/or the URL of the containing
             document. However, this coincidence of naming is not required.
             No logical relationship is assumed between names based on their
             URI or XML namespace structure, so it is acceptable to use a
             URI reference containing a fragment ID to name a text.

     Children:

         Zero or more <module>, <phrase>, and/or <comment> elements in
         any order.

     Example:

         <text dialect="http://purl.org/xcl/1.0/#dialect-xcl">
           <phrase>
             ...
           </phrase>
         </text>
-->

<!ENTITY % Text.content
   "( module | phrase | %Comment.class; )*"
>
<!ELEMENT text %Text.content; >
<!ATTLIST text
    %Common.attrib;
    xml:base                 %URI.datatype;           #IMPLIED
    %dialect.attrib;
>

<!-- 2.2 XCL Modules ............................................. -->

<!-- Name:         module
     URI:          http://purl.org/xcl/1.0/#module
     Label:        XCL Module
     Description:  Indicates that the enclosed content is
                   considered to be an XCL module (aka
                   ontology); see clause 6.1.1.4 of this
                   International Standard
-->
<!-- Notes:

     An XCL module is a fragment of XCL markup which has special
     attributes and satisfies certain extra constraints. An XCL
     document may comprise a single module, so this element, if
     present, will be the single child element of the <text>
     document element; in this case the module wrapper is not
     required.

     The <module> element's 'href' attribute serves as one means
     of identifying the module, the other being use of the 'id'
     attribute used with the base URI of the document to form an
     identifier. This International Standard does not recommend
     one method over the other, as this is considered application-
     dependent. The latter has the advantage of tying the module
     URI to the base URI of the document (which may be considered
     a feature or a bug) but then relies upon the presence of the
     'xml:base' attribute on the <text> element. In its absence the
     base URI is considered arbitrary.

     Attributes:

         href (required) Used to assign an "importing name" to a module.
             This is a URI reference, and often it will be the same as
             the xmlns default namespace and/or the URL of the containing
             document. However, this coincidence of naming is not
             required. No logical relationship is assumed between names
             based on their URI or XML namespace structure, so it is
             acceptable to use a URI reference containing a fragment ID
             to name an ontology.

             One document may contain several modules named with URI
             references formed from the URI of the document itself.
             (Intuitively, rather than being required to be the absolute
             URI of a namespace, the ontology importing name may be
             treated like other names in a namespace. This allows one
             ontology to treat another ontology as an entity in its
             namespace.)

         dialect (optional) See description in 1.2.2 of this section

     Example:

         <module href="http://www.acme.com/vocab/#agent-vocab">
           ...
         </module>
-->

<!ENTITY % Module.content
   "( import | exclude | phrase | %Comment.class; )*"
>
<!ELEMENT module %Module.content; >
<!ATTLIST module
   %Common.attrib;
   href                 %URI.datatype;           #REQUIRED
   %dialect.attrib;
>

<!-- 2.3 Phrase Element .......................................... -->

<!-- Name:         phrase
     URI:          http://purl.org/xcl/1.0/#phrase
     Label:        Phrase
     Description:  Used to indicate a top-level sentence in XCL.
                   The single child element should be a sentence
                   element; see clause 6.1.1.2 of this
                   International Standard
-->
<!-- Notes:

     Attributes:

         dialect (optional) See description in 1.2.2 of this section

     Example:

         <phrase>
           TBD
         </phrase>
-->

<!ENTITY % Phrase.content
   "( %Sentence.class;, %Comment.class;* )"
>
<!ELEMENT phrase %Phrase.content; >
<!ATTLIST phrase
   %Common.attrib;
   %dialect.attrib;
>

<!-- 2.4 Import Element .......................................... -->

<!-- Name:         import
     URI:          http://purl.org/xcl/1.0/#import
     Label:        Import
     Description:  A linking element used to import one XCL
                   module into another. The value of the attribute
                   should be a reference to an identifier for an
                   XCL module; see clause 6.1.1.5 of this
                   International Standard
-->
<!-- Notes:

     Attributes:

         dialect (optional) may be included on an <import> element to
             indicate that the source should be encoded in that dialect.
             Conforming applications which find the XCL source to be
             encoded in a different dialect than the one indicated may
             either treat this as an error condition, or translate the
             source into the indicated dialect. Any error generated during
             the translation should be reported as a dialect error
             condition.

     Children:

         Zero or more <comment> child elements.

     Example:

         <import href="http://www.acme.com/vocab/agent-vocab.xcl"/>
-->

<!ENTITY % Import.content
    "( %Comment.class;* )"
>
<!ELEMENT import %Import.content; >
<!ATTLIST import
    %Common.attrib;
    href                     %URI.datatype;           #REQUIRED
    %dialect.attrib;
>

<!-- 2.5 Exclude Element ......................................... -->

<!-- Name:         exclude
     URI:          http://purl.org/xcl/1.0/#exclude
     Label:        Module Exclusions
     Description:  contains a sequence of zero or more <term> elements,
                   as wrappers for a set of CL names considered as the
                   exclusion set for the module. This indicates any names
                   in the text which are explicitly excluded from the
                   module's local universe; see clause 6.1.1.4 of this
                   International Standard
-->
<!-- Notes:

     This element is used to indicate that these terms do not denote
     "things" in the current ontology, i.e. that they are non-discourse
     operators not included in the local domain of quantification. This
     allows an ontology to have strict control over the size of its
     intended domain of discourse. Names not listed in such a header are
     treated as denoting terms in the ontology.

     Non-discourse terms can be used only in the relation or function
     position of atoms and terms in this module. They cannot be used as
     arguments or be bound by quantifiers in this module. Note however
     that a term may be non-discourse in one ontology but denoting in
     another ontology: the assignment of non-discourse status is local
     to this module.

     This element has no attributes and no child elements.

     Example:

         <exclude>
           <term name="cow"/>
           <term name="pig"/>
           <term name="moose"/>
         </exclude>
-->

<!ENTITY % Exclude.content
    "( term )*"
>
<!ELEMENT exclude %Exclude.content; >
<!ATTLIST exclude
   %Common.attrib;
>

<!-- 3. Sentence Elements .................................................. -->

<!-- 3.0.1 syntaxType Attribute .................................. -->

<!-- Name:         syntaxType
     URI:          http://purl.org/xcl/1.0/#syntaxType
     Label:        Syntax Type
     Description:  indicates the logical form of a generic sentence;
                   see sections 3.1.3, 3.2.6 of this section
-->
<!-- Notes:

     Quantified and boolean sentences can be stated "generically" with
     an optional 'syntaxType' attribute, whose value is a URI reference
     indicating the appropriate logical form. The 'syntaxType' link is
     provided for extensibility, to allow the inclusion of alternative
     logical syntax forms or patterns, e.g., numerical quantifiers or
     alternative boolean operators such as a binary conjunction or a
     Scheffer stroke. Currently there are no such extensions defined.

     The 'syntaxType' link is not used with the normal XCL quantifier
     and boolean sentence elements, which can be viewed as abbreviations
     for generic sentence elements with XCL-defined syntax types, e.g.,

         <forall>
           ...
         </forall>

     abbreviates

         <quantified syntaxType="http://purl.org/xcl/1.0/#forall">
           ...
         </quantified>

     Note that the 'dialect' attribute is not declared on sentence 
     elements.
-->

<!ENTITY % syntaxType.attrib
  "syntaxType            %URI.datatype;             #IMPLIED"
>

<!-- 3.0.2 logicalFormOf Attribute ..................... -->

<!-- Name:         logicalFormOf
     URI:          http://purl.org/xcl/1.0/#logicalFormOf
     Label:        Logical-Form-Of
     Description:  an optional attribute on all XCL sentence
                   elements, whose value is a URI reference
                   indicating a syntactic category in some
                   external language specification.
-->
<!-- Notes:

     This is intended to indicate that the sentence is the result of
     a content-preserving translation into XCL of the syntactic form
     indicated. The 'logicalFormOf' attribute of this element should
     indicate the appropriate categories of subexpressions of the
     external expression.

     Only one "external" translation can be specified for a given
     piece of XCL. To indicate that a single XCL sentence is the
     logical form of two distinct external syntaxes, it is necessary
     to write it twice, with suitable 'logicalFormOf' values for each
     external specification. (The repetition may be indicated by the
     use of XML standards external to XCL.) Currently there are no
     such external mappings defined.

     Example:

         A Horn rule might appear in XCL as a univerally quantified
         implication between a conjunction and an atom; the value of
         the 'logicalFormOf' attribute is considered as applied to its
         parent <forall> element, which might be

           "http://acme.com/rulespec/#hornrule"

         and that of the internal conjunction and atomic conclusion
         might then be

           "http://acme.com/rulespec/#body"  and
           "http://acme.com/rulespec/#head"  (substituting suitable URIs).

             <forall logicalFormOf="http://acme.com/rulespec/#hornrule">
               ...
             </forall>
-->

<!ENTITY % logicalFormOf.attrib
   "logicalFormOf            %URI.datatype;           #IMPLIED"
>

<!-- 3.1 Quantified Sentence Elements ............................ -->

<!ENTITY % Quantified.content
    "( guard?, var+, %Sentence.class;, %Comment.class;* )"
>

<!-- 3.1.1 Forall Element .............................. -->

<!-- Name:         forall
     URI:          http://purl.org/xcl/1.0/#forall
     Label:        Universal Quantifier
     Description:  This encloses a quantified sentence and 
                   indicates the universal quantifier; see 
                   clause 6.1.1.7 of this International Standard
-->

<!ELEMENT forall %Quantified.content; >
<!ATTLIST forall
    %Common.attrib;
    %logicalFormOf.attrib;
    syntaxType     %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#forall'
>

<!-- 3.1.2 Exists Element .............................. -->

<!-- Name:         exists
     URI:          http://purl.org/xcl/1.0/#exists
     Label:        Existential Quantifier
     Description:  This encloses a quantified sentence and 
                   indicates the existential quantifier; see 
                   clause 6.1.1.7 of this International Standard
-->

<!ELEMENT exists %Quantified.content; >
<!ATTLIST exists
    %Common.attrib;
    %logicalFormOf.attrib;
    syntaxType     %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#exists'
>

<!-- 3.1.3 Quantified Sentence - Generic Form .......... -->

<!-- Name:         quantified
     URI:          http://purl.org/xcl/1.0/#quantified
     Label:        Quantified Sentence - Generic Form
     Description:  see clause 6.1.1.7 of this International
                   Standard and 3.0.1 of this section
-->

<!ELEMENT quantified %Quantified.content; >
<!ATTLIST quantified
    %Common.attrib;
    sort           NMTOKEN             #IMPLIED
    href           %URI.datatype;      #REQUIRED
    %logicalFormOf.attrib;
    %syntaxType.attrib;
>

<!-- 3.1.4 Guard Element ............................... -->

<!-- Name:         guard
     URI:          http://purl.org/xcl/1.0/#guard
     Label:        Quantifier Guard
     Description:  This optional element contains a single <term>
                   element, which is used as the guard of the 
                   quantifier, if present; see clauses A.2.3.8 of
                   Annex A of this International Standard and 3.1 
                   of this section
-->
<!-- Notes:

     The <guard> element is used only inside quantifier elements,
     and must be the first child element if present.

     No attributes.

     Children:

         One required <term> element, followed by zero or more
         <comment> elements.

     Example:

         <forall>
           <guard>
             <term name="cow"/>
           </guard>
           TBD
         </forall>
-->

<!ENTITY % Guard.content
    "( term, %Comment.class;* )"
>
<!ELEMENT guard %Guard.content; >
<!ATTLIST guard
    %Common.attrib;
>

<!-- 3.1.5 Variable Element ............................ -->

<!-- Name:         var
     URI:          http://purl.org/xcl/1.0/#var
     Label:        Variable
     Description:  Encloses a name bound by a quantifier.
                   This must be a discourse name.
-->
<!-- Notes:

     Attributes:

         sort (optional). Value must be a name indicating the sort of
             the variable. This can be a non-discourse name.

     Children:

         Zero or more <comment> elements.

     Example:

         <var name="person"/>
-->

<!ENTITY % Var.content
    "( %Comment.class;* )"
>
<!ELEMENT var %Var.content; >
<!ATTLIST var
    %Common.attrib;
    name           NMTOKEN             #REQUIRED
    sort           NMTOKEN             #IMPLIED
>

<!-- 3.2 Boolean Sentence Elements ............................... -->

<!-- Notes:

         <and> </and>
         <or> </or>
         <not> </not>
         <implies> </implies>
         <iff> </iff>

     These all enclose boolean sentences and indicate the truth-function.
     The alternative generic form is

         <boolean syntaxType="http://purl.org/xcl/1.0/#and">
           ...
         </boolean>

     Only <implies> is order-sensitive: by convention, the first child
     element is the antecendent, the second is the conclusion. (XCL does
     not require <role> elements for boolean sentences, e.g.,
     antecedent/conclusion.)

     Attributes:

         syntaxType (optional) See 3.0.1 of this section. Note that for
             non-generic sentence elements (e.g., <and>) the 'syntaxType'
             attribute is declared with a fixed, default value matching
             the URI identifier for the element type.

         logicalFormOf (optional) See 3.0.2 of this section.

     Children:

         Any boolean sentence element can have children of any sentence
         type. <and> and <or> contains any number of children (including
         zero); <not> contains exactly one; <implies> and <iff> contains
         exactly two.

         This is followed by zero or more <comment> elements.
-->

<!ENTITY % Boolean.content
   "( %Sentence.class; | %Comment.class; )*"
>

<!-- 3.2.1 And Element ................................. -->

<!-- Name:         and
     URI:          http://purl.org/xcl/1.0/#and
     Label:        Conjunction
     Description:  see clause 6.1.1.8 of this International Standard
-->

<!ELEMENT and %Boolean.content; >
<!ATTLIST and
   %Common.attrib;
   %logicalFormOf.attrib;
   syntaxType      %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#and'
>

<!-- 3.2.2 Or Element .................................. -->

<!-- Name:         or
     URI:          http://purl.org/xcl/1.0/#or
     Label:        Disjunction
     Description:  see clause 6.1.1.8 of this International Standard
-->

<!ELEMENT or %Boolean.content; >
<!ATTLIST or
   %Common.attrib;
   %logicalFormOf.attrib;
   syntaxType      %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#or'
>

<!-- 3.2.3 Not Element ................................. -->

<!-- Name:         not
     URI:          http://purl.org/xcl/1.0/#not
     Label:        Negation
     Description:  see clause 6.1.1.8 of this International Standard
-->

<!ENTITY % Not.content
   "( %Sentence.class;, %Comment.class;* )"
>
<!ELEMENT not %Not.content; >
<!ATTLIST not
   %Common.attrib;
   %logicalFormOf.attrib;
   syntaxType      %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#not'
>

<!-- 3.2.4 Implies Element ............................. -->

<!-- Name:         implies
     URI:          http://purl.org/xcl/1.0/#implies
     Label:        Implication
     Description:  see clause 6.1.1.8 of this International Standard
-->

<!ENTITY % ImpliesIff.content
    "( ( %Sentence.class;, %Sentence.class; ), %Comment.class;* )"
>
<!ELEMENT implies %ImpliesIff.content; >
<!ATTLIST implies
    %Common.attrib;
    %logicalFormOf.attrib;
    syntaxType     %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#implies'
>

<!-- 3.2.5 Iff Element ................................. -->

<!-- Name:         iff
     URI:          http://purl.org/xcl/1.0/#iff
     Label:        Biconditional
     Description:  see clause 6.1.1.8 of this International Standard
-->

<!ELEMENT iff %ImpliesIff.content; >
<!ATTLIST iff
    %Common.attrib;
    %logicalFormOf.attrib;
    syntaxType     %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#iff'
>

<!-- 3.2.6 Boolean Sentence - Generic Form ............. -->

<!-- Name:         boolean
     URI:          http://purl.org/xcl/1.0/#boolean
     Label:        Boolean Sentence - Generic Form
     Description:  see clause 6.1.1.8 of this International Standard
                   and 3.2 of this section
-->

<!ELEMENT boolean %Boolean.content; >
<!ATTLIST boolean
    %Common.attrib;
    sort           NMTOKEN             #IMPLIED
    href           %URI.datatype;      #REQUIRED
    %syntaxType.attrib;
>

<!-- 3.3 Atomic Sentence Elements ................................ -->

<!-- Notes:

     Atomic sentence indicating that a relation holds true of some
     arguments. The first child element always indicates the relation;
     this may be a non-discourse name. XCL allows two distinct forms
     for specifying arguments of a relation, as an ordered list or as
     a collection of role-value pairs. The latter form is indicated by
     a 'syntaxType' attribute on the <atomic> element containing the
     'href' attribute value of:

         http://purl.org/xcl/1.0/#roleset

     Attributes:

         syntaxType (optional) See 3.0.1 of this section

         logicalFormOf (optional) See 3.0.2 of this section

     Children:

         One required <relation> element, followed by either zero or
         more <term> elements or zero or more <role> elements. This
         is then followed by zero or more <comment> elements.

   Example:

       <atomic>
         TBD
       </atomic>
-->

<!-- 3.3.1 Atomic Element .............................. -->

<!-- Name:         atomic
     URI:          http://purl.org/xcl/1.0/#atomic
     Label:        Atomic Sentence
     Description:  see clause 6.1.1.9 of this International Standard
-->

<!ENTITY % Atomic.content
   "( relation, ( term* | role* ), %Comment.class;* )"
>
<!ELEMENT atomic %Atomic.content; >
<!ATTLIST atomic
   %Common.attrib;
   href            %URI.datatype;      #IMPLIED
   %logicalFormOf.attrib;
   %syntaxType.attrib;
>

<!-- 3.3.2 Relation Element ............................ -->

<!-- Name:         relation
     URI:          http://purl.org/xcl/1.0/#relation
     Label:        Relation
     Description:  Encloses a <term> element. The name may
                   be non-discourse.
-->
<!-- Notes:

     No attributes.

     Children:

         One <term> followed by zero or more <comment> elements.

     Example:

         <relation>
           TBD
         </relation>
-->

<!ENTITY % Relation.content
   "( term, %Comment.class;* )"
>
<!ELEMENT relation %Relation.content; >
<!ATTLIST relation
    %Common.attrib;
>

<!-- 3.3.3 Equal Element ............................... -->

<!-- Name:         equal
     URI:          http://purl.org/xcl/1.0/#equal
     Label:        Equality
     Description:  see clause A.2.3.4 of this International Standard
-->
<!-- Notes:

     No attributes.

     Children:

         There must be exactly two <term> elements.

     Example:

         <equal>
           <term name="Robert Dobbs"/>
           <term name="Bob Dobbs"/>
         </equal>
-->

<!ENTITY % Equal.content
    "( term, term )"
>
<!ELEMENT equal %Equal.content; >
<!ATTLIST equal
    %Common.attrib;
>

<!-- 3.3.4 Role Element ................................ -->

<!-- Name:         role
     URI:          http://purl.org/xcl/1.0/#role
     Label:        Role
     Description:  see clause A.2.3.5 of this International Standard
-->
<!-- Notes:

     Attributes:

         name (required) The value is a name which indicates the role of
             the content in the atom. Role names denote binary relations
             in CL, and may be non-discourse.

     Children:

         One required <term> element indicating the argument "filler" of
         the slot, followed by zero or more <comment> elements.

     Example:

         An atom using the role syntax:

             <atomic href="http://purl.org/xcl/1.0/#roleset">
               <relation>married</relation>
               <role name="wife">
                  <term name="Jill"/>
               </role>
               <role name="husband">
                  <term name="Jack"/>
               </role>
             </atomic>
-->

<!ENTITY % Role.content
   "( term, %Comment.class;* )"
>
<!ELEMENT role %Role.content; >
<!ATTLIST role
   %Common.attrib;
   name            NMTOKEN             #REQUIRED
>

<!-- 3.4 Term and Function Elements .............................. -->

<!-- 3.4.1 Term Element ................................ -->

<!-- Name:         term
     URI:          http://purl.org/xcl/1.0/#term
     Label:        Term
     Description:  see clause 6.1.1.10 of this International Standard
-->
<!-- Notes:

     The <term> element may take one of two forms (ignoring any
     <comment> elements, which are not grammatically significant):

     1. As an empty element, it encloses a name contained in its 'name'
        attribute, and is permissible as the immediate child of a <guard>,
        <var>, <sort>, <relation>, <function> or <role> element.

     2. When it has element content, this indicates a term obtained by
        applying a function to some arguments. The first child element
        denotes the function and can be a term element. The name may
        be non-discourse.

     Attributes:

         When no <function> or <term> elements are present, the 'name'
         attribute is required (though this is not constrained by the DTD).

     Children:

         An optional sequence of one <function> element followed by one or
         more <term> elements, followed by zero or more <comment> elements.

     Examples:

         <term name="cow"/>
         <term>
           <function>
             <term name="pig"/>
             <term name="cow"/>
           </function>
           <term name="barnyard"/>
         </term>
-->

<!ENTITY % Term.content
   "( ( function, term+ )?, %Comment.class;* )"
>
<!ELEMENT term %Term.content; >
<!ATTLIST term
   %Common.attrib;
   name            CDATA               #IMPLIED
>

<!-- 3.4.2 Function Element ............................ -->

<!-- Name:         function
     URI:          http://purl.org/xcl/1.0/#function
     Label:        Function
     Description:  Encloses a <term> element. The name may
                   be non-discourse; see clause 6.1.1.11 of
                   this International Standard
-->
<!-- Notes:

     No attributes.

     Children:

         One <term> element followed by zero or more <comment> elements.

     Example:

         <function>
           TBD
         </function>
-->

<!ENTITY % Function.content
   "( term, %Comment.class;* )"
>
<!ELEMENT function %Function.content; >
<!ATTLIST function
   %Common.attrib;
>

<!-- Architecture support declaration ................................

     In order to use the XCL 1.0 document type definition as a base
     architecture for other SGML/XML applications, the following
     architecture support declaration should be used:

    <?IS10744:arch
      name="xcl"
      public-id="ISO/IEC 24707:2007//NOTATION Common Logic (CL)//EN"
      dtd-public-id="ISO/IEC 24707:2007//DTD XML Common Logic (XCL) 1.0//EN"
      dtd-system-id="http://purl.org/xcl/1.0/xcl1.dtd"
      renamer-att="XCLnames"
      doc-elem-form="text"
    ?>
-->

<!-- end of XCL 1.0 DTD -->

