Фильтр записей в коллекции по заданному параметру
В этой статье будет описано как с помощью языка запросов N3 можно фильтровать данные в коллекции по какому-либо параметру, определённому в текущей записи.
Для начала рассмотрим модель данных:
- Шаблон записи (в нашем примере «Organizatsii»), хранящий мастер-данные, со следующими атрибутами:
- Атрибут (в нашем примере «Filtrpooblasti» с типом данных «Текст»), в котором будет определен параметр для поиска записей в коллекции;
- Атрибут с типом данных «Коллекция» (в нашем примере «Adresaofisov_col»), коллекция, записи в которой будут фильтроваться.
- Шаблон записи (в нашем примере «Adresa»), хранящий записи в коллекции, со следующими атрибутами:
- Атрибут (в нашем примере «Oblast» с типом данных «Текст»), по которому будет осуществляться фильтрация.
Далее, на конструкторе формы кликните на коллекцию и вставьте следующее выражение в «Фильтры записей: Для отображения»:
@prefix object: <http://comindware.com/ontology/object#>. { ("Adresa" "Oblast") object:findProperty ?PropertyOblast. ("Organizatsii" "Adresaofisov_col") object:findProperty ?PropertyAdresaofisov_col. ("Organizatsii" "Filtrpooblasti") object:findProperty ?PropertyOblastFilter.
?item ?PropertyOblastFilter ?filter. ?item ?PropertyAdresaofisov_col ?result_A. ?result_A ?PropertyOblast ?filter. ?result_A -> ?value. } |
Теперь разберём выражение на N3 построчно:
- @prefix object: <http://comindware.com/ontology/object#> — в первой строке подключаем библиотеку «object» для того, чтобы в последующем можно было использовать её свойство «findProperty».
- ("Adresa" "Oblast") object:findProperty ?PropertyOblast. — в строках 3-5 определяем переменные-предикаты, через которые будем получать значения атрибутов. Сначала указываем системное имя шаблона записи, затем системное имя атрибута, значение которого хотим получить: ("Adresa" "Oblast"). Затем используем свойство библиотеки «object:findProperty», чтобы получить ID атрибута в какую-либо переменную, например, «PropertyOblast» (названия переменных задаются произвольно).
- ?item ?PropertyOblastFilter ?filter. — в 7-ой строке происходит следующее: из текущей записи («item») по свойству «PropertyOblastFilter» получаем значение в переменную «filter» (название переменной также задаём произвольно).
Примечание : в языке запросов N3 присутствуют зарезервированные переменные: «item» и «value». «item» — содержит в себе ID записи, в рамках которой отрабатывает выражение (изначальный контекст). «value» — используется для вывода результата тройки.
- ?item ?PropertyAdresaofisov_col ?result_A. — аналогичное действие происходит и в 8-ой строке: из текущей записи получаем значение атрибута «Adresaofisov_col» в переменную «result_A». Так как этот атрибут является коллекцией, то в «result_A» у нас будет содержаться список записей в коллекции.
- ?result_A ?PropertyOblast ?filter. — в 9-ой строке для всего списка записей «result_A» мы получаем значения по свойству «PropertyOblast». Справа у нас уже определено значение («filter»), поэтому в списке останутся только те записи, у которых значение атрибута «Oblast» совпадает со значением в атрибуте «Filtrpooblasti».
- ?result_A -> ?value. — в 10-ой строке выводим результат в «value», после чего можем наблюдать отфильтрованную коллекцию.
Пример фильтрации записей в коллекции
Эта статья была полезна 1 чел.