Dotazovací jazyky jsou jazyky používané v informatice k dotazování databázových systémů; každý takový systém používá nějaký dotazovací jazyk s přesně definovanou syntaxí.
Při práci s korpusy se dotazovací jazyk používá pro zadávání dotazů v korpusových manažerech, konkordančních programech apod. I tady se jednotlivé jazyky většinou liší, přestože typicky vycházejí z regulárních výrazů, které dále rozšiřují a adaptují pro svoje potřeby.
Dotazovací jazyk užívaný v korpusech ČNK provozovaných na korpusovém manažeru Manatee se nazývá CQL (corpus query language) a je modifikovanou verzí původního jazyka CQL vytvořeného pro korpusový manažer CWB. Jeho základním kamenem je dotaz na jednu pozici (slovo) v korpusu:
[atribut="hodnota"]
kde atributem se myslí atribut poziční (word, lemma, tag apod.), hodnotou je pak hledaný výraz sám, nebo vzor specifikovaný pomocí regulárního výrazu. Součástí dotazu můžou být i omezení na strukturní atributy (věta <s>
, dokument <doc>
apod.), u nichž je možné specifikovat i další hodnoty (např. u textů rok vydání, žánr, autor apod.). Omezení na strukturní atributy se na rozdíl od omezení na atributy poziční uvádějí ve špičatých závorkách (např. <s id="10"/>
); viz podrobnější a úplnější popis jazyka CQL. CQL je formální jazyk, jenž má přesnou (a konečnou) definici. CQL podporuje některé prvky tradičních regulárních jazyků1), ale i rozšířené, specificky korpusové, příkazy jako je within
, meet
, union
nebo containing
, které pracují se strukturou korpusu.
Dotaz na více pozic současně (tedy sekvenci slov či širší kontext) vznikne prostým zřetězením dotazů na jednotlivé po sobě následující pozice. Např. dotaz [lemma="mít"][][lemma="srdce"]
hledá všechny výskyty lemmat mít a srdce, mezi nimiž se vyskytuje libovolná pozice (tj. slovo nebo interpunkce).
Následující příklad dotazovacího jazyka korpusového manažeru Manatee najde všechny doklady spojení typu „bez chuti a bez zápachu“, „bez práce, bez peněz“ apod. vyskytující se v korpusu uvnitř jedné věty (struktura <s/>
, viz strukturní atributy):
[lemma="bez"] [tag="N.*"] []{0,1} [lemma="bez"] [tag="N.*"] within <s/>
Každou pozici v sekvenci zde zastupuje jedna hranatá závorka, případně doplněná kvantifikátorem ve složených závorkách. První pozici vyhovují všechna slova lemmatizovaná jako „bez“, druhé pozici vyhovují všechna substantiva (tedy slovní tvary opatřené morfologickým tagem začínajícím písmenem „N“ za nímž následuje libovolná sekvence libovolných znaků), třetí pozici vyhovuje libovolné jedno (či žádné) slovo, čtvrtá pozice je opět omezena lemmatem „bez“, pátá opět pouze morfologickou značkou substantiva. Direktiva within
omezuje celý dotaz na rámec jednoho strukturního atributu typu <s/>
(tedy jedné věty). Pro tento účel lze využít též direktivu containing
.
Při práci s korpusovým manažerem je vhodné znát použitý dotazovací jazyk a jeho možnosti. Ačkoli některá uživatelská rozhraní umožňují zadávat dotaz i bez znalosti konkrétního dotazovacího jazyka, bývají v tomto případě možnosti práce s korpusem omezeny, což je dáno snahou o uživatelský komfort a srozumitelnost rozhraní, která je vždy na úkor plného využití bohatých kombinací možností vyhledávání.