Учебники по классам

Запрос для списка учебника по классу

Свойства запроса

  • Пример вызова:

    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>
  • Формат сериализации данных: xml