<!-- DTD for lxtransduce rule files -->

<!ENTITY % common-atts '
		match-var	NMTOKEN			#IMPLIED
		rewrite-var	NMTOKEN			#IMPLIED
		suppress	(true|false)		"false"
		rewrite		CDATA			#IMPLIED
'>

<!ENTITY % common-xml-atts '
		wrap		NMTOKEN			#IMPLIED
		attrs		CDATA			#IMPLIED
'>

<!ELEMENT rules (lexicon*,rule+)>
<!ATTLIST rules name    NMTOKEN		#IMPLIED
                type    (xml|plain)	"plain"
                apply   IDREF		#REQUIRED>

<!ELEMENT lexicon EMPTY>
<!ATTLIST lexicon name	NMTOKEN		#REQUIRED
	  	  href	CDATA		#REQUIRED>

<!ELEMENT constraint EMPTY>
<!ATTLIST constraint	test	CDATA	#IMPLIED>

<!ELEMENT var EMPTY>
<!ATTLIST var		name	NMTOKEN	#IMPLIED
	  		value	CDATA	#IMPLIED>

<!ELEMENT rule (ref|regex|query|seq|first|best)?>
<!ATTLIST rule	name		ID			#IMPLIED
		match		CDATA			#IMPLIED
	        constraint	CDATA			#IMPLIED
		rewrite		CDATA			#IMPLIED
		%common-xml-atts;>

<!ELEMENT ref EMPTY>
<!ATTLIST ref	%common-atts;
		%common-xml-atts;
		name		IDREF			#IMPLIED
		mult		CDATA			#IMPLIED>

<!ELEMENT regex (var|constraint)*>
<!ATTLIST regex	%common-atts;
		match		CDATA			#IMPLIED
	        constraint	CDATA			#IMPLIED>

<!ELEMENT query (var|constraint)*>
<!ATTLIST query	%common-atts;
		%common-xml-atts;
		match		CDATA			#IMPLIED
	        constraint	CDATA			#IMPLIED>

<!ELEMENT seq (ref|regex|query|seq|first|best)+>
<!ATTLIST seq	%common-atts;
		%common-xml-atts;>


<!ELEMENT first (ref|regex|query|seq|first|best)+>
<!ATTLIST first	%common-atts;
		%common-xml-atts;>


<!ELEMENT best (ref|regex|query|seq|first|best)+>
<!ATTLIST best	%common-atts;
		%common-xml-atts;>

<!-- We use Unicode private-use-area characters to identify 
     magically-unescaped <, >, and &.
     Use "ED??" - ED for Edinburgh -->

<!ENTITY xlt  "&#xED80;">
<!ENTITY xgt  "&#xED81;">
<!ENTITY xamp "&#xED82;">

<!ENTITY XLT  "&#xED80;">
<!ENTITY XGT  "&#xED81;">
<!ENTITY XAMP "&#xED82;">

<!-- Entities for compatibility with old-style variables -->

<!ENTITY S-VAL "$-">
<!ENTITY S-REW "$+">

