<!-- ....................................................................... -->
<!-- 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: xcl1.dtd,v 1.18 2005/12/05 23:28:20 altheim Exp $

     This DTD has the following formal public identifiers:

         "ISO/IEC 24707:2006//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:2006//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.
-->

<!-- a Uniform Resource Identifier, see clause 3.24 and [7]
-->
<!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/" >

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

<!-- C.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"
>

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

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

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

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

<!-- C.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:  see clauses 3.8, 7.1
-->

<!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;'"
>

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

<!-- Name:         comment
     URI:          http://purl.org/xcl/1.0/#comment
     Label:        Comments
     Description:  see clause 6.1.1.3
-->

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

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

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

<!-- Name:         text
     URI:          http://purl.org/xcl/1.0/#text
     Label:        XCL document element
     Description:  see clause 6.1.1.1
-->

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

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

<!-- Name:         module
     URI:          http://purl.org/xcl/1.0/#module
     Label:        XCL Module
     Description:  see clause 6.1.1.4
-->

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

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

<!-- Name:         phrase
     URI:          http://purl.org/xcl/1.0/#phrase
     Label:        Phrase
     Description:  see clause 6.1.1.2
-->

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

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

<!-- Name:         import
     URI:          http://purl.org/xcl/1.0/#import
     Label:        Import
     Description:  see clause 6.1.1.5
-->

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

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

<!-- Name:         exclude
     URI:          http://purl.org/xcl/1.0/#exclude
     Label:        Module Exclusions
     Description:  see clause 6.1.1.4
-->

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

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

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

<!-- Name:         syntaxType
     URI:          http://purl.org/xcl/1.0/#syntaxType
     Label:        Syntax Type
     Description:  see clauses C.3.1.3, C.3.2.6
-->

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

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

<!-- Name:         logicalFormOf
     URI:          http://purl.org/xcl/1.0/#logicalFormOf
     Label:        Logical-Form-Of
     Description:  see TBD
-->

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

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

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

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

<!-- Name:         forall
     URI:          http://purl.org/xcl/1.0/#forall
     Label:        Universal Quantifier
     Description:  see clause 6.1.1.7
-->

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

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

<!-- Name:         exists
     URI:          http://purl.org/xcl/1.0/#exists
     Label:        Existential Quantifier
     Description:  see clause 6.1.1.7
-->

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

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

<!-- Name:         quantified
     URI:          http://purl.org/xcl/1.0/#quantified
     Label:        Quantified Sentence - Generic Form
     Description:  see clauses 6.1.1.7, C.3.0.1
-->

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

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

<!-- Name:         guard
     URI:          http://purl.org/xcl/1.0/#guard
     Label:        Quantifier Guard
     Description:  see clauses A.2.3.8, C.3.1
-->

<!ENTITY % Guard.content
   "( term, %Comment.class;* )"
>

<!ELEMENT guard  %Guard.content; >
<!ATTLIST guard
   %Common.attrib;
>

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

<!-- Name:         var
     URI:          http://purl.org/xcl/1.0/#var
     Label:        Variable
     Description:  see TBD
-->

<!ENTITY % Var.content
   "( %Comment.class;* )"
>

<!ELEMENT var  %Var.content; >
<!ATTLIST var
   %Common.attrib;
   name            NMTOKEN             #REQUIRED
   sort            NMTOKEN             #IMPLIED
>

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

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

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

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

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

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

<!-- Name:         or
     URI:          http://purl.org/xcl/1.0/#or
     Label:        Disjunction
     Description:  see clause 6.1.1.8
-->
<!ELEMENT or  %Boolean.content; >
<!ATTLIST or
   %Common.attrib;
   %logicalFormOf.attrib;
   syntaxType      %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#or'
>

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

<!-- Name:         not
     URI:          http://purl.org/xcl/1.0/#not
     Label:        Negation
     Description:  see clause 6.1.1.8
-->
<!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'
>

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

<!-- Name:         implies
     URI:          http://purl.org/xcl/1.0/#implies
     Label:        Implication
     Description:  see clause 6.1.1.8
-->
<!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'
>

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

<!-- Name:         iff
     URI:          http://purl.org/xcl/1.0/#iff
     Label:        Biconditional
     Description:  see clause 6.1.1.8
-->
<!ELEMENT iff  %ImpliesIff.content; >
<!ATTLIST iff
   %Common.attrib;
   %logicalFormOf.attrib;
   syntaxType      %URI.datatype;      #FIXED 'http://purl.org/xcl/1.0/#iff'
>

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

<!-- Name:         boolean
     URI:          http://purl.org/xcl/1.0/#boolean
     Label:        Boolean Sentence - Generic Form
     Description:  see clauses 6.1.1.8, C.3.2
-->
<!ELEMENT boolean  %Boolean.content; >
<!ATTLIST boolean
   %Common.attrib;
   sort            NMTOKEN             #IMPLIED
   href            %URI.datatype;      #REQUIRED
   %syntaxType.attrib;
>

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

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

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

<!ENTITY % Atomic.content
   "( relation, ( term* | role* ), %Comment.class;* )"
>

<!ELEMENT atomic  %Atomic.content; >
<!ATTLIST atomic
   %Common.attrib;
   href            %URI.datatype;      #IMPLIED
   %logicalFormOf.attrib;
   %syntaxType.attrib;
>

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

<!-- Name:         relation
     URI:          http://purl.org/xcl/1.0/#relation
     Label:        Relation
     Description:  see TBD
-->

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

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

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

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

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

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

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

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

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

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

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

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

<!-- Name:         function
     URI:          http://purl.org/xcl/1.0/#function
     Label:        Function
     Description:  see clause 6.1.1.11
-->

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

<!-- Architectural support declaration ............................

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

       <?IS24707
         arch name="xcl"
         public-id="ISO/IEC 24707:2006//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 -->
