<!--
# 
# Program:		$RCSfile: JX-model3.dtd,v $  $Revision: 40.22 $
# 
# Purpose:		JX-model ver. 1.3.14.
# 
# Author:		H.Yoshida  2002/12/28
#			S.Yamamoto  2003/02/13
# 
# (C) Copyright:	H.Yoshida and S.Yamamoto  2002 - 2003
#			This file is a product of the project Sapid.
# 
-->

<!--
Note:
(1) Anonymous class has some problems.

(2) Element "nl"'s attribute "line" should be "#REQUIRED".
 -->

<!ELEMENT File		(Package|Import|Class|Intf|op|comment|sp|nl)*>
<!ELEMENT Package	(QName|kw|op|comment|sp|nl)*>
<!ELEMENT Import	(QName|kw|op|comment|sp|nl)*>
<!ELEMENT Class		(Type|Expr|ImplOpt|ExtdOpt|Members|ident|kw|op|comment|sp|nl)*>
<!ELEMENT Intf		(ExtdOpt|Members|ident|kw|op|comment|sp|nl)*>
<!ELEMENT ImplOpt	(QName|Type|op|comment|sp|nl)*>
<!ELEMENT ExtdOpt	(QName|Type|op|comment|sp|nl)*>
<!ELEMENT ThrwOpt	(QName|Type|op|comment|sp|nl)*>
<!ELEMENT Members	(QName|Class|Intf|Ctor|Method|SInit|Field|op|comment|sp|nl)*>

<!ELEMENT Method	(QName|Type|Param|ThrwOpt|Stmt|ident|kw|op|comment|sp|nl)*>
<!ELEMENT Ctor		(Param|ThrwOpt|Stmt|ident|kw|op|comment|sp|nl)*>
<!ELEMENT SInit		(Stmt|kw|comment|sp|nl)*>
<!ELEMENT Field		(QName|Type|Expr|ident|kw|op|comment|sp|nl)*>
<!ELEMENT Local		(QName|Type|Expr|ident|kw|op|comment|sp|nl)*>
<!ELEMENT Param		(QName|Type|ident|kw|op|comment|sp|nl)*>
<!ELEMENT QName		(QName|ident|op|comment|sp|nl)*>
<!ELEMENT Type		(ident|kw|op|comment|sp|nl)*>
<!ELEMENT Stmt		(QName|Type|Stmt|Local|Class|Intf|Expr|Label|ident|kw|op|comment|sp|nl)*>
<!ELEMENT Expr		(Expr|QName|Type|Class|ident|literal|kw|op|comment|sp|nl)*>
<!ELEMENT Label		(Expr|ident|kw|op|comment|sp|nl)*>

