Иерархия xml / обработка xsl с помощью tei:note
У меня есть то, что, я надеюсь, является лишь симптомом моего невежества, а не невозможной проблемой, но я не могу на всю жизнь заставить это работать.
Я собираю сноски, используя пространство имен TEI для XML, и соответствующие данные упакованы следующим образом:
<surface xml:id="EETS.T.29">
<label>Verse 29</label>
<graphic url="/Images/IMG_0479.JPG"/>
<zone>
<line>
<orig><hi>N</hi>ow in <damage>th</damage>e name of oure lord ihesus</orig>
</line>
<line>
<orig>of right hool herte <ex>&</ex> in our<ex>e</ex>
<note place="bottom" anchored="true" xml:id="explanatory">Although “r” on the
painted panels of the chapel is consistently written with an otiose mark
when it concludes a word, the mark here is rendered more heavily and
with a dot indicating suspension above the r. This rendering as “oure”
is a linguistic outlier for the area based on the electronic <emph
rend="italic">Linguistic Atlas of Late Medieval English</emph>’s
linguistic profiles for “oure,” “our,” and “oure.” See eLALME's <ref
target="http://archive.ling.ed.ac.uk/ihd/elalme_scripts/mapping/user-defined_maps.html"
>User Defined Maps</ref> for more information. Unfortunately the current
online version does not allow direct linking between static dotmaps and
linguistic profiles.</note> best entent</orig>
</line>
<line>
<orig>our<ex>e</ex> lyf reme<ex>m</ex>bryng froward and vicious</orig>
</line>
<line>
<orig>ay contrarye to the comaundement</orig>
</line>
<line>
<orig>of crist ih<ex>es</ex>u now wyth avisement</orig>
</line>
<line>
<orig>the lord beseching <gap quantity="2" unit="chars" reason="illegible"
/><note place="bottom" anchored="true" xml:id="informational">Trapp
suggests "of" here, which fits the space in a way that MacCracken's "in
thyn" will not, but it does not seem to fit the admittedly paltry
remnants of the text. "In" seems the likely word here, but the text is
too damaged to definitively state that this is the case.</note>
<damage>mercy and pete</damage></orig>
</line>
<line>
<orig>our<ex>e</ex> youthe <ex>&</ex> age that we have
<damage>myspent</damage></orig>
</line>
<line>
<orig>wyt<damage>h t</damage>h<damage>is woor</damage>d <damage>mercy
knelyng</damage> on oure kne<note place="bottom" anchored="true"
xml:id="informational">This change occurs only in the Clopton
verses.</note></orig>
</line>
</zone>
</surface>
Поскольку это новая часть пространства имен, я не могу использовать стандартные таблицы стилей и написал следующий шаблон для нумерации заметок в отображаемом блоке текста:
<xsl:template match="tei:note">
<xsl:variable name="num">
<xsl:number count="tei:note" level="any" from="/tei:TEI/tei:sourceDoc/tei:surfaceGrp/tei:surface"/>
</xsl:variable>
<xsl:variable name="panel_name">
<xsl:value-of select="concat(../../../../@xml:id,$num)"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="@xml:id ='explanatory'">
<span class="explanatory"><sup><a><xsl:attribute name="href"><xsl:value-of select="concat('#fn',$num)"/></xsl:attribute><xsl:attribute name="id"><xsl:value-of select="$panel_name"/></xsl:attribute><font size="-1"><xsl:value-of select="$num"/></font></a></sup></span>
</xsl:when>
<xsl:when test="@xml:id ='informational'">
<span class="informational"><sup><a><xsl:attribute name="href"><xsl:value-of select="concat('#fn',$num)"/></xsl:attribute><xsl:attribute name="id"><xsl:value-of select="$panel_name"/></xsl:attribute><font size="-1"><xsl:value-of select="$num"/></font></a></sup></span>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
Моя проблема, однако, заключается в следующем наборе шаблонов, который пытается отобразить тело примечаний внизу страницы с соответствующей нумерацией:
<xsl:template name="makeNotes">
<xsl:variable name="num" select="count(.//tei:note)"/>
<xsl:variable name="panel_name">
<xsl:value-of select="concat(@xml:id,$num)"/>
</xsl:variable>
<div class="notes">
<div class="noteHeading">Notes</div>
<xsl:call-template name="loop">
<xsl:with-param name="i" select="number(1)"/>
<xsl:with-param name="max" select="$num"/>
</xsl:call-template>
</div>
</xsl:template>
<xsl:template name="loop">
<!--recursive loop until done-->
<xsl:param name="i"/>
<xsl:param name="max"/>
<xsl:for-each select=".//tei:orig">
<xsl:if test="tei:note">
<xsl:if test="$i <= $max">
<!-- Repeated content Here -->
<!-- use value-of i to get loop index -->
<div class ="note"><span class="noteLabel"><xsl:attribute name="id"><xsl:value-of select="concat('fn',$i)"/></xsl:attribute><xsl:value-of select="$i"></xsl:value-of>.</span><div class="noteBody"><xsl:value-of select="tei:note"/></div></div>
<xsl:call-template name="loop">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="max" select="$max"/>
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:for-each>
Я могу либо отформатировать код для правильного отображения чисел с помощью модификации кода, который я имею в шаблоне tei:note, либо я могу отформатировать код для правильного отображения заметок, что я и имею здесь. Мне нужно иметь возможность правильно отображать как примечание, так и нумерацию, и я понимаю, что причина, по которой это не работает, заключается в том, что tei:note
появляется только один раз в иерархии каждой строки. Я знаю, как сделать это на процедурном языке, но так как xsl функционален, я в тупике, и ни один из методов, которые я видел, не предлагал (используя count()
, <xsl:number>
и т. д.) работа.
Токовый выход у меня выглядит следующим образом:
<div class="note"><span class="noteLabel" id="fn1">1.</span>
<div class="noteBody">Although "r" on the
painted panels of the chapel is consistently written with an otiose mark
when it concludes a word, the mark here is rendered more heavily and
with a dot indicating suspension above the r. This rendering as "oure"
is a linguistic outlier for the area based on the electronic Linguistic Atlas of Late Medieval English's
linguistic profiles for "oure," "our," and "oure." See eLALME's User Defined Maps for more information. Unfortunately the current
online version does not allow direct linking between static dotmaps and
linguistic profiles.</div>
</div>
<div class="note"><span class="noteLabel" id="fn1">1.</span>
<div class="noteBody">Trapp
suggests "of" here, which fits the space in a way that MacCracken's "in
thyn" will not, but it does not seem to fit the admittedly paltry
remnants of the text. "In" seems the likely word here, but the text is
too damaged to definitively state that this is the case.</div>
</div>
<div class="note"><span class="noteLabel" id="fn1">1.</span>
<div class="noteBody">This change occurs only in the Clopton
verses.</div>
</div>
То, что мне нужно, чтобы результаты показали следующее:
<div class="note"><span class="noteLabel" id="fn1">1.</span>
<div class="noteBody">Although "r" on the
painted panels of the chapel is consistently written with an otiose mark
when it concludes a word, the mark here is rendered more heavily and
with a dot indicating suspension above the r. This rendering as "oure"
is a linguistic outlier for the area based on the electronic Linguistic Atlas of Late Medieval English's
linguistic profiles for "oure," "our," and "oure." See eLALME's User Defined Maps for more information. Unfortunately the current
online version does not allow direct linking between static dotmaps and
linguistic profiles.</div>
</div>
<div class="note"><span class="noteLabel" id="fn2">2.</span>
<div class="noteBody">Trapp
suggests "of" here, which fits the space in a way that MacCracken's "in
thyn" will not, but it does not seem to fit the admittedly paltry
remnants of the text. "In" seems the likely word here, but the text is
too damaged to definitively state that this is the case.</div>
</div>
<div class="note"><span class="noteLabel" id="fn3">3.</span>
<div class="noteBody">This change occurs only in the Clopton
verses.</div>
</div>
1 ответ
Я думаю, что все, что вам нужно, это некоторый код следующим образом (вам нужно будет адаптировать шаблоны, чтобы они соответствовали элементам в вашем пространстве имен, но, поскольку в вашем примере не показано пространство имен, без которого я работал):
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="surface">
<xsl:apply-templates select=".//orig[note]" mode="list"/>
</xsl:template>
<xsl:template match="orig" mode="list">
<div class ="note"><span class="noteLabel" id="fn{position()}"><xsl:value-of select="position()"></xsl:value-of>.</span><div class="noteBody"><xsl:value-of select="note"/></div></div>
</xsl:template>
</xsl:stylesheet>
Это преобразует входной образец, который вы разместили в результат
<div class="note"><span class="noteLabel" id="fn1">1.</span><div class="noteBody">Although “r” on the
painted panels of the chapel is consistently written with an otiose mark
when it concludes a word, the mark here is rendered more heavily and
with a dot indicating suspension above the r. This rendering as “oure”
is a linguistic outlier for the area based on the electronic Linguistic Atlas of Late
Medieval English’s
linguistic profiles for “oure,” “our,” and “oure.” See eLALME's User Defined Maps
for more information. Unfortunately the current
online version does not allow direct linking between static dotmaps and
linguistic profiles.
</div>
</div>
<div class="note"><span class="noteLabel" id="fn2">2.</span><div class="noteBody">Trapp
suggests "of" here, which fits the space in a way that MacCracken's "in
thyn" will not, but it does not seem to fit the admittedly paltry
remnants of the text. "In" seems the likely word here, but the text is
too damaged to definitively state that this is the case.
</div>
</div>
<div class="note"><span class="noteLabel" id="fn3">3.</span><div class="noteBody">This change occurs only in the Clopton
verses.
</div>
</div>
Это мое предложение для части XSLT, если я правильно понимаю вопрос. Поскольку целевой формат выглядит как HTML, я удивляюсь, почему вы не используете упорядоченный список и элементы списка для нумерации элементов.