<?xml version="1.0" encoding="UTF-8"?>

<!-- 

DTD CoGXML 1.5

This DTD allow representation of a support, representation of a conceptual graph and representation of graph rules.

To apply this DTD, use the following syntax:
<!DOCTYPE CoGXML PUBLIC "-//COGITANT//CoGXML Format Specification 1.4//EN" "http://cogitant.sourceforge.net/cogxml.dtd">

This file is part of Cogitant which is a library facilitating construction of applications using conceptual graphs.  It is under GPL licence.
http://cogitant.sourceforge.net
Cogitant version 5.2.91 - Last change of the DTD : 2011-04-18

-->

<!-- Attribute Extensions of standard tags. -->

<!ENTITY % cogxmlExtensions "">

<!ENTITY % supportExtensions "">
<!ENTITY % conceptTypesExtensions "">
<!ENTITY % relationTypesExtensions "">
<!ENTITY % nestingTypesExtensions "">
<!ENTITY % conformityExtensions "">
<!ENTITY % bannedTypesExtensions "">
<!ENTITY % allBannedExtensions "">
<!ENTITY % supportObjectExtensions "">
<!ENTITY % ctypeExtensions "">
<!ENTITY % rtypeExtensions "">
<!ENTITY % ntypeExtensions "">
<!ENTITY % markerExtensions "">
<!ENTITY % orderExtensions "">
<!ENTITY % bannedTypeExtensions "">
<!ENTITY % modulesExtensions "">
<!ENTITY % moduleExtensions "">

<!ENTITY % graphExtensions "">
<!ENTITY % environmentObjectExtensions "">
<!ENTITY % nodeExtensions "">
<!ENTITY % conceptExtensions "">
<!ENTITY % nestingExtensions "">
<!ENTITY % relationExtensions "">
<!ENTITY % edgeExtensions "">

<!ENTITY % ruleExtensions "">
<!ENTITY % positiveConstraintExtensions "">
<!ENTITY % negativeConstraintExtensions "">
<!ENTITY % conPtsExtensions "">
<!ENTITY % coupleExtensions "">

<!ENTITY % subPropExtensions "">


<!-- Document. -->

<!ELEMENT cogxml (support?, (graph | rule | positiveConstraint | negativeConstraint)*)>
<!ATTLIST cogxml
	app CDATA #IMPLIED
	%cogxmlExtensions;
>


<!-- Additional properties for each object of the model -->

<!ELEMENT subprop EMPTY>
<!ATTLIST subprop
	subid CDATA #REQUIRED
	%subPropExtensions;
>


<!-- Translation of an objet of the model. -->

<!ELEMENT translation EMPTY>
<!ATTLIST translation
	lang CDATA #REQUIRED
	label CDATA #REQUIRED
	descr CDATA #IMPLIED
>

<!-- Support.
	Add Attribute: if set to true, elements of the support are added to the
	previously loaded support. 
	If set to false (or not set at all), the elements of the support replace
	all previously loaded elements.-->
	
<!ELEMENT support (conceptTypes, relationTypes?, nestingTypes?, conformity?, bannedTypes?, modules?, subprop*)>
<!ATTLIST support
	name CDATA #IMPLIED
	add (true|false) "false"
	%supportExtensions;
>

<!ELEMENT conceptTypes (ctype*, order*)>
<!ATTLIST conceptTypes
	%conceptTypesExtensions;
>

<!ELEMENT ctype (translation*, subprop*)>
<!ATTLIST ctype
	id ID #IMPLIED
	label CDATA #REQUIRED
	%supportObjectExtensions;
	%ctypeExtensions;
>

<!ELEMENT order EMPTY>
<!ATTLIST order
	id1 IDREF #IMPLIED
	id2 IDREF #IMPLIED 
	label1 CDATA #IMPLIED 
	label2 CDATA #IMPLIED
>

<!ELEMENT relationTypes (rtype*, order*)>
<!ATTLIST relationTypes
	%relationTypesExtensions;
>

<!ELEMENT rtype (translation*, subprop*)>
<!ATTLIST rtype
	id ID #IMPLIED
	label CDATA #REQUIRED 
	idSignature CDATA #IMPLIED
	labelSignature CDATA #IMPLIED
	%supportObjectExtensions;
	%rtypeExtensions;
>

<!ELEMENT nestingTypes (ntype*, order*)>
<!ATTLIST nestingTypes
	%nestingTypesExtensions;
>

<!ELEMENT ntype (translation*, subprop*)>
<!ATTLIST ntype
	id ID #IMPLIED
	label CDATA #REQUIRED
	%supportObjectExtensions;
	%ntypeExtensions;
>

<!ELEMENT conformity (marker*)>
<!ATTLIST conformity
	%conformityExtensions;
>

<!ELEMENT marker (translation*, subprop*)>
<!ATTLIST marker
	id ID #IMPLIED
	label CDATA #REQUIRED
	idType IDREF #IMPLIED
	labelType CDATA #IMPLIED
	%supportObjectExtensions;
	%markerExtensions;
>

<!ELEMENT bannedTypes (bannedType | allBanned)*>
<!ATTLIST bannedTypes
	%bannedTypesExtensions;
>

<!ELEMENT bannedType (type*)>
<!ATTLIST bannedType
	%bannedTypeExtensions;
>
<!ELEMENT allBanned (type*)>
<!ATTLIST allBanned
	%allBannedExtensions;
>
<!ELEMENT type EMPTY>
<!ATTLIST type
	id CDATA #IMPLIED
	label CDATA #IMPLIED
>	

<!ELEMENT modules (module*)>
<!ATTLIST modules
	%modulesExtensions;
>

<!ELEMENT module (conceptTypes, relationTypes?, nestingTypes?)>
<!ATTLIST module
	id ID #IMPLIED
	label CDATA #REQUIRED
	%moduleExtensions;
>


<!-- Graph -->

<!ELEMENT graph (concept*, relation*, edge*, subprop*)>
	<!-- Attributes pointer and pointerMarker are forbidden when nature
	is not "individual". -->
<!ATTLIST graph
	id ID #REQUIRED
	nature CDATA #IMPLIED
	set CDATA #IMPLIED 
	pointer IDREF #IMPLIED 
	pointerMarker CDATA #IMPLIED 
	%environmentObjectExtensions;
	%nodeExtensions;
	%graphExtensions;
>

<!ELEMENT concept (type*, value?, nesting*, subprop*)>
	<!-- If the concept type is conjunctive, idType and labelType attributes
	are not stated but "type" elements are nested in the "concept"
	element.
	For an untyped value, idDatatype attribute has to be used with an empty
	value. -->
<!ATTLIST concept
	id ID #REQUIRED
	idType CDATA #IMPLIED
	labelType CDATA #IMPLIED
	idDatatype CDATA #IMPLIED
	coreferenceClass CDATA #IMPLIED
	referent (generic|individual|variable|value|genericvalue) "generic"
	idMarker CDATA #IMPLIED
	labelMarker CDATA #IMPLIED
	%nodeExtensions;
	%conceptExtensions;
>

<!ELEMENT value (#PCDATA)>
<!ATTLIST value >

<!ELEMENT nesting (subprop*)>
<!ATTLIST nesting
	idType CDATA #IMPLIED
	labelType CDATA #IMPLIED
	nestGraph CDATA #REQUIRED
	%nodeExtensions;
	%nestingExtensions;
>

<!ELEMENT relation (subprop*)>
<!ATTLIST relation
	id ID #REQUIRED
	idType CDATA #IMPLIED
	labelType CDATA #IMPLIED
	%nodeExtensions;
	%relationExtensions;
>

<!ELEMENT edge EMPTY>
<!ATTLIST edge
	rid IDREF #REQUIRED
	cid IDREF #REQUIRED
	label CDATA #REQUIRED
	%edgeExtensions;
>


<!-- Rule. -->

<!ELEMENT rule (hypt, conc, conPts, subprop*)>
<!ATTLIST rule
	id ID #REQUIRED
	%environmentObjectExtensions;
	%ruleExtensions;
>

<!ELEMENT hypt (graph*)>

<!ELEMENT conc (graph*)>

<!ELEMENT conPts (couple*)>
<!ATTLIST conPts
	%conPtsExtensions;
>

<!ELEMENT couple EMPTY>
<!ATTLIST couple
	idC1 IDREF #REQUIRED
	idC2 IDREF #REQUIRED
	%coupleExtensions;
>


<!-- Constraint. -->

<!ELEMENT positiveConstraint (condition, obligation, conPts, subprop*)>
<!ATTLIST positiveConstraint
	id ID #REQUIRED
	%environmentObjectExtensions;
	%positiveConstraintExtensions;
>

<!ELEMENT negativeConstraint (condition?, interdiction, conPts, subprop*)>
<!ATTLIST negativeConstraint
	id ID #REQUIRED
	%environmentObjectExtensions;
	%negativeConstraintExtensions;
>

<!ELEMENT condition (graph*)>

<!ELEMENT obligation (graph*)>

<!ELEMENT interdiction (graph*)>