<!ELEMENT ident		(#PCDATA)>
<!ELEMENT literal	(#PCDATA)>
<!ELEMENT kw		(#PCDATA)>
<!ELEMENT op		(#PCDATA)>

<!ELEMENT comment	(#PCDATA)>
<!ELEMENT sp		(#PCDATA)>
<!ELEMENT nl		(#PCDATA)>

<!ATTLIST File		id		ID		#REQUIRED>
<!ATTLIST File		path		NMTOKEN		#IMPLIED>
<!ATTLIST File		name		NMTOKEN		#IMPLIED>
<!ATTLIST File		sort		NMTOKEN		#IMPLIED>
<!ATTLIST File		newline		NMTOKEN		#IMPLIED>

<!ATTLIST Package	id		ID		#REQUIRED>

<!ATTLIST Import	id		ID		#REQUIRED>

<!ATTLIST Class		id		ID		#REQUIRED>
<!ATTLIST Class		fqn		NMTOKEN		#IMPLIED>
<!ATTLIST Class		access		NMTOKEN		#IMPLIED>
<!ATTLIST Class		final		(yes|no)	#IMPLIED>
<!ATTLIST Class		abstract	(yes|no)	#IMPLIED>
<!ATTLIST Class		static		(yes|no)	#IMPLIED>
<!ATTLIST Class		strictfp	(yes|no)	#IMPLIED>

<!ATTLIST Intf		id		ID		#REQUIRED>
<!ATTLIST Intf		fqn		NMTOKEN		#IMPLIED>
<!ATTLIST Intf		access		NMTOKEN		#IMPLIED>
<!ATTLIST Intf		final		(yes|no)	#IMPLIED>
<!ATTLIST Intf		abstract	(yes|no)	#IMPLIED>
<!ATTLIST Intf		static		(yes|no)	#IMPLIED>
<!ATTLIST Intf		strictfp	(yes|no)	#IMPLIED>

<!ATTLIST ImplOpt	id		ID		#REQUIRED>
<!ATTLIST ImplOpt	typefirst	IDREF		#IMPLIED>

<!ATTLIST ExtdOpt	id		ID		#REQUIRED>
<!ATTLIST ExtdOpt	typefirst	IDREF		#IMPLIED>

<!ATTLIST ThrwOpt	id		ID		#REQUIRED>
<!ATTLIST ThrwOpt	typefirst	IDREF		#IMPLIED>

<!ATTLIST Method	id		ID		#REQUIRED>
<!ATTLIST Method	typefirst	IDREF		#IMPLIED>
<!ATTLIST Method	access		NMTOKEN		#IMPLIED>
<!ATTLIST Method	final		(yes|no)	#IMPLIED>
<!ATTLIST Method	abstract	(yes|no)	#IMPLIED>
<!ATTLIST Method	static		(yes|no)	#IMPLIED>
<!ATTLIST Method	synchro		(yes|no)	#IMPLIED>
<!ATTLIST Method	native		(yes|no)	#IMPLIED>
<!ATTLIST Method	strictfp	(yes|no)	#IMPLIED>

<!ATTLIST Ctor		id		ID		#REQUIRED>
<!ATTLIST Ctor		access		NMTOKEN		#IMPLIED>

<!ATTLIST SInit		id		ID		#REQUIRED>

<!ATTLIST Field		id		ID		#REQUIRED>
<!ATTLIST Field		typefirst	IDREF		#IMPLIED>
<!ATTLIST Field		omitted		(yes|no)	#IMPLIED>
<!ATTLIST Field		access		NMTOKEN		#IMPLIED>
<!ATTLIST Field		final		(yes|no)	#IMPLIED>
<!ATTLIST Field		static		(yes|no)	#IMPLIED>
<!ATTLIST Field		volatile	(yes|no)	#IMPLIED>
<!ATTLIST Field		transient	(yes|no)	#IMPLIED>

<!ATTLIST Local		id		ID		#REQUIRED>
<!ATTLIST Local		typefirst	IDREF		#IMPLIED>
<!ATTLIST Local		omitted		(yes|no)	#IMPLIED>
<!ATTLIST Local		final		(yes|no)	#IMPLIED>
<!ATTLIST Local		volatile	(yes|no)	#IMPLIED>

<!ATTLIST Param		id		ID		#REQUIRED>
<!ATTLIST Param		typefirst	IDREF		#IMPLIED>
<!ATTLIST Param		final		(yes|no)	#IMPLIED>

<!ATTLIST QName		id		ID		#REQUIRED>

<!ATTLIST Type		id		ID		#REQUIRED>
<!ATTLIST Type		fqn		NMTOKEN		#IMPLIED>
<!ATTLIST Type		sort		NMTOKEN		#IMPLIED>
<!ATTLIST Type		typenext	IDREF		#IMPLIED>
<!ATTLIST Type		qname		IDREF		#IMPLIED>

<!ATTLIST Stmt		id		ID		#REQUIRED>
<!ATTLIST Stmt		sort		NMTOKEN		#IMPLIED>

<!ATTLIST Label		id		ID		#REQUIRED>

<!ATTLIST Expr		id		ID		#REQUIRED>
<!ATTLIST Expr		sort		NMTOKEN		#IMPLIED>
<!ATTLIST Expr		read		(yes|no)	#IMPLIED>
<!ATTLIST Expr		write		(yes|no)	#IMPLIED>
<!ATTLIST Expr		typefirst	IDREF		#IMPLIED>

<!ATTLIST ident		id		ID		#IMPLIED>
<!ATTLIST ident		defid		IDREF		#IMPLIED>

<!ATTLIST literal	id		ID		#IMPLIED>
<!ATTLIST literal	sort		NMTOKEN		#IMPLIED>

<!ATTLIST comment	id		ID		#IMPLIED>
<!ATTLIST comment	sort		NMTOKEN		#IMPLIED>

<!ATTLIST nl		line		NMTOKEN		#IMPLIED>
<!ATTLIST nl		offset		NMTOKEN		#IMPLIED>

