CanonXML    	::= Pi* element Pi*
	element     	::= Stag (Datachar | Pi | element)* Etag
	Stag        	::= '<'  Name Atts '>'
	Etag       	 ::= '</' Name '>'

	Pi          	::= '<?' Name ' ' (((Char - S) Char*)? - (Char* '?>gt;' Char*)) 			     '?>'

	Atts        	::= (' ' Name '=' '"' Datachar* '"')*
	Datachar    	::= '&amp;' | '&lt;' | '&gt;' | '&quot;'
		                 | '&#9;'| '&#10;'| '&#13;'
		                 | (Char - ('&' | '<' | '>' | '"' | #x9 | #xA | #xD))

	Name        	::= (see XML spec)
	Char        	::= (see XML spec)
	S           	::= (see XML spec)

Figure 1: Canonical XML (reprinted with permission by James Clark).

Back to Article