<define name="ebnf.block.hook">
<notAllowed/>
</define>
+
<define name="local.compound.class">
<notAllowed/>
</define>
<define name="ebnf.inline.hook">
<notAllowed/>
</define>
+
<define name="local.tech.char.class">
<notAllowed/>
</define>
<define name="forminlines.hook">
<notAllowed/>
</define>
+
<define name="local.para.char.mix">
<notAllowed/>
</define>
<ref name="bibliocomponent.mix"/>
</choice>
</oneOrMore>
+ <s:assert test="count(.//indexterm) = 0"><biblioentry> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><biblioentry> contains <beginpage></s:assert>
</element>
</define>
</div>
<ref name="bibliomset"/>
</choice>
</zeroOrMore>
+ <s:assert test="count(.//indexterm) = 0"><bibliomixed> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><bibliomixed> contains <beginpage></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="info.class"/>
</oneOrMore>
+ <s:assert test="count(title) < 2"><articleinfo> contains more than one <title></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="bibliocomponent.mix"/>
</oneOrMore>
+ <s:assert test="count(.//indexterm) = 0"><biblioset> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><biblioset> contains <beginpage></s:assert>
</element>
</define>
</div>
<ref name="bibliomset"/>
</choice>
</zeroOrMore>
+ <s:assert test="count(.//indexterm) = 0"><bibliomset> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><bibliomset> contains <beginpage></s:assert>
</element>
</define>
</div>
<zeroOrMore>
<ref name="para.char.mix"/>
</zeroOrMore>
+ <s:assert test="count(.//remark) = 0"><remark> contains <remark></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="footnote.mix"/>
</oneOrMore>
- <s:assert test="count(.//footnote) = 0"/>
+ <s:assert test="count(.//footnote) = 0">Nested footnotes</s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="highlights.mix"/>
</oneOrMore>
+ <s:assert test="count(.//equation/title) = 0"><highlights> contains <equation></s:assert>
+ <s:assert test="count(.//example) = 0"><highlights> contains <example></s:assert>
+ <s:assert test="count(.//figure) = 0"><highlights> contains <figure></s:assert>
+ <s:assert test="count(.//table) = 0"><highlights> contains <table></s:assert>
+ <s:assert test="count(.//indexterm) = 0"><highlights> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><highlights> contains <beginpage></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="admon.mix"/>
</oneOrMore>
+ <s:assert test="count(.//caution) = 0"><caution> contains <caution></s:assert>
+ <s:assert test="count(.//important) = 0"><caution> contains <important></s:assert>
+ <s:assert test="count(.//note) = 0"><caution> contains <note></s:assert>
+ <s:assert test="count(.//tip) = 0"><caution> contains <tip></s:assert>
+ <s:assert test="count(.//warning) = 0"><caution> contains <warning></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="admon.mix"/>
</oneOrMore>
+ <s:assert test="count(.//caution) = 0"><important> contains <caution></s:assert>
+ <s:assert test="count(.//important) = 0"><important> contains <important></s:assert>
+ <s:assert test="count(.//note) = 0"><important> contains <note></s:assert>
+ <s:assert test="count(.//tip) = 0"><important> contains <tip></s:assert>
+ <s:assert test="count(.//warning) = 0"><important> contains <warning></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="admon.mix"/>
</oneOrMore>
+ <s:assert test="count(.//caution) = 0"><note> contains <caution></s:assert>
+ <s:assert test="count(.//important) = 0"><note> contains <important></s:assert>
+ <s:assert test="count(.//note) = 0"><note> contains <note></s:assert>
+ <s:assert test="count(.//tip) = 0"><note> contains <tip></s:assert>
+ <s:assert test="count(.//warning) = 0"><note> contains <warning></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="admon.mix"/>
</oneOrMore>
+ <s:assert test="count(.//caution) = 0"><tip> contains <caution></s:assert>
+ <s:assert test="count(.//important) = 0"><tip> contains <important></s:assert>
+ <s:assert test="count(.//note) = 0"><tip> contains <note></s:assert>
+ <s:assert test="count(.//tip) = 0"><tip> contains <tip></s:assert>
+ <s:assert test="count(.//warning) = 0"><tip> contains <warning></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="admon.mix"/>
</oneOrMore>
+ <s:assert test="count(.//caution) = 0"><warning> contains <caution></s:assert>
+ <s:assert test="count(.//important) = 0"><warning> contains <important></s:assert>
+ <s:assert test="count(.//note) = 0"><warning> contains <note></s:assert>
+ <s:assert test="count(.//tip) = 0"><warning> contains <tip></s:assert>
+ <s:assert test="count(.//warning) = 0"><warning> contains <warning></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="example.mix"/>
</oneOrMore>
+ <s:assert test="count(.//equation/title) = 0"><example> contains <equation></s:assert>
+ <s:assert test="count(.//example) = 0"><example> contains <example></s:assert>
+ <s:assert test="count(.//figure) = 0"><example> contains <figure></s:assert>
+ <s:assert test="count(.//table) = 0"><example> contains <table></s:assert>
</element>
</define>
</div>
<zeroOrMore>
<ref name="para.char.mix"/>
</zeroOrMore>
+ <s:assert test="count(.//indexterm) = 0"><screeninfo> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><screeninfo> contains <beginpage></s:assert>
</element>
</define>
</div>
<ref name="link.char.class"/>
</choice>
</oneOrMore>
+ <s:assert test="count(.//equation/title) = 0"><figure> contains <equation></s:assert>
+ <s:assert test="count(.//example) = 0"><figure> contains <example></s:assert>
+ <s:assert test="count(.//figure) = 0"><figure> contains <figure></s:assert>
+ <s:assert test="count(.//table) = 0"><figure> contains <table></s:assert>
</element>
</define>
</div>
</div>
</div>
+ <define name="svg.hook">
+ <notAllowed/>
+ </define>
+
<div db:name="imageobject.module">
<define name="local.imageobject.attrib">
<empty/>
<optional>
<ref name="objectinfo"/>
</optional>
- <ref name="imagedata"/>
+ <choice>
+ <ref name="imagedata"/>
+ <ref name="svg.hook"/>
+ </choice>
</element>
</define>
</div>
<!-- This PE provides a mechanism for replacing equation content, -->
<!-- perhaps adding a new or different model (e.g., MathML) -->
+ <define name="mathml.hook">
+ <notAllowed/>
+ </define>
+
<define name="equation.content">
<optional>
<ref name="alt"/>
<oneOrMore>
<ref name="mediaobject"/>
</oneOrMore>
+ <oneOrMore>
+ <ref name="mathml.hook"/>
+ </oneOrMore>
</choice>
</define>
+
<define name="inlineequation.content">
<optional>
<ref name="alt"/>
<oneOrMore>
<ref name="inlinemediaobject"/>
</oneOrMore>
+ <oneOrMore>
+ <ref name="mathml.hook"/>
+ </oneOrMore>
</choice>
</define>
<ref name="informalequation"/>
<ref name="equation.content"/>
</choice>
+ <s:assert test="count(.//equation/title) = 0"><equation> contains <equation></s:assert>
+ <s:assert test="count(.//example) = 0"><equation> contains <example></s:assert>
+ <s:assert test="count(.//figure) = 0"><equation> contains <figure></s:assert>
+ <s:assert test="count(.//table) = 0"><equation> contains <table></s:assert>
</element>
</define>
</div>
<oneOrMore>
<ref name="legalnotice.mix"/>
</oneOrMore>
+ <s:assert test="count(.//equation/title) = 0"><legalnotice> contains <equation></s:assert>
+ <s:assert test="count(.//example) = 0"><legalnotice> contains <example></s:assert>
+ <s:assert test="count(.//figure) = 0"><legalnotice> contains <figure></s:assert>
+ <s:assert test="count(.//table) = 0"><legalnotice> contains <table></s:assert>
</element>
</define>
</div>
<zeroOrMore>
<ref name="docinfo.char.mix"/>
</zeroOrMore>
+ <s:assert test="count(.//indexterm) = 0"><modespec> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><modespec> contains <beginpage></s:assert>
</element>
</define>
</div>
<zeroOrMore>
<ref name="word.char.mix"/>
</zeroOrMore>
+ <s:assert test="count(.//acronym)=0"><acronym> contains <acronym></s:assert>
</element>
</define>
</div>
<zeroOrMore>
<ref name="word.char.mix"/>
</zeroOrMore>
- <s:assert test="not(@linkend) or local-name(//*[@id=current()/@linkend]) = 'glossentry'"/>
+ <s:report test="not(@linkend) or local-name(//*[@id=current()/@linkend]) = 'glossentry'"><firstterm> does not point to a <glossentry></s:report>
</element>
</define>
</div>
<zeroOrMore>
<ref name="para.char.mix"/>
</zeroOrMore>
- <s:assert test="not(@linkend) or local-name(//*[@id=current()/@linkend]) = 'glossentry'"/>
+ <s:assert test="not(@linkend) or local-name(//*[@id=current()/@linkend]) = 'glossentry'"><glossterm> does not point to a <glossentry></s:assert>
+ <s:assert test="count(.//glossterm)=0"><glossterm> contains <glossterm></s:assert>
+ <!-- warn about missing linkend attribute -->
</element>
</define>
</div>
<ref name="other.char.class"/>
</choice>
</zeroOrMore>
+ <s:assert test="count(.//indexterm) = 0"><subscript> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><subscript> contains <beginpage></s:assert>
</element>
</define>
</div>
<ref name="other.char.class"/>
</choice>
</zeroOrMore>
+ <s:assert test="count(.//indexterm) = 0"><superscript> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><superscript> contains <beginpage></s:assert>
</element>
</define>
</div>
<zeroOrMore>
<ref name="para.char.mix"/>
</zeroOrMore>
+ <s:assert test="count(.//link) = 0"><link> contains <link></s:assert>
+ <s:assert test="count(.//ulink) = 0"><link> contains <ulink></s:assert>
+ <s:assert test="count(.//olink) = 0"><link> contains <olink></s:assert>
+ <s:assert test="count(.//xref) = 0"><link> contains <xref></s:assert>
</element>
</define>
</div>
<zeroOrMore>
<ref name="para.char.mix"/>
</zeroOrMore>
+ <s:assert test="count(.//link) = 0"><olink> contains <link></s:assert>
+ <s:assert test="count(.//ulink) = 0"><olink> contains <ulink></s:assert>
+ <s:assert test="count(.//olink) = 0"><olink> contains <olink></s:assert>
+ <s:assert test="count(.//xref) = 0"><olink> contains <xref></s:assert>
</element>
</define>
</div>
<zeroOrMore>
<ref name="para.char.mix"/>
</zeroOrMore>
+ <s:assert test="count(.//link) = 0"><ulink> contains <link></s:assert>
+ <s:assert test="count(.//ulink) = 0"><ulink> contains <ulink></s:assert>
+ <s:assert test="count(.//olink) = 0"><ulink> contains <olink></s:assert>
+ <s:assert test="count(.//xref) = 0"><ulink> contains <xref></s:assert>
</element>
</define>
</div>
</oneOrMore>
</choice>
</optional>
- <s:assert test="not(@startref) or @class='endofrange'"/>
- <s:assert test="not(@startref) or count(node()) = 0"/>
- <s:assert test="not(@startref) or local-name(//*[@id=current()/@startref]) = 'indexterm'"/>
+ <s:assert test="not(@startref) or @class='endofrange'"><indexterm> with startref must have class='endofrange'</s:assert>
+ <s:assert test="not(@startref) or count(node()) = 0"><indexterm> with startref must be empty</s:assert>
+ <s:assert test="not(@startref) or local-name(//*[@id=current()/@startref]) = 'indexterm'"><indexterm> with startref must point to another <indexterm></s:assert>
+ <s:assert test="count(.//indexterm) = 0"><indexterm> contains <indexterm></s:assert>
+ <s:assert test="count(.//beginpage) = 0"><indexterm> contains <beginpage></s:assert>
</element>
</define>
</div>