[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--