I don't get it. Can someone explain to me what the template for
<specGrpRef> in odds/odd2odd.xsl is doing around line 489 (dev
branch)?
It looks like the structure is:
<choose>
<when test="LOCAL POINTER">
<apply-templates select="CHILDREN OF THAT WHICH IS POINTED TO"/>
</when>
<otherwise>
<for-each select="THAT WHICH IS POINTED TO"> <!-- to set context node -->
<choose>
<when test="child::specGrp"> ????
<apply-templates select="child::specGrp/child::*"/>
</when>
<otherwise>
<apply-templates select="child::*"/>
</otherwise>
</choose>
</for-each>
</otherwise>
<choose>
I find this bizarre, but I may be missing something here. A
specGrpRef/@target is supposed to point to a <specGrp>. A <specGrp>,
of course, can contain children <specGrp>s (not that any of ours do
that). So it looks to me like ...
... given the following somewhere in file A.xml
<specGrp xml:id="sciencyStuff">
<elementRef key="measureGrp"/>
<elementRef key="measure"/>
<specGrp xml:id="detailedScienceStuff">
<elementRef key="unit"/>
<elementRef key="num"/>
</specGrp>
</specGrp>
... and the following in file B.xml
<specGrpRef target="A.xml#sciencyStuff"/>
then odd2odd.xsl will only process 'unit' and 'num', not 'measureGrp'
and 'measure', for which I can see absolutely no reason.
Am I going nuts, here? Was there a period in ODD history when a
<specGrpRef> would point to the *parent* of the desired <specGrp>,
not to the <specGrp> itself?