У меня есть набор из двух файлов XML (помеченных в соответствии со стандартом TEI и содержащих множество элементов <entry>
) в базе данных eXist. Я просматриваю файл с помощью подпрограммы FLWOR, ищу поисковый запрос, который пользователь ввел в форму ($searchterm
), и возвращаю содержимое определенных элементов. Все идет нормально. Теперь я хотел бы добавить еще одну вещь, но я не знаю, как это сделать:
Я хотел бы подсчитать, сколько <entry>
было $searchterm
в <form type="hyperlemma">
, и напечатать его вместо xxx
. Если $searchterm
равно "ангелъ", число будет "3". Поскольку мне нужно напечатать эту информацию, прежде чем я пройдусь по коллекции, я понятия не имею, что мне нужно делать.
Может ли кто-нибудь помочь? Поскольку я все еще новичок в XQuery, мой код, вероятно, не очень красивый, поэтому любые подсказки, которые помогут мне улучшить его, также очень ценятся!
Мой XQuery:
xquery version "3.0";
declare namespace tei="http://www.tei-c.org/ns/1.0";
declare option exist:serialize "method=xhtml media-type=text/html";
declare variable $searchphrase := request:get-parameter("searchphrase", ());
declare variable $collection_path := "/db/apps/ex02/data";
<html>
<head>
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=UTF-8"/>
<title>{$page-title}</title>
</head>
<body>
<h1>{$page-title}</h1>
<h2>Results</h2>
<p>Your input: "{$searchphrase}"</p>
<h3>Found xxx entries</h3>
{
for $file in collection($collection_path),
$hyperlemma in $file/(descendant::tei:entry | descendant::tei:cit)/tei:form[@type='hyperlemma']/tei:orth [ft:query(., $searchphrase)]
let $title := $hyperlemma/ancestor::*/tei:head
let $entry_number := $hyperlemma/ancestor::tei:entry[1]/@xml:id
let $lemma := $hyperlemma/ancestor::tei:entry/tei:form[@type='lemma']/tei:orth
return
<div>
{string($title)} ({data($entry_number)}):<br/>
<strong><font color="red">{string($lemma)}</font></strong><br/>
{
for $counterpart in $hyperlemma/ancestor::tei:entry/(tei:form[@type='lemma'] | tei:form[@type='variant'])/tei:cit/tei:form[@type='lemma']/tei:orth
return
<font color="green">    {string($counterpart)}<br/></font>
}
</div>
}
</body>
These are snippets of the two XML files:
(A)
...
<text>
<head>Euch.</head>
<entry xml:id="pen-26">
<form type="hyperlemma" xml:lang="grc">
<orth>ἄγγελος</orth>
</form>
<form type="lemma" xml:lang="grc">
<orth>ἄγγελος</orth>
<cit type="counterpart" xml:lang="cu">
<form type="hyperlemma" xml:lang="cu">
<orth>ангелъ</orth>
</form>
<form type="lemma" xml:lang="cu">
<orth>аньꙉелъ</orth>
</form>
</cit>
</form>
</entry>
<entry xml:id="pen-336">
<form type="hyperlemma" xml:lang="grc">
<orth>ἀρχάγγελος</orth>
</form>
<form type="lemma" xml:lang="grc">
<orth>ἀρχάγγελος</orth>
<cit type="counterpart" xml:lang="cu">
<form type="hyperlemma" xml:lang="cu">
<orth>ангелъ</orth>
</form>
<form type="lemma" xml:lang="cu">
<orth>аньꙉелъ</orth>
</form>
</cit>
</form>
</entry>
</text>
...
(B)
...
<text>
<head>Syn.Tr. [1]</head>
<entry xml:id="tas-12">
<form type="hyperlemma" xml:lang="grc">
<orth>ἄγγελος</orth>
</form>
<form type="lemma" xml:lang="grc">
<orth>ἄγγελος</orth>
<cit type="counterpart" xml:lang="cu">
<form type="hyperlemma" xml:lang="cu">
<orth>ангелъ</orth>
</form>
<form type="lemma" xml:lang="cu">
<orth>ангєлъ</orth>
</form>
</cit>
<cit type="counterpart" xml:lang="cu">
<form type="hyperlemma" xml:lang="cu">
<orth>вѣстьникъ</orth>
</form>
<form type="lemma" xml:lang="cu">
<orth>вѣстьникъ</orth>
</form>
</cit>
</form>
</entry>
</text>