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

<!-- XML Common Logic 1.0 DTD (XML Namespace Prefixed)

     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: xcl1p.dtd,v 1.1 2005/12/05 23:36:55 altheim Exp $

     This DTD has the following formal public identifiers:

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

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

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

         <!DOCTYPE xcl:text PUBLIC
             "ISO/IEC 24707:2006//DTD XCL Markup Language//EN//PFX">
             "xcl1p.dtd">

         <!DOCTYPE xcl:text PUBLIC
             "-//purl.org/xcl//DTD XML Common Logic (XCL) 1.0//EN//PFX"
             "xcl1p.dtd">

     where the system identifier ("xcl1p.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.

     Note: other than the lexical differences imposed by the XML
     Namespace prefix used in this DTD, it is otherwise identical
     to the XCL 1.0 DTD (xcl1.dtd).
-->

<!-- 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
    "( xcl:quantified | xcl:forall | xcl:exists )"
>

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

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

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

<!ENTITY % Comment.class
   "xcl:comment"
>

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

<!ENTITY % XCL.xmlns.attrib
    "xmlns:xcl     %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 xcl:comment  %Comment.content; >
<!ATTLIST xcl: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
   "( xcl:module | xcl:phrase | %Comment.class; )*"
>
<!ELEMENT xcl:text  %Text.content; >
<!ATTLIST xcl: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
   "( xcl:import | xcl:exclude | xcl:phrase | %Comment.class; )*"
>
<!ELEMENT xcl:module  %Module.content; >
<!ATTLIST xcl: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 xcl:phrase  %Phrase.content; >
<!ATTLIST xcl: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 xcl:import  %Import.content; >
<!ATTLIST xcl: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
   "( xcl:term )*"
>
<!ELEMENT xcl:exclude  %Exclude.content; >
<!ATTLIST xcl: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
   "( xcl:guard?, xcl: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 xcl:forall  %Quantified.content; >
<!ATTLIST xcl: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 xcl:exists  %Quantified.content; >
<!ATTLIST xcl: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 xcl:quantified  %Quantified.content; >
<!ATTLIST xcl: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
   "( xcl:term, %Comment.class;* )"
>

<!ELEMENT xcl:guard  %Guard.content; >
<!ATTLIST xcl: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 xcl:var  %Var.content; >
<!ATTLIST xcl: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 xcl:and  %Boolean.content; >
<!ATTLIST xcl: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 xcl:or  %Boolean.content; >
<!ATTLIST xcl: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 xcl:not  %Not.content; >
<!ATTLIST xcl: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 xcl:implies  %ImpliesIff.content; >
<!ATTLIST xcl: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 xcl:iff  %ImpliesIff.content; >
<!ATTLIST xcl: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 xcl:boolean  %Boolean.content; >
<!ATTLIST xcl: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
   "( xcl:relation, ( xcl:term* | xcl:role* ), %Comment.class;* )"
>

<!ELEMENT xcl:atomic  %Atomic.content; >
<!ATTLIST xcl: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
   "( xcl:term, %Comment.class;* )"
>
<!ELEMENT xcl:relation  %Relation.content; >
<!ATTLIST xcl: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
   "( xcl:term, xcl:term )"
>
<!ELEMENT xcl:equal  %Equal.content; >
<!ATTLIST xcl: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
   "( xcl:term, %Comment.class;* )"
>
<!ELEMENT xcl:role  %Role.content; >
<!ATTLIST xcl: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
   "( ( xcl:function, xcl:term+ )?, %Comment.class;* )"
>
<!ELEMENT xcl:term  %Term.content; >
<!ATTLIST xcl: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
   "( xcl:term, %Comment.class;* )"
>
<!ELEMENT xcl:function  %Function.content; >
<!ATTLIST xcl: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//PFX"
         dtd-system-id="http://purl.org/xcl/1.0/xcl1p.dtd"
         renamer-att="XCLnames"
         doc-elem-form="xcl:text"
       ?>
-->

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