Я новичок в Xquery и пытаюсь создать библиотечный модуль, который делает несколько вещей.
- Возвращает список медалей, выигранных указанным спортсменом.
- Вставить запрос FLOWR, который проходит через каждую медаль из документа медалей, для которого athID равен значению параметра aID
- Создайте переменную с именем Eventname с именем события в текущей итерации.
- Затем я создаю функцию, которая выведет общее количество медалей, указанное c спортсменом, выигранным
Код:
xquery version "1.0";
module namespace olym="http://www.example.com/olympics";
declare variable $olym:athletes := doc('athletes.xml')/athletes/athlete;
declare variable $olym:discipline := doc('discipline.xml')/disciplines/discipline;
declare variable $olym:events := doc('events.xml')/events/event;
declare variable $olym:medals := doc('medals.xml')/medals/medal;
declare variable $olym:sports := doc('sports.xml')/sports/sport;
(:
Library module for olympics queries
Author: Zavier Vaidya
Date: 4/21/20
Filename: olym_functions.xqm
:)
declare function olym:getAthleteMedals($aID as xs:string, $eID as xs:string) as element()*
{
let $athleteId := $olym:athletes[@athID=$aID]
let $eventName := $olym:events[@eventID=$eID]
where $olym:medals[@eventID=$eID]
return $olym:medals[@athID=$athleteID]
<athIDMedals>{
for $medals in doc('medals.xml')//medal
where $medals/@athID='aID'
return $medals
}</athIDMedals>
};
declare function olym:athleteMedalCount($aID as xs:string) as element()*
{
let $c := $olym:medals[@athID]
for @athID in distinct-values($c)
let $count := count($c[. eq @athID])
return <result>
<athlete>{@athID}</althete>
<totalMedals>{$count}</totalMedals>
</result>
};
пример структуры файла медали:
<medals>
<medal athID="A3577" eventID="E6" olympicID="Summer1988" place="2-Silver"/>
Пример структуры файла спортсмена:
<athletes>
<athlete athID="A100" country="MAR" gender="Male" name="ACHIK, Mohamed"/>
Пример файла события структура:
<events>
<event eventID="E1" eventName="- 47.63kg (flyweight)" sportID="S10" discID="D13" participation="individual"/>