<!-- DTD for SHOE -->
<!-- Last Mod: 1/1/98 -->

<!ENTITY % shoe.content "ONTOLOGY | INSTANCE" >

<!-- The following three entity declarations are used to override
     the HTML content model for blocks, so that an ONTOLOGY or
     INSTANCE can appear anywhere a block can. Typically this is
     as a top level element in the BODY of the HTML document -->

<!ENTITY % list "UL | OL |  DIR | MENU">

<!ENTITY % preformatted "PRE">

<!ENTITY % block
     "P | %list | %preformatted | DL | DIV | CENTER |
      BLOCKQUOTE | FORM | ISINDEX | HR | TABLE | %shoe.content;">


<!-- Declarations for ontologies -->
<!ELEMENT ONTOLOGY		- -  (USE-ONTOLOGY |DEF-CATEGORY | 
				      DEF-RELATION | DEF-RENAME |
				      DEF-INFERENCE | DEF-CONSTANT |
				      DEF-TYPE)* >

<!ATTLIST ONTOLOGY
	id		CDATA	#REQUIRED
	version		CDATA	#REQUIRED
	description	CDATA	#IMPLIED 
	declarators	CDATA	#IMPLIED
	backward-compatible-with	CDATA	#IMPLIED >

<!ELEMENT USE-ONTOLOGY		- O  EMPTY >
<!ATTLIST USE-ONTOLOGY
	id		CDATA	#REQUIRED
	version		CDATA	#REQUIRED
	prefix		CDATA	#REQUIRED
	url		CDATA	#IMPLIED >

<!ELEMENT DEF-CATEGORY		- O  EMPTY >
<!ATTLIST DEF-CATEGORY
	name		CDATA	#REQUIRED
	isa		CDATA	#IMPLIED
	description	CDATA	#IMPLIED
	short		CDATA	#IMPLIED >

<!ELEMENT DEF-RELATION		- -  (DEF-ARG)* >
<!ATTLIST DEF-RELATION
	name		CDATA	#REQUIRED
	short		CDATA	#IMPLIED
	description	CDATA	#IMPLIED >

<!ELEMENT DEF-ARG		- O  EMPTY >
<!ATTLIST DEF-ARG
	pos		CDATA	#REQUIRED
	type		CDATA	#REQUIRED
	short		CDATA	#IMPLIED >
<!-- pos must be either an integer, or one of the strings: FROM or TO -->
	
<!ELEMENT DEF-RENAME		- O  EMPTY >
<!ATTLIST DEF-RENAME
	from		CDATA	#REQUIRED
	to		CDATA	#REQUIRED >

<!ELEMENT DEF-CONSTANT		- O  EMPTY >
<!ATTLIST DEF-CONSTANT
	name		CDATA	#REQUIRED		
	category	CDATA	#IMPLIED >

<!ELEMENT DEF-TYPE		- O  EMPTY >
<!ATTLIST DEF-TYPE
	name		CDATA	#REQUIRED	
	description	CDATA	#IMPLIED
	short		CDATA	#IMPLIED >

<!-- Declarations for inferences -->
<!-- Inferences consist of if and then parts, each of which
     can contain multiple relation and category clauses -->
<!ELEMENT DEF-INFERENCE	- - (INF-IF, INF-THEN) >
<!ATTLIST DEF-INFERENCE
	description	CDATA 	#IMPLIED >
<!ELEMENT INF-IF		- -  (CATEGORY | RELATION | COMPARISON)+ >
<!ELEMENT INF-THEN		- -  (CATEGORY | RELATION)+ >
<!ELEMENT COMPARISON		- -  (ARG, ARG) >
<!ATTLIST COMPARISON
	op	(equal | notEqual | greaterThan |
		 greaterThanOrEqual | lessThanOrEqual |
		 lessThan)	#REQUIRED >

<!-- Declarations for instances -->
<!ELEMENT INSTANCE		- -  (USE-ONTOLOGY | CATEGORY | RELATION |
				      INSTANCE)* >
<!ATTLIST INSTANCE
	key		CDATA	#REQUIRED
	delegate-to	CDATA	#IMPLIED >

<!ELEMENT CATEGORY		- O  EMPTY >
<!ATTLIST CATEGORY
	name		CDATA	#REQUIRED
	for		CDATA	#IMPLIED
	usage		(VAR | CONST)	CONST >
<!-- If VAR is specified for a category that is not within a <DEF-INFERENCE>,
	then it is ignored -->

<!ELEMENT RELATION		- -  (ARG)* >
<!ATTLIST RELATION
	name		CDATA	#REQUIRED >
<!ELEMENT ARG			- O  EMPTY >
<!ATTLIST ARG
	pos		CDATA	#REQUIRED
	value		CDATA	#REQUIRED
	usage		(VAR | CONST)	CONST >

<!-- pos must be either an integer, or one of the strings: FROM or TO -->
<!-- If VAR is specified for an arg that is not within a <DEF-INFERENCE>,
	then it is ignored -->

<!-- Include DTD for HTML -->
<!ENTITY % HTMLDTD PUBLIC "-//W3C//DTD HTML 3.2 Final//EN" >
%HTMLDTD;
