[Mono-docs-list] Repost: ECMA CLI Relax NG schema
Per Arneng
pt99par@student.bth.se
Mon, 28 Apr 2003 14:56:19 -0400
--Boundary-00=_TlXr+1/DbnQyZj9
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Hi!
Converted the ECMA CLI DTD to Relax ng schema using a tool from SUN. (yes it
was hot there) :)
So now documents can be validated with XSD, DTD or RelaxNG ..
Example on how to validate using xmllint :
xmllint -noout --relaxng ecma_cli_doc_format.rng System.Net.xml
xmllint -noout --dtdvalid ecma_cli_doc_format.dtd System.Net.xml
DTD,XSD and RNG files are attached.
It would probably be god to start using one of them soon....
Best regards
Per Arneng
-------------------------------------------------------
--Boundary-00=_TlXr+1/DbnQyZj9
Content-Type: text/x-dtd;
charset="us-ascii";
name="ecma_cli_doc_format.dtd"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="ecma_cli_doc_format.dtd"
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.4 U (http://www.xmlspy.com) by Rex Jaeschke (private) -->
<!ELEMENT AssemblyCulture (#PCDATA)>
<!ELEMENT AssemblyInfo (AssemblyName, AssemblyPublicKey, AssemblyVersion, AssemblyCulture, Attributes)>
<!ELEMENT AssemblyName (#PCDATA)>
<!ELEMENT AssemblyPublicKey (#PCDATA)>
<!ELEMENT AssemblyVersion (#PCDATA)>
<!ELEMENT Attribute (AttributeName, Excluded, ExcludedTypeName?, ExcludedLibraryName?)>
<!ELEMENT AttributeName (#PCDATA)>
<!ELEMENT Attributes (Attribute*)>
<!ELEMENT Base (BaseTypeName?, ExcludedBaseTypeName?, ExcludedLibraryName?)>
<!ELEMENT BaseTypeName (#PCDATA)>
<!ELEMENT Docs (summary?, altmember?, altcompliant?, param*, returns?, value?, exception*, threadsafe?, remarks?, example?, permission?, example?)>
<!ELEMENT Excluded (#PCDATA)>
<!ELEMENT ExcludedBaseTypeName (#PCDATA)>
<!ELEMENT ExcludedLibrary (#PCDATA)>
<!ELEMENT ExcludedLibraryName (#PCDATA)>
<!ELEMENT ExcludedTypeName (#PCDATA)>
<!ELEMENT Interface (InterfaceName, Excluded)>
<!ELEMENT InterfaceName (#PCDATA)>
<!ELEMENT Interfaces (Interface*)>
<!ELEMENT Libraries (Types+)>
<!ELEMENT Member (MemberSignature+, MemberType, Attributes?, ReturnValue, Parameters, MemberValue?, Docs, Excluded, ExcludedLibrary*)>
<!ATTLIST Member
MemberName NMTOKEN #REQUIRED
>
<!ELEMENT MemberOfLibrary (#PCDATA)>
<!ELEMENT MemberSignature EMPTY>
<!ATTLIST MemberSignature
Language CDATA #REQUIRED
Value CDATA #REQUIRED
>
<!ELEMENT MemberType (#PCDATA)>
<!ELEMENT MemberValue (#PCDATA)>
<!ELEMENT Members (Member*)>
<!ELEMENT PRE EMPTY>
<!ELEMENT Parameter (Attributes?)>
<!ATTLIST Parameter
Name NMTOKEN #REQUIRED
Type CDATA #REQUIRED
>
<!ELEMENT Parameters (Parameter*)>
<!ELEMENT ReturnType (#PCDATA)>
<!ELEMENT ReturnValue (ReturnType?)>
<!ELEMENT SPAN (#PCDATA | para | paramref | SPAN | see | block)*>
<!ELEMENT ThreadingSafetyStatement (#PCDATA)>
<!ELEMENT Type (TypeSignature+, MemberOfLibrary, AssemblyInfo, ThreadingSafetyStatement?, Docs, Base, Interfaces, Attributes?, Members, TypeExcluded)>
<!ATTLIST Type
Name NMTOKEN #REQUIRED
FullName NMTOKEN #REQUIRED
FullNameSP NMTOKEN #REQUIRED
>
<!ELEMENT TypeExcluded (#PCDATA)>
<!ELEMENT TypeSignature EMPTY>
<!ATTLIST TypeSignature
Language CDATA #REQUIRED
Value CDATA #REQUIRED
>
<!ELEMENT Types (Type+)>
<!ATTLIST Types
Library NMTOKEN #REQUIRED
>
<!ELEMENT altcompliant EMPTY>
<!ATTLIST altcompliant
cref CDATA #REQUIRED
>
<!ELEMENT altmember EMPTY>
<!ATTLIST altmember
cref CDATA #REQUIRED
>
<!ELEMENT block (#PCDATA | see | para | paramref | list | block | c | subscript | code | sup | pi)*>
<!ATTLIST block
subset CDATA #REQUIRED
type NMTOKEN #REQUIRED
>
<!ELEMENT c (#PCDATA | para | paramref | code | see)*>
<!ELEMENT code (#PCDATA)>
<!ATTLIST code
lang CDATA #IMPLIED
>
<!ELEMENT codelink EMPTY>
<!ATTLIST codelink
SampleID CDATA #REQUIRED
SnippetID CDATA #REQUIRED
>
<!ELEMENT description (#PCDATA | SPAN | paramref | para | see | c | permille | block | sub)*>
<!ELEMENT example (#PCDATA | para | code | c | codelink | see)*>
<!ELEMENT exception (#PCDATA | paramref | see | para | SPAN | block)*>
<!ATTLIST exception
cref CDATA #REQUIRED
>
<!ELEMENT i (#PCDATA)>
<!ELEMENT item (term, description*)>
<!ELEMENT list (listheader?, item*)>
<!ATTLIST list
type NMTOKEN #REQUIRED
>
<!ELEMENT listheader (term, description+)>
<!ELEMENT onequarter EMPTY>
<!ELEMENT para (#PCDATA | see | block | paramref | c | onequarter | superscript | sup | permille | SPAN | list | pi | theta | sub)*>
<!ELEMENT param (#PCDATA | c | paramref | see | block | para | SPAN)*>
<!ATTLIST param
name CDATA #REQUIRED
>
<!ELEMENT paramref EMPTY>
<!ATTLIST paramref
name CDATA #REQUIRED
>
<!ELEMENT permille EMPTY>
<!ELEMENT permission (#PCDATA | see | paramref | para | block)*>
<!ATTLIST permission
cref CDATA #REQUIRED
>
<!ELEMENT pi EMPTY>
<!ELEMENT pre EMPTY>
<!ELEMENT remarks (#PCDATA | para | block | list | c | paramref | see | pre | SPAN | code | PRE)*>
<!ELEMENT returns (#PCDATA | para | list | paramref | see)*>
<!ELEMENT see EMPTY>
<!ATTLIST see
cref CDATA #IMPLIED
langword CDATA #IMPLIED
qualify CDATA #IMPLIED
>
<!ELEMENT sub (#PCDATA | paramref)*>
<!ELEMENT subscript EMPTY>
<!ATTLIST subscript
term CDATA #REQUIRED
>
<!ELEMENT summary (#PCDATA | para | see | block | list)*>
<!ELEMENT sup (#PCDATA | i | paramref)*>
<!ELEMENT superscript EMPTY>
<!ATTLIST superscript
term CDATA #REQUIRED
>
<!ELEMENT term (#PCDATA | block | see | paramref | para | c | sup | pi | theta)*>
<!ELEMENT theta EMPTY>
<!ELEMENT threadsafe (para+)>
<!ELEMENT value (#PCDATA | para | list | see)*>
--Boundary-00=_TlXr+1/DbnQyZj9
Content-Type: text/xml;
charset="us-ascii";
name="ecma_cli_doc_format.rng"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="ecma_cli_doc_format.rng"
<?xml version="1.0"?>
<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<choice>
<ref name="Members"/>
<ref name="altmember"/>
<ref name="PRE"/>
<ref name="ThreadingSafetyStatement"/>
<ref name="codelink"/>
<ref name="Types"/>
<ref name="TypeSignature"/>
<ref name="ReturnType"/>
<ref name="code"/>
<ref name="threadsafe"/>
<ref name="term"/>
<element name="Libraries">
<oneOrMore>
<ref name="Types"/>
</oneOrMore>
</element>
<ref name="permission"/>
<ref name="Interface"/>
<ref name="pi"/>
<ref name="pre"/>
<ref name="summary"/>
<ref name="Attribute"/>
<ref name="ExcludedLibrary"/>
<ref name="Interfaces"/>
<ref name="MemberOfLibrary"/>
<ref name="block"/>
<ref name="Docs"/>
<ref name="superscript"/>
<ref name="permille"/>
<ref name="AssemblyInfo"/>
<ref name="altcompliant"/>
<ref name="ReturnValue"/>
<ref name="listheader"/>
<ref name="Type"/>
<ref name="item"/>
<ref name="AttributeName"/>
<ref name="ExcludedLibraryName"/>
<ref name="c"/>
<ref name="sub"/>
<ref name="AssemblyCulture"/>
<ref name="theta"/>
<ref name="returns"/>
<ref name="Base"/>
<ref name="i"/>
<ref name="InterfaceName"/>
<ref name="MemberSignature"/>
<ref name="exception"/>
<ref name="AssemblyVersion"/>
<ref name="Attributes"/>
<ref name="BaseTypeName"/>
<ref name="ExcludedBaseTypeName"/>
<ref name="list"/>
<ref name="value"/>
<ref name="sup"/>
<ref name="see"/>
<ref name="TypeExcluded"/>
<ref name="example"/>
<ref name="remarks"/>
<ref name="AssemblyPublicKey"/>
<ref name="paramref"/>
<ref name="Excluded"/>
<ref name="MemberValue"/>
<ref name="AssemblyName"/>
<ref name="MemberType"/>
<ref name="Parameters"/>
<ref name="subscript"/>
<ref name="description"/>
<ref name="param"/>
<ref name="SPAN"/>
<ref name="para"/>
<ref name="Parameter"/>
<ref name="onequarter"/>
<ref name="Member"/>
<ref name="ExcludedTypeName"/>
</choice>
</start>
<define name="summary">
<element name="summary">
<mixed>
<zeroOrMore>
<choice>
<ref name="para"/>
<ref name="see"/>
<ref name="block"/>
<ref name="list"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="value">
<element name="value">
<mixed>
<zeroOrMore>
<choice>
<ref name="para"/>
<ref name="list"/>
<ref name="see"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="ExcludedLibrary">
<element name="ExcludedLibrary">
<text/>
</element>
</define>
<define name="code">
<element name="code">
<optional>
<attribute name="lang">
<data type="normalizedString"/>
</attribute>
</optional>
<text/>
</element>
</define>
<define name="Member">
<element name="Member">
<attribute name="MemberName">
<data type="NMTOKEN"/>
</attribute>
<oneOrMore>
<ref name="MemberSignature"/>
</oneOrMore>
<ref name="MemberType"/>
<optional>
<ref name="Attributes"/>
</optional>
<ref name="ReturnValue"/>
<ref name="Parameters"/>
<optional>
<ref name="MemberValue"/>
</optional>
<ref name="Docs"/>
<ref name="Excluded"/>
<zeroOrMore>
<ref name="ExcludedLibrary"/>
</zeroOrMore>
</element>
</define>
<define name="Docs">
<element name="Docs">
<optional>
<ref name="summary"/>
</optional>
<optional>
<ref name="altmember"/>
</optional>
<optional>
<ref name="altcompliant"/>
</optional>
<zeroOrMore>
<ref name="param"/>
</zeroOrMore>
<optional>
<ref name="returns"/>
</optional>
<optional>
<ref name="value"/>
</optional>
<zeroOrMore>
<ref name="exception"/>
</zeroOrMore>
<optional>
<ref name="threadsafe"/>
</optional>
<optional>
<ref name="remarks"/>
</optional>
<optional>
<ref name="example"/>
</optional>
<optional>
<ref name="permission"/>
</optional>
<optional>
<ref name="example"/>
</optional>
</element>
</define>
<define name="Excluded">
<element name="Excluded">
<text/>
</element>
</define>
<define name="MemberValue">
<element name="MemberValue">
<text/>
</element>
</define>
<define name="altcompliant">
<element name="altcompliant">
<attribute name="cref">
<data type="normalizedString"/>
</attribute>
</element>
</define>
<define name="Parameter">
<element name="Parameter">
<attribute name="Type">
<data type="normalizedString"/>
</attribute>
<attribute name="Name">
<data type="NMTOKEN"/>
</attribute>
<optional>
<ref name="Attributes"/>
</optional>
</element>
</define>
<define name="AssemblyName">
<element name="AssemblyName">
<text/>
</element>
</define>
<define name="onequarter">
<element name="onequarter">
<empty/>
</element>
</define>
<define name="permission">
<element name="permission">
<attribute name="cref">
<data type="normalizedString"/>
</attribute>
<mixed>
<zeroOrMore>
<choice>
<ref name="see"/>
<ref name="paramref"/>
<ref name="para"/>
<ref name="block"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="description">
<element name="description">
<mixed>
<zeroOrMore>
<choice>
<ref name="SPAN"/>
<ref name="paramref"/>
<ref name="para"/>
<ref name="see"/>
<ref name="c"/>
<ref name="permille"/>
<ref name="block"/>
<ref name="sub"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="superscript">
<element name="superscript">
<attribute name="term">
<data type="normalizedString"/>
</attribute>
</element>
</define>
<define name="subscript">
<element name="subscript">
<attribute name="term">
<data type="normalizedString"/>
</attribute>
</element>
</define>
<define name="ThreadingSafetyStatement">
<element name="ThreadingSafetyStatement">
<text/>
</element>
</define>
<define name="exception">
<element name="exception">
<attribute name="cref">
<data type="normalizedString"/>
</attribute>
<mixed>
<zeroOrMore>
<choice>
<ref name="paramref"/>
<ref name="see"/>
<ref name="para"/>
<ref name="SPAN"/>
<ref name="block"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="Types">
<element name="Types">
<attribute name="Library">
<data type="NMTOKEN"/>
</attribute>
<oneOrMore>
<ref name="Type"/>
</oneOrMore>
</element>
</define>
<define name="ReturnType">
<element name="ReturnType">
<text/>
</element>
</define>
<define name="Members">
<element name="Members">
<zeroOrMore>
<ref name="Member"/>
</zeroOrMore>
</element>
</define>
<define name="Type">
<element name="Type">
<attribute name="FullName">
<data type="NMTOKEN"/>
</attribute>
<attribute name="Name">
<data type="NMTOKEN"/>
</attribute>
<attribute name="FullNameSP">
<data type="NMTOKEN"/>
</attribute>
<oneOrMore>
<ref name="TypeSignature"/>
</oneOrMore>
<ref name="MemberOfLibrary"/>
<ref name="AssemblyInfo"/>
<optional>
<ref name="ThreadingSafetyStatement"/>
</optional>
<ref name="Docs"/>
<ref name="Base"/>
<ref name="Interfaces"/>
<optional>
<ref name="Attributes"/>
</optional>
<ref name="Members"/>
<ref name="TypeExcluded"/>
</element>
</define>
<define name="AssemblyCulture">
<element name="AssemblyCulture">
<text/>
</element>
</define>
<define name="MemberType">
<element name="MemberType">
<text/>
</element>
</define>
<define name="AssemblyPublicKey">
<element name="AssemblyPublicKey">
<text/>
</element>
</define>
<define name="c">
<element name="c">
<mixed>
<zeroOrMore>
<choice>
<ref name="para"/>
<ref name="paramref"/>
<ref name="code"/>
<ref name="see"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="remarks">
<element name="remarks">
<mixed>
<zeroOrMore>
<choice>
<ref name="para"/>
<ref name="block"/>
<ref name="list"/>
<ref name="c"/>
<ref name="paramref"/>
<ref name="see"/>
<ref name="pre"/>
<ref name="SPAN"/>
<ref name="code"/>
<ref name="PRE"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="returns">
<element name="returns">
<mixed>
<zeroOrMore>
<choice>
<ref name="para"/>
<ref name="list"/>
<ref name="paramref"/>
<ref name="see"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="AssemblyVersion">
<element name="AssemblyVersion">
<text/>
</element>
</define>
<define name="sup">
<element name="sup">
<mixed>
<zeroOrMore>
<choice>
<ref name="i"/>
<ref name="paramref"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="ExcludedBaseTypeName">
<element name="ExcludedBaseTypeName">
<text/>
</element>
</define>
<define name="theta">
<element name="theta">
<empty/>
</element>
</define>
<define name="ExcludedLibraryName">
<element name="ExcludedLibraryName">
<text/>
</element>
</define>
<define name="Attributes">
<element name="Attributes">
<zeroOrMore>
<ref name="Attribute"/>
</zeroOrMore>
</element>
</define>
<define name="altmember">
<element name="altmember">
<attribute name="cref">
<data type="normalizedString"/>
</attribute>
</element>
</define>
<define name="PRE">
<element name="PRE">
<empty/>
</element>
</define>
<define name="list">
<element name="list">
<attribute name="type">
<data type="NMTOKEN"/>
</attribute>
<optional>
<ref name="listheader"/>
</optional>
<zeroOrMore>
<ref name="item"/>
</zeroOrMore>
</element>
</define>
<define name="SPAN">
<element name="SPAN">
<mixed>
<zeroOrMore>
<choice>
<ref name="para"/>
<ref name="paramref"/>
<ref name="SPAN"/>
<ref name="see"/>
<ref name="block"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="example">
<element name="example">
<mixed>
<zeroOrMore>
<choice>
<ref name="para"/>
<ref name="code"/>
<ref name="c"/>
<ref name="codelink"/>
<ref name="see"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="listheader">
<element name="listheader">
<ref name="term"/>
<oneOrMore>
<ref name="description"/>
</oneOrMore>
</element>
</define>
<define name="Interfaces">
<element name="Interfaces">
<zeroOrMore>
<ref name="Interface"/>
</zeroOrMore>
</element>
</define>
<define name="InterfaceName">
<element name="InterfaceName">
<text/>
</element>
</define>
<define name="MemberSignature">
<element name="MemberSignature">
<attribute name="Value">
<data type="normalizedString"/>
</attribute>
<attribute name="Language">
<data type="normalizedString"/>
</attribute>
</element>
</define>
<define name="Attribute">
<element name="Attribute">
<ref name="AttributeName"/>
<ref name="Excluded"/>
<optional>
<ref name="ExcludedTypeName"/>
</optional>
<optional>
<ref name="ExcludedLibraryName"/>
</optional>
</element>
</define>
<define name="TypeSignature">
<element name="TypeSignature">
<attribute name="Value">
<data type="normalizedString"/>
</attribute>
<attribute name="Language">
<data type="normalizedString"/>
</attribute>
</element>
</define>
<define name="Parameters">
<element name="Parameters">
<zeroOrMore>
<ref name="Parameter"/>
</zeroOrMore>
</element>
</define>
<define name="para">
<element name="para">
<mixed>
<zeroOrMore>
<choice>
<ref name="see"/>
<ref name="block"/>
<ref name="paramref"/>
<ref name="c"/>
<ref name="onequarter"/>
<ref name="superscript"/>
<ref name="sup"/>
<ref name="permille"/>
<ref name="SPAN"/>
<ref name="list"/>
<ref name="pi"/>
<ref name="theta"/>
<ref name="sub"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="AssemblyInfo">
<element name="AssemblyInfo">
<ref name="AssemblyName"/>
<ref name="AssemblyPublicKey"/>
<ref name="AssemblyVersion"/>
<ref name="AssemblyCulture"/>
<ref name="Attributes"/>
</element>
</define>
<define name="paramref">
<element name="paramref">
<attribute name="name">
<data type="normalizedString"/>
</attribute>
</element>
</define>
<define name="ReturnValue">
<element name="ReturnValue">
<optional>
<ref name="ReturnType"/>
</optional>
</element>
</define>
<define name="permille">
<element name="permille">
<empty/>
</element>
</define>
<define name="block">
<element name="block">
<attribute name="type">
<data type="NMTOKEN"/>
</attribute>
<attribute name="subset">
<data type="normalizedString"/>
</attribute>
<mixed>
<zeroOrMore>
<choice>
<ref name="see"/>
<ref name="para"/>
<ref name="paramref"/>
<ref name="list"/>
<ref name="block"/>
<ref name="c"/>
<ref name="subscript"/>
<ref name="code"/>
<ref name="sup"/>
<ref name="pi"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="ExcludedTypeName">
<element name="ExcludedTypeName">
<text/>
</element>
</define>
<define name="see">
<element name="see">
<optional>
<attribute name="cref">
<data type="normalizedString"/>
</attribute>
</optional>
<optional>
<attribute name="qualify">
<data type="normalizedString"/>
</attribute>
</optional>
<optional>
<attribute name="langword">
<data type="normalizedString"/>
</attribute>
</optional>
</element>
</define>
<define name="BaseTypeName">
<element name="BaseTypeName">
<text/>
</element>
</define>
<define name="item">
<element name="item">
<ref name="term"/>
<zeroOrMore>
<ref name="description"/>
</zeroOrMore>
</element>
</define>
<define name="MemberOfLibrary">
<element name="MemberOfLibrary">
<text/>
</element>
</define>
<define name="param">
<element name="param">
<attribute name="name">
<data type="normalizedString"/>
</attribute>
<mixed>
<zeroOrMore>
<choice>
<ref name="c"/>
<ref name="paramref"/>
<ref name="see"/>
<ref name="block"/>
<ref name="para"/>
<ref name="SPAN"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="codelink">
<element name="codelink">
<attribute name="SampleID">
<data type="normalizedString"/>
</attribute>
<attribute name="SnippetID">
<data type="normalizedString"/>
</attribute>
</element>
</define>
<define name="AttributeName">
<element name="AttributeName">
<text/>
</element>
</define>
<define name="term">
<element name="term">
<mixed>
<zeroOrMore>
<choice>
<ref name="block"/>
<ref name="see"/>
<ref name="paramref"/>
<ref name="para"/>
<ref name="c"/>
<ref name="sup"/>
<ref name="pi"/>
<ref name="theta"/>
</choice>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="i">
<element name="i">
<text/>
</element>
</define>
<define name="TypeExcluded">
<element name="TypeExcluded">
<text/>
</element>
</define>
<define name="pre">
<element name="pre">
<empty/>
</element>
</define>
<define name="sub">
<element name="sub">
<mixed>
<zeroOrMore>
<ref name="paramref"/>
</zeroOrMore>
</mixed>
</element>
</define>
<define name="Base">
<element name="Base">
<optional>
<ref name="BaseTypeName"/>
</optional>
<optional>
<ref name="ExcludedBaseTypeName"/>
</optional>
<optional>
<ref name="ExcludedLibraryName"/>
</optional>
</element>
</define>
<define name="Interface">
<element name="Interface">
<ref name="InterfaceName"/>
<ref name="Excluded"/>
</element>
</define>
<define name="threadsafe">
<element name="threadsafe">
<oneOrMore>
<ref name="para"/>
</oneOrMore>
</element>
</define>
<define name="pi">
<element name="pi">
<empty/>
</element>
</define>
</grammar>
--Boundary-00=_TlXr+1/DbnQyZj9--