Запрос для списка учебника по классу
http://a.roz37.ru:9984/garpix/semantik/app/request/execute?rp=http://a.roz37.ru/lipers/запросы/учебники-по-классам&класс=4&файл=Biblioteka/lipersBooks04.xlsx
SELECT *
WHERE {
graph <http://lipers.ru/lipers-simplex/{{файл}}>{
?subject ?predicate ?object.
?subject <http://lipers.ru/схема/годОбучения> "{{класс}}"
}
filter(?subject!=<http://lipers.ru/сущности/учебники#>)
}
declare namespace ns="http://www.w3.org/2005/sparql-results#";
declare variable $results external;
declare function local:значениеСвойства($данные, $имяПредиката){
$данные/ns:binding[@name=$имяПредиката]/ns:*/text()
};
declare function local:значениеСвойства($данные, $имяПредиката, $предикат, $объект){
$данные
[ns:binding[@name=$имяПредиката]/ns:*/text()=$предикат]
/ns:binding[@name=$объект]/ns:*/text()
};
declare function
local:значениеСвойства(
$данные,
$имяСубъекта, $значениеСубъекта,
$имяПредиката, $значениеПредиката,
$имяОбъекта
)
{
$данные
[ns:binding[@name=$имяСубъекта]/ns:*/text()=$значениеСубъекта]
[ns:binding[@name=$имяПредиката]/ns:*/text()=$значениеПредиката]
/ns:binding[@name=$имяОбъекта]/ns:*/text()
};
let $data := $results
let $абоненты :=
local:значениеСвойства(
$data, "predicate", 'http://lipers.ru/схема/абонентКниги', "object"
)
let $книги := distinct-values(local:значениеСвойства($data, "subject"))
return
<ol>Всего книг {count($книги)}, в т.ч. выданы:{
for $абонент in distinct-values($абоненты)
order by $абонент
let $s := local:значениеСвойства($data, "object", $абонент, "subject")
let $название :=
local:значениеСвойства(
$data,
"subject", $s,
"predicate", 'http://lipers.ru/схема/названиеКниги',
"object"
)
let $количествоПоАбоненту := count($название)
return
<li>{$абонент || ' (' || $количествоПоАбоненту || ') : ' || string-join(distinct-values($название), ', ')}</li>
}
{
let $невыданныеКниги :=
for $i in $книги
let $абонент :=
local:значениеСвойства(
$data,
"subject", $i,
"predicate", 'http://lipers.ru/схема/абонентКниги',
"object"
)
where not($абонент)
let $названиеКниги :=
local:значениеСвойства(
$data,
"subject", $i,
"predicate", 'http://lipers.ru/схема/названиеКниги',
"object"
)
let $номерВкаталоге :=
local:значениеСвойства(
$data,
"subject", $i,
"predicate", 'http://lipers.ru/схема/номерВкаталоге',
"object"
)
return
$названиеКниги || ' (' || $номерВкаталоге || ')'
return
<li>Невыданы ({count($невыданныеКниги)}): {string-join($невыданныеКниги, ', ')}</li>
}
</ol>
<div></div>