Popis formátu souborů typu .fs

Soubory typu .fs slouží pro zachycení syntaktických struktur vět přirozeného jazyka. Každý takový soubor obsahuje posloupnost stromů, jejichž vrcholy odpovídají jednotlivým slovům věty. Každý vrchol (slovo) je popsán řadou atributů.

Tento popis vznikl na základě céčkového zdrojáku funkcí, kterými se stromy načítají do editoru Graph; autorem zdrojáku je Michal Křen. Autorem popisu je Dan Zeman.

Poznámky k metasyntaxi

Neterminální symboly jsou uzavřeny v ostrých závorkách, terminální symboly nebo jejich řetězce jsou uzavřeny v uvozovkách. Uvnitř uvozovek se používá podobná notace jako v céčku, např. "\t" znamená znak s kódem 9, tj. tabelátor. Znak "\n" reprezentuje konec řádku bez ohledu na platformu, tj. reprezentuje nejen skutečné (v céčkovém smyslu) "\n", ale též "\r\n" (dosový konec řádku), nebo dokonce "\r". Editor Graph umí navíc ještě přečíst posloupnost "\n\r".

Zvláštní význam má konec řádku, uvedený zpětným lomítkem ("\\\n"). Může se zřejmě vyskytnout kdekoliv, v popisu syntaxe proto není kvůli přehlednosti uveden nikde. Takovýto konec řádku se ihned po přečtení zahodí a okolní syntaxe se posuzuje, jako by tam nebyl. Může se tedy vyskytnout například i uvnitř identifikátoru, ale narozdíl od jiných funkčních znaků uvedených zpětným lomítkem se nestává součástí tohoto identifikátoru. Zneškodněný konec řádku slouží k rozdělování řádků za účelem zvýšení čitelnosti FS souboru člověkem.

Unární postfixové operátory "*", "+" a "?" znamenají, že operand se vyskytne n-krát, přičemž pro "*" je n>=0, pro "+" je n>0 a pro "?" je n buď 0, nebo 1.

Tam, kde lze neterminál interpretovat jako množinu, může být použit binární operátor "-", který znamená rozdíl dvou množin.

Struktura souboru

Soubor se skládá ze záhlaví, obsahujícího definice atributů vrcholů stromů, a z posloupnosti stromů.
<soubor .fs> ::=
<řádek definice>+ "\n"+ (<strom> "\n")+ <konfigurace programu Graph>?
<konfigurace programu Graph> ::=
"(" <číslo> ("," <číslo>)* ")"
Poznámka: Čísla v konfiguraci programu jsou indexy atributů, které mají být standardně zobrazeny. (Zobrazení ostatních lze zapnout.) Atributy musí být seřazeny vzestupně, jinak program spadne. Není tedy možné vynutit si jiné pořadí atributů při zobrazování stromu.

Identifikátor, název a hodnota atributu

Identifikátor je jeden ze základních prvků syntaxe souboru .fs. Je to řetězec libovolných znaků od místa, kde identifikátor začíná, až do výskytu funkčního znaku, který do identifikátoru nepatří. I tyto funkční znaky (s výjimkou "\n") však mohou být součástí identifikátoru, pokud jsou uvedeny zpětným lomítkem (uvozující zpětné lomítko součástí identifikátoru není).

Poznámka: Délka identifikátoru je omezená, a to různě podle jeho použití. Pro název atributu je to 20 znaků, pro hodnotu atributu 120 znaků.

<název atributu> ::=
<identifikátor>
<hodnota atributu> ::=
<identifikátor>
<identifikátor> ::=
<identifikátorový znak>+
<identifikátorový znak> ::=
<neškodný znak> | <znak uvedený zpětným lomítkem>
<funkční znak> ::=
"\\" | "=" | "," | "[" | "]" | "|"
<neškodný znak> ::=
<libovolný znak>-<funkční znak>-"\n"
<znak uvedený zpětným lomítkem>
"\\" (<libovolný znak>-"\n")

Definice atributů vrcholu

Na začátku každého souboru se nachází záhlaví s definicemi atributů, které se můžou vyskytnout u vrcholů stromu. Každý řádek záhlaví začíná zavináčem ('@'). Za ním následuje velké písmeno, které určuje vlastnost atributu, pak mezera a jméno atributu. Např. "@P lemma".

Poznámka: V seznamu povolených hodnot v definici @L (<hodnoty>) se jednotlivé hodnoty nesmí opakovat.

<řádek definice> ::=
("@" <vlastnost> <zobrazení>? " " <název atributu> "\n") |
("@L" <zobrazení>? " " <název atributu> "|" <hodnoty> "\n")
<vlastnost> ::=
"K" | "P" | "O" | "N" | "V"
<zobrazení> ::=
"1" | "2" | "3"
<hodnoty> ::=
<hodnota atributu> ("|" <hodnoty>)?

Vlastnosti

K
Obyčejný atribut bez zvláštních vlastností. Řádek začínající na "@K" slouží pouze k zavedení jména atributu, který by jinak neměl žádné řádky. Poznámka: písmeno "K" je zkratka za "klíčový".
P
Poziční atribut. Před jeho hodnotou se v souboru nemusí uvádět jeho jméno, jako je tomu u ostatních atributů (např. ord=7). Jméno atributu, kterému hodnota náleží, se pak pozná podle relativní pozice vzhledem k hodnotám předcházejících atributů (podrobnosti jsou uvedeny níže v odstavci "Vrchol").
O
Povinný atribut. Jeho hodnota musí být u každého uzlu neprázdná (prázdný řetězec je výchozí hodnotou všech atributů), a musí být tedy uvedena.
L
Výčtový atribut. Může nabývat pouze hodnot ze seznamu nebo být prázdný (není-li ovšem povinný).
H
Atribut pro skryté uzly. Pokud má uzel v tomto atributu hodnotu "hide" a v prohlížeči stromů je zapnuto skrývání uzlů, uzel a jeho podstrom budou v prohlížeči skryty.
N
Číselný atribut (hodnotou je nezáporné celé číslo), udávající lineární uspořádání uzlů. Jeho hodnota ovlivňuje x-ovou souřadnici uzlu v prohlížečích stromů. Kvůli zpětné kompatibilitě ovlivňuje také pořadí uzlů ve větě na stavovém řádku, pokud není definován žádný atribut typu @W. Pokud není definován atribut @N, strom je v prohlížeči vycentrován bez ohledu na to, zda je nebo není k dispozici atribut @W. V každém FS souboru může být definován nejvýše jeden atribut typu @N.
W
Jiný číselný atribut udávající slovosled. Pokud je definováno i @N i @W, pak první z nich udává uspořádání uzlů ve stromu, zatímco druhý udává uspořádání slov v lineárním zobrazení na stavovém řádku. Umožňuje to přeuspořádat neprojektivní strom projektivně, aniž by bylo dotčeno zobrazení věty na stavovém řádku.
V
Hodnotový atribut. Jeho hodnota v jistém smyslu reprezentuje celý uzel. V prohlížečích stromů se používá pro lineární zobrazení věty na stavovém řádku. V každém FS souboru může být definován nejvýše jeden takový atribut. Může být podtypu @VH, nebo @VA. První podtyp je výchozí (takže @V je totéž jako @VH) a znamená, že hodnoty skrytých uzlů (viz atribut @H) nebudou zobrazeny ani na stavovém řádku. Druhý podtyp říká, že na stavovém řádku mají být zobrazeny hodnoty všech uzlů včetně skrytých.

Pro jeden atribut lze definovat i více vlastností, jejichž definiční řádky nemusí v záhlaví následovat těsně za sebou. Musí však být dodrženy tyto doplňkové podmínky:

Způsob zobrazení

Způsob zobrazení lze specifikovat volitelně. Lze například požadovat, aby v grafovém editoru byla hodnota daného atributu vždy zvýrazněna, nebo naopak znevýrazněna.
1
ATTR_SHADOW
2
ATTR_HILITE
3
ATTR_XHILITE

Příklad

Jako příklad může sloužit současná definice atributů pro český tree-bank.

Strom

Stromy jsou popsány v obvyklé závorkové notaci, tj. za popisem vnitřního vrcholu následuje v závorkách seznam jeho dětí (resp. jejich podstromů), oddělených čárkami. Děti každého uzlu musí být uspořádány podle hodnot svého číselného atributu @N, pokud ho mají. Při porušení této podmínky není v programu Graph garantováno správné zobrazení stromu, pokud jde o projektivitu (zde se předpokládá, že číselný atribut představuje index slova ve větě vzhledem ke slovosledu).
<strom> ::=
<vrchol> ("(" <děti> ")")?
<děti> ::=
<strom> ("," <děti>)?

Vrchol

Kromě čisté syntaxe je ještě třeba dbát na vazbu mezi prvkem <atributy> a definicí atributů, uvedenou v záhlaví konkrétního souboru. Omezující podmínky z této vazby vyplývající jsou popsány níže.
<vrchol> ::=
<sada atributů> ("|" <vrchol>)?
<sada atributů> ::=
"[" <atributy>? "]"
<atributy> ::=
<atribut> ("," <atributy>)?
<atribut> ::=
(<název atributu> "=")? <hodnoty>
<hodnoty> ::=
<hodnota atributu> ("|" <hodnoty>)
Prvek <atributy> musí navíc splňovat následující podmínky (vyplývající z konkrétní definice atributů, uvedené na začátku čteného souboru):

Příklad

A tady je příklad celého FS souboru i s několika stromy.