[Mono-docs-list] Sugestions for validation of the mono doc files

Per Arneng pt99par@student.bth.se
Mon, 28 Apr 2003 20:47:28 -0400


--Boundary-00=_gucr+VB1zS6/lPG
Content-Type: text/plain;
  charset="us-ascii"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi!

Here are some suggestions on how to handle the validation of the mono doc 
files wish uses the ECMA CLI doc format. I have tested the DTD and relax ng 
schema  with SUN's multi schema validator (see link) and they seem to be 
correct when validating All.xml from the ECMA CLI docs. 

1. Add the ecma_doc_format.dtd and ecma_doc_format.rng to the CVS in the 
monodoc module.

2. Add the simple monorelaxed validator attached that uses Atsushi Enomoto's 
excellent relax ng validating XmlReader to the cvs and make it buildable. 
Don't know if it is ok for Atsushi  to put his source code there to but that 
would be great. all this could probably go in a validator directory in the 
monodoc module.

mcs /out:monorelaxed.exe /r:Commons.Xml.Relaxng.dll MonoRelaxed.cs

3. use the validator to validate the docs:
monorelaxed  ../......../ecma_doc_format.rng ../....../DocFile.xml

Best regards 
	Per Arneng

Suns Multischema validator:
http://wwws.sun.com/software/xml/developers/multischema/index.html

Atsushi Enomoto's relax ng validating XmlReader:
http://www24.brinkster.com/ginga/RelaxngValidatingReader/
--Boundary-00=_gucr+VB1zS6/lPG
Content-Type: text/x-c++src;
  charset="us-ascii";
  name="MonoRelaxed.cs"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="MonoRelaxed.cs"

// Relaxed ng validator 
//    using Atsushi Enomoto's relax ng validating XmlReader
//
// author: Per Arneng <pt99par@student.bth.se> 
//
// mcs /out:monorelaxed.exe /r:Commons.Xml.Relaxng.dll MonoRelaxed.cs
using System;
using System.IO;
using System.Xml;
using Commons.Xml.Relaxng;

namespace MonoRelaxed {

    public class  MainClass {
	
	protected static string schemaFile = "";
	protected static string xmlFile = "";

	public static void Main( string[] args ) {
	    try { 
		
		if( args.Length != 2 ) {
		    Console.Error.WriteLine("monorelaxed: wrong nr of arguments");
		    Console.Error.WriteLine("monorelaxed: usage: monorelaxed <relax ng schema> <xml file>");
		    Environment.Exit(1);
		}
	    
		schemaFile = args[0];
		xmlFile = args[1];

		XmlReader schema = new XmlTextReader( schemaFile );
		XmlReader document = new XmlTextReader( xmlFile );
	    
		XmlDocument doc = new XmlDocument ();
		XmlReader rvr = new RelaxngValidatingReader ( document, schema);
	    
		while( rvr.Read() );
		Console.WriteLine("monorelaxed: document {0} is VALID.", new FileInfo(xmlFile).Name );
		
	    } catch ( RngException ex ) {
		Console.Error.WriteLine("monorelaxed: document {0} is NOT VALID.",xmlFile);
		Console.Error.WriteLine( "monorelaxed: {0}" , ex.Message );
		Environment.Exit(1);
	    } catch ( Exception ex ) {
		Console.Error.WriteLine("monorelaxed: internal error");
		Console.Error.WriteLine("monorelaxed: {0}", ex.Message );
		Environment.Exit(1);
	    }
	}
	
	
    }

}


--Boundary-00=_gucr+VB1zS6/lPG
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=_gucr+VB1zS6/lPG
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=_gucr+VB1zS6/lPG--