Zasady ogólne
Formularze wyszukiwawcze dają bogate możliwości formułowania nawet bardzo złożonych zapytań z zastosowaniem operatorów logicznych. Jednak z jednej strony nie da się przewidzieć wszelkich możliwych potrzeb wyszukiwania, a z drugiej strony przy próbach objęcia na formularzu większego wachlarza zapytań, formularz ten stałby się zbyt skomplikowany i mało czytelny.
Z tego powodu system oferuje możliwość formułowania kryteriów wyszukiwania z wykorzystaniem języka odwołującego się do zawartości wszelkich pól dostępnych w gromadzonych opisach.
Opcja ta udostępniana jest redaktorom dopiero po zalogowaniu i występuje jako specjalne pole tekstowe przy przycisku uruchamiającym wyszukiwanie:
W polu tym wpisujemy (wklejamy) formuły, które realizowane są wraz z kryteriami wyszukiwania określonymi w pozostałych polach formularza z zastosowaniem operatora iloczynu logicznego (zawężanie odpowiedzi).
Ogólna budowa formuły wyszukiwawczej
Formuły wyszukiwawcze, składają się z cząstkowych elementów określających warunki, jakie powinny spełniać poszczególne pola opisu połączonych operatorami logicznymi:
and - iloczyn logiczny (zawężanie odpowiedzi)
or - suma logiczna (poszerzanie odpowiedzi)
not - negacja logiczna (wykluczanie opisów)
Przykładowa formuła, która znajduje książki redagowane bez redaktorów (i bez autora korporacyjnego) wygląda następująco:
@authorsRole='editor' and not(@author-id>0) and not(corporateauthor-id>0)
Elementarne formuły wyszukiwawcze
Za pomocą elementarnych formuł wyszukiwawczych można sprawdzić m.in.:
* czy pole występuje w opisie
* czy pole zawiera wskazany ciąg znaków
* czy występuje pole złożone, np. czy podano język
* czy występuje powiązanie do innego obiektu, np. czy ustalono powiązanie do projektu
Przydatne formuły wyszukiwawcze
Podano informację dotyczącą stron (zakres stron - artykuł, rozdział) lub liczba stron (książka)
jcr:contains(@collation,'*')
brak informacji dotyczącej stron
not(jcr:contains(@collation,'*'))
artykuł
journalissue-id >0
rozdział
book-id >0
brak informacji dotyczącej liczby stron w książce włączonej do opisu rozdziału
not(jcr:contains(@book-collation,'*')) and book-id >0
czasopismo włączone do opisu artykułu zawiera DOI czasopisma
jcr:contains(@journalissue-journalseries-doi,'*')
określono co najmniej jeden język
language-id >0
brak języka
not(language-id >0)
określono język angielski
jcr:contains(@language/code,'en')
określono język angielski jako pierwszy
jcr:contains(@language-code,'en')
dołaczono plik podstawowy
file-id >0
brak pliku podstawowego
not(file-id >0)
obecność pliku i plik jest dostępny publicznie
jcr:contains(@file/permission/access,'PUBLIC')
obecność pliku, ale plik nie jest dostępny publicznie
@file-id>0 and not(jcr:contains(@file/permission/access,'PUBLIC'))
rekord był importowany
jcr:like(field/@key,'importId')
rekord był importowany w ramach importu o identyfikatorze 1357844845600
jcr:like(field/@key,'importId') and jcr:like(field/@value,'1357844845600')
rekord był importowany przed 13-01-2015
jcr:like(field/@key,'importId') and @createdDate < xs:dateTime('2015-01-13T00:00:00.000-00:00')
rekord autora zawiera jakikolwiek identyfikator z puli danych słownikowych
@authorprofile/extid/id>0
rekord autora zawiera identyfikator Google Scholar
jcr:contains(authorprofile/extid,'scholar')
rekord autora nie zawiera identyfikatora Google Scholar
not(jcr:contains(authorprofile/extid,'scholar'))
rekord autora zawiera jakikolwiek identyfikator, ale nie zawiera identyfikatora Google Scholar
@authorprofile/extid/id>0 and not(jcr:contains(authorprofile/extid,'scholar'))
Data i użytkownik tworzenia (ostatniej modyfikacji) rekordów lub dołączania plików
a/ czy dołączono plik
@file-id>0
b/ czy plik dołączył redaktor MEiL
@file-id>0 and jcr:like(@file-owner,'mel_%')
c/ czy plik dołączył dany redaktor, np. mel_MP
@file-id>0 and @file-owner='mel_MP'
d/ czy plik dołączył dany redaktor, np. mel_MP
@file-id>0 and @file-owner='jackrabbit'
e/ rekordy utworzone po 2017-02-24
@createdDate > xs:dateTime('2017-02-24T00:00:00.000-00:00')
f/ rekordy ostatnio modyfikowane (i tworzone) w okresie od 2016-01-01 do 2017-10-31 @jcr:lastModified >= xs:dateTime('2016-01-01T00:00:00.000-00:00') and @jcr:lastModified <= xs:dateTime('2017-10-31T00:00:00.000-00:00')
g/ rekordy utworzone przez danego redaktora, np. mel_MP @owner='mel_MP'
h/ rekordy ostatnio modyfikowane przez danego redaktora, np. mel_MP @lastModifiedBy='mel_MP'
23.Dane opisujące monografie redagowane pod kątem wymagań PBN dotyczących rozdziałów
a/ książki autorskie
authorsRole='author'
b/ książki redagowane
authorsRole='editor'
c/ brak całkowitej liczby autorów rozdziałów
not(totalChapterAuthorsNo>0)
d/ książki redagowane, w których brak całkowitej liczby autorów rozdziałów
authorsRole='editor' and not(totalChapterAuthorsNo>0
e/ brak wskazania, że książka jest z oznaczeniem autorstwa rozdziałów
not(jcr:contains(@scoreCondition/systemName,'mon_2015_3_4'))
f/ książki redagowane, w których brak całkowitej liczby autorów rozdziałów oraz brak wskazania, ze książka jest z oznaczeniem autorstwa rozdziałów
authorsRole='editor' and not(totalChapterAuthorsNo>0) and not(jcr:contains(@scoreCondition/systemName,'mon_2015_3_4'))
Powyższe zapytania należy wykonywać na poziomie książek.
Sprawdzenie pod tym kątem rozdziałów (poziom rozdziałów), tzn. czy powiązana książka spełnia określone warunki wykonuje się poprzez poprzedzenie każdej specyfikacji dotyczącej książki wskazaniem, że chodzi o obiekt 'book'.
Przykładowo, sprawdzenie na poziomie rozdziałów, czy powiązana książka jest książką redagowaną, w której brak całkowitej liczby autorów rozdziałów oraz brak wskazania, ze książka jest z oznaczeniem autorstwa rozdziałów wygląda następująco:
@book/authorsRole='editor' and not(@book/totalChapterAuthorsNo>0) and not(jcr:contains(@book/scoreCondition/systemName,'mon_2015_3_4'))
Oczywiście, powyższe formuły elementarne można łączyć z wykorzystaniem operatorów logicznych (and, or, not), np.
i/ rekordy utworzone przez danego redaktora, np. mel_MP, po 2017-02-24 @owner='mel_MP' and @createdDate > xs:dateTime('2017-02-24T00:00:00.000-00:00')