SML grammar tag-list ::= (S tag)* Stag ::= <name> tag-list </name> ::= <name> cdata </name>S ::= (' ' | '/t' | '/r' | '/n')*cdata ::= ([^<&] | &# [0-9]+ ; | < | > | &)*name ::= [a-zA-Z:_] [a-zA-Z0-9.-_:]* burlap:call <!DOCTYPE burlap:call><!ENTITY % object "null | boolean | int | double | string | xml | base64 | date | ref | map | list | remote"> <!ENTITY % header "(header, (%object;))*"><!ELEMENT burlap:call - - ((%header;), method, (%object;)*)><!ELEMENT header - - #CDATA><!ELEMENT method - - #CDATA><!ELEMENT null - - EMPTY><!ELEMENT boolean - - #CDATA><!ELEMENT int - - #CDATA><!ELEMENT double - - #CDATA><!ELEMENT string - - #CDATA><!ELEMENT xml - - #CDATA><!ELEMENT base64 - - #CDATA><!ELEMENT date - - #CDATA><!ELEMENT ref - - #CDATA><!ELEMENT map - - (type, ((%object;), (%object;))*)><!ELEMENT list - - (type, length, (%object;)*)><!ELEMENT type - - #CDATA><!ELEMENT remote - - (type, string)> burlap:reply <!DOCTYPE burlap:reply><!ENTITY % object "(null | boolean | int | double | string | xml | base64 | date | ref | map | list | remote)"> <!ENTITY % header "(header, (%object;))*"><!ELEMENT burlap:reply - - ((%header;), (%object; | fault))><!ELEMENT header - - #CDATA><!ELEMENT fault - - (string, (%object;))*><!ELEMENT null - - EMPTY><!ELEMENT boolean - - #CDATA><!ELEMENT int - - #CDATA><!ELEMENT double - - #CDATA><!ELEMENT string - - #CDATA><!ELEMENT xml - - #CDATA><!ELEMENT base64 - - #CDATA><!ELEMENT date - - #CDATA><!ELEMENT ref - - #CDATA><!ELEMENT map - - (type, ((%object;), (%object;))*)><!ELEMENT list - - (type, length, (%object;)*)><!ELEMENT type - - #CDATA><!ELEMENT remote - - (type, string)>