Obsah
Cílem tohoto projektu je pokus o reimplementaci programu MakeIndex pomocí XSLT 2.0. Záměrem byla pouze demostrace možnosti takového využití XSLT, nikoliv vytvoření produkčního programu. Další osud projektu závisí na ohlasu potenciálních uživatelů a osobních potřebách autora. Program je poskytován podle licence GPL.
Transformační styly vyžadují procesor XSLT 2.0, např. Saxon v.8.x.
Transformační styly jsou vytvořeny modulárně a pracují v těchto krocích:
Výstup z obou těchto kroků lze pro účely testování zapsat do pomocného souboru. Struktura těchto souborů je definována v dokumentovaném schématu Relax NG (pouze anglicky).
Posledním krokem je formátování výstupu. Zde je demonstrován formát vhodný pro další použití v LaTEXu (format-index.xsl).
Projekt byl podrobně popsán ve Zpravodaji Československého sdružení uživatelů TEXu č. 1/2006.
2.1. | musixdoc.idx |
2.2. | prstyn.idx |
2.3. | makeindex.rng/.xsd |
2.4. | parse-index.xsl |
2.5. | testsort.xsl |
2.6. | sort-index.xsl |
2.7. | format-index.xsl |
2.8. | makeindex.xsl |
Modifikovaný soubor z dokumentace balíčku MusixTEX, při zpracování budou hlášeny chyby. Určen pouze pro testování, kódování ISO 8859-1.
Poznámka: Chyby byly do souboru vneseny úmyslně pro účely testování.
Další testovací soubor, kódování ISO 8859-2. Tento soubor byl vygenerován z textu povídky „Stříbrný prstýnek“, která vyšla v knize Všechna Editina tajemství.
Definice struktury pomocných souborů ve schématu Relax NG. Konverze do XML schématu byla provedena programem trang. Schéma Relax NG bylo též transformováno do HTML. Byl k tomu použit "Nástroj pro anotaci schémat Relax NG".
Transformační styl pro načtení souboru vytvořeného LaTEXem. Parametr
index
obsahuje seznam vstupních souborů oddělených čárkami, nepovinný parametr
enc
určuje kódování souborů (default je UTF-8). Ostatní parametry odpovídají svými
jmény vlastnostem definovaným ve stylovém souboru programu MakeIndex. Některé z nich jsou použity v regulárních výrazech,
proto před speciálními znaky musí být uvedeno zpětné lomítko.
Styl je primárně určen pro import do jiného stylu, ale ve fázi testování může být
použit samostatně. Jméno počáteční šablony je parsed-index
. Výstup musí odpovídat
schématu
makeindex.rng/.xsd.
Jestliže vstupní soubory file1.idx
a file2.idx
mají
kódování ISO 8859-2, výstupní soubor file.xml
má mít kódování CP852 a saxon8
je skript pro spuštění procesoru Saxon,
použijeme příkaz:
saxon8 -o file.xml -it parsed-index parse-index.xsl index=file1.idx,file2.idx enc=iso-8859-2 !encoding=cp852 |
Pomocný testovací styl, viz sort-index.xsl.
Tento styl provádí abecední řazení podle kritérií zadaných v parametrech. Řadí se jen
ty elementy, jejichž jméno je zadáno v parametru keyword
. Počáteční šablona pro
testovací účely se jmenuje sorted-index
a výstup musí odpovídat schématu makeindex.rng/.xsd. Styl nelze použít samostatně, ale musí být importován společně s jiným stylem
vytvářejícím stejný výstup jako parse-index.xsl. Při použití testsort.xsl a obdobných požadavcích jako výše, použijeme:
saxon8 -o file.xml -it sorted-index testsort.xsl index=file1.idx,file2.idx enc=iso-8859-2 !encoding=cp852 |
Tento styl formátuje abecedně seřazený výstup pro další zpracování
LaTEXem. Vlastnosti určované stylovým souborem programu MakeIndex se zde zadávají pomocí
parametrů. Styl má dvě počáteční šablony: noheaders
netvoří nadpisy,
headers
je tvoří. Některá písmena však nemají primární řadicí platnost a v nadpisech
se tudíž nesměji objevit. Ekvivalence pro češtinu a slovenštinu je definována ve funkci
zw:key
. Pro jiné jazyky si musíte obdobné funkce vytvořit sami.
Tento pomocný soubor pouze importuje styly parse-index.xsl, sort-index.xsl a format-index.xsl.
Projekt byl inspirován přednáškou Michael Kay: Schema-aware XSLT Processing přednesenou na konferenci XML Prague v červnu 2005.
Další odkazy:
xslt-indexing.zip, 39 KiB