Запрос для списка учебника по классу
http://a.roz37.ru:9984/garpix/semantik/app/request/execute?rp=http://a.roz37.ru/lipers/запросы/расписание-классов&класс=10
# расписание: расписание класса на неделю
PREFIX признак: <http://lipers.ru/схема/признаки/>
PREFIX онтология: <http://lipers.ru/схема/онтология/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?деньНедели ?урокНомер ?предмет ?кодПредмета ?подгруппа ?имяУчителя
WHERE {
GRAPH ?g {
?занятие
rdf:type онтология:УчебноеЗанятие;
признак:названиеКласса "{{класс}}";
признак:урокНомер ?урокНомер;
признак:деньНеделиНомер ?деньНедели;
признак:названиеПредмета ?кодПредмета.
OPTIONAL {?занятие признак:названиеПодгруппы ?подгруппа}
?учитель признак:имеетУчебноеЗанятие ?занятие;
признак:локальноеИмя ?имяУчителя.
OPTIONAL{
GRAPH ?v {
?идентификаторПредмета
признак:кодПредмета ?кодПредмета;
признак:названиеПредмета ?предмет
}
}
}
}
ORDER BY ?деньНедели ?урокНомер
declare namespace ns="http://www.w3.org/2005/sparql-results#";
declare variable $results external;
let $data := $results
let $строки :=
for $номерУрока in (1 to 8)
return
<tr>
<td>{$номерУрока}</td>
{
for $день in (1 to 5)
let $уроки :=
$data
[ns:binding[@name="деньНедели"]//text()=xs:string($день)]
[ns:binding[@name="урокНомер"]//text()=xs:string($номерУрока)]
let $записиУроков :=
for $урок in $уроки
let $учитель :=
if($урок//ns:binding[@name="подгруппа"]/ns:literal/text())
then('(' || $урок//ns:binding[@name="имяУчителя"]/ns:literal/text() || ')')
else()
let $предмет :=
if($урок//ns:binding[@name="предмет"]/ns:literal/text())
then($урок//ns:binding[@name="предмет"]/ns:literal/text())
else($урок//ns:binding[@name="кодПредмета"]/ns:literal/text())
return
string-join(($предмет, $учитель), ' ')
return
<td>{string-join($записиУроков, ' | ')}</td>
}
</tr>
let $таблица :=
<table class="table table-striped">
<tr>
<th>Урок</th>
<th>Понедельник</th>
<th>Вторник</th>
<th>Среда</th>
<th>Четверг</th>
<th>Пятница</th>
</tr>
{$строки}
</table>
return
$таблица
<div/>