Лучший способ перемещаться между вложенными элементами в узлах-братьях?

У меня есть проблема, на которую, я уверен, на самом деле довольно просто ответить, но я не могу ее понять, и моя попытка спросить об этом раньше была излишне сложной.

У меня есть страница, которая генерируется из TEI XML, с текстом, связанным с файлом изображения:

<sourceDoc xml:id="textContent">
    <surfaceGrp xml:id="wall" n="West Wall">
        <surface xml:id="EETS.QD.60">
            <label>Verse 60</label>
            <graphic url="ww_test_1.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.63">
            <label>Verse 63</label>
            <graphic url="ww_test_2.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.65">
            <label>Verse 65</label>
            <graphic url="ww_test_3.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.66">
            <label>Verse 66</label>
            <graphic url="ww_test_4.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.68">
            <label>Verse 68</label>
            <graphic url="ww_test_5.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.69">
            <label>Verse 69</label>
            <graphic url="ww_test_6.jpg"/>
        </surface>
    </surfaceGrp>
</sourceDoc>

(Я удалил текст из примера здесь, чтобы избежать лишних ошибок)

Я создаю заголовок в верхней части моей страницы на основе уменьшенных изображений изображения, связанного с каждым фрагментом текста. Так www_test_1-thumbnail.jpgи т. д. Используя следующий xsl, я могу заставить заголовок отображаться корректно (tei - это пространство имен tei, которое может быть объявлено в xmlns:tei="http://www.tei-c.org/ns/1.0"):

<xsl:template match="tei:surface">
    <div id="centerMenu">
        <xsl:apply-templates select="tei:graphic" mode="list"/>
    </div>
</xsl:template>

<xsl:template match="tei:graphic" mode="list">
    <span class="menuitem" id="image_thumbnail">
        <a class="nav_link">
            <xsl:attribute name="href">
                <xsl:value-of select="concat(substring(@url,1,string-length(@url)-4),'.html')"/>
            </xsl:attribute>
            <img class="thumbnail">
                <xsl:attribute name="src">
                    <xsl:value-of
                        select="concat(substring(@url,1,string-length(@url)-4),'-thumbnail.jpg')"
                    />
                </xsl:attribute>
                <xsl:attribute name="alt">
                    <xsl:value-of select="../tei:label"/>
                </xsl:attribute>
            </img>
        </a>
    </span>
</xsl:template>

Моя проблема в том, что иногда мне нужно прыгнуть с одного <surfaceGrp>завернутый набор элементов в другой. Так что, если, например, была "Южная стена" <surfaceGrp> Мне нужно иметь возможность захватить URL этого предстоящего элемента, чтобы я мог перейти к следующему блоку миниатюр изображений:

<sourceDoc xml:id="textContent">
    <surfaceGrp xml:id="wall" n="West Wall">
        <surface xml:id="EETS.QD.60">
            <label>Verse 60</label>
            <graphic url="ww_test_1.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.63">
            <label>Verse 63</label>
            <graphic url="ww_test_2.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.65">
            <label>Verse 65</label>
            <graphic url="ww_test_3.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.66">
            <label>Verse 66</label>
            <graphic url="ww_test_4.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.68">
            <label>Verse 68</label>
            <graphic url="ww_test_5.jpg"/>
        </surface>
        <surface xml:id="EETS.QD.69">
            <label>Verse 69</label>
            <graphic url="ww_test_6.jpg"/>
        </surface>
    </surfaceGrp>
    <surfaceGrp xml:id="wall" n="South Wall">
        <surface xml:id="EETS.QD.70">
            <label>Verse 70</label>
            <graphic url="sw_test_1.jpg"/>
        </surface>
    </surfaceGrp>
</sourceDoc>

Ситуация еще более усложняется тем, что бывают случаи, когда все должно быть заключено в другое <surfaceGrp> элемент, потому что есть больший блок, частью которого они являются. Который может выглядеть так:

<sourceDoc xml:id="textContent">
<surfaceGrp xml:id="g.8" n="gathering">
    <surfaceGrp xml:id="f.66" n="folio">
        <surface n="recto">
            <label>Verse 60</label>
            <graphic url="pageimage1.jpg"/>
        </surface>
        <surface n="verso">
            <label>Verse 63</label>
            <graphic url="pageimage2.jpg"/>
        </surface>
    </surfaceGrp>
    <surfaceGrp xml:id="f.67" n="folio>
        <surface n="recto">
            <label>Verse 65</label>
            <graphic url="pageimage3.jpg"/>
        </surface>
        <surface n="verso">
            <label>Verse 66</label>
            <graphic url="pageimage4.jpg"/>
        </surface>
    </surfaceGrp>
</surfaceGrp>
<surfaceGrp xml:id="g.9" n="gathering">
    <surfaceGrp xml:id="f.67" n="folio>
        <surface n="recto">
            <label>Verse 68</label>
            <graphic url="pageimage5.jpg"/>
        </surface>
        <surface n="verso">
            <label>Verse 69</label>
            <graphic url="pageimage6.jpg"/>
       </surface>
    </surfaceGrp>
</surfaceGrp>
</sourceDoc>

Итак, мои вопросы имеют два аспекта:

  1. Как мне заставить мой xsl отображать все в первом <surfaceGrp> дерево? Мой текущий код будет отображать две поверхности для ребенка <surfaceGrp> но не все.
  2. Как мне сгенерировать ссылку из Стиха 66 на Стих 68 в моем примере выше, и принципиально ли она отличается от ссылки из Стиха 65 на Стих 66? Я могу перейти к следующему пункту и следующему <surfaceGrp> используя некоторый запутанный код, который у меня есть, но это невероятно глючное решение и полностью ломается один раз во второй <surfaceGrp> слой добавлен. Если есть стандартное решение, я был бы признателен в правильном направлении.

HTML-код, который XSL генерирует в настоящее время с кодом, который я имею, выглядит следующим образом:

<div id="centerMenu">
<span class="menuitem" id="image_thumbnail">
    <a class="nav_link" href="ww_test_1.html">
        <img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_1-thumbnail.jpg" alt="First Panel" />
    </a>
</span>
<span class="menuitem" id="image_thumbnail">
    <a class="nav_link" href="ww_test_2.html">
        <img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_2-thumbnail.jpg" alt="Second Panel" />
    </a>
</span>
<span class="menuitem" id="image_thumbnail">
    <a class="nav_link" href="ww_test_3.html">
        <img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_3-thumbnail.jpg" alt="Third Panel" />
    </a>
</span>
<span class="menuitem" id="image_thumbnail">
    <a class="nav_link" href="ww_test_4.html">
        <img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_4-thumbnail.jpg" alt="Fourth Panel" />
    </a>
</span>
<span class="menuitem" id="image_thumbnail">
    <a class="nav_link" href="ww_test_5.html">
        <img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_5-thumbnail.jpg" alt="Fifth Panel" />
    </a>
</span>
<span class="menuitem" id="image_thumbnail">
    <a class="nav_link" href="ww_test_6.html">
        <img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_6-thumbnail.jpg" alt="Sixth Panel" />
    </a>
</span>
</div>

<div id="rightMenu">
    <span class="menuitem" id="previousItem">
        <a class="nav_link">Previous</a>
    </span>
    <span class="menuitem" id="nextItem">
        <a class="nav_link" href="ww_test_2.html">Next</a>
    </span>
</div>

0 ответов

Другие вопросы по тегам