Obsah
Seznam obrázků
Seznam tabulek
Seznam příkladů
Seznam rovnic
Psaní dokumentu v XML není vůbec nic těžkého, pokud jste schopni napsat něco v HTML, tak způsob vytváření XML dokumentu není rozhodně nic složitějšího. Pokud nevíte nic o XML, DTD a XSLT není na škodu si přečíst pár základů v nějaké publikaci.
Základní myšlenka tvorby dokumentů v XML je postavená na co možná největší přenositelnosti a zachovaní vzhledu, toho lze dosáhnout patrně jen oddělením logického a vizuálního obsahu v dokumentu. Pro tento způsob psaní je ideální právě XML. HTML je množina pravidel pro psaní dokumentu pro web. DocBook je také taková množina pravidel jak psát dokumentace v XML. V DocBooku je například vytvořena dokumentace např. k operačním systémům Linux a FreeBSD, ke skriptovacímu jazyku PHP, ke grafickým rozhraním KDE a Gnome. DocBook používají i velká počítačová nakladatelství jako O'Reilly nebo velké softwarové firmy. Tak proč to také nezkusit :-).
Jedna věc je napsat něco v DocBooku a druhá je si to prohlédnout v nějakém pěkném formátu. Jelikož je v XML zachycena pouze logická forma, musíme k dokumentu dosadit i nějaké ty vizuální informace. Toho můžeme dosáhnout např. tím, že ho zkonvertujeme do HTML, LaTeXu, PDF, PS, RTF, CHM ... Potřebujeme nějaká pravidla, která budou přesně stanovovat, jak který element v DocBooku bude vypadat třeba v HTML nebo RTF ... K tomuto existují tzv. XSL (DSSSL) styly, které takové informace obsahují a které nám umožní náš XML soubor transformovat do patřičného formátu.
Hlavní výhodou je, že napíšeme jeden dokument a získáme z něj několik dalších např. HTML, RTF, PDF plus pokud se rozhodneme v budoucnu z našich dokumentů získávat určité přesné informace nebude to žádný problém.
Další nespornou výhodou je, že můžeme náš dokument zpracovat nějakým kvalitním typografickým systémem jako je LaTeX, aniž bychom o psaní dokumentů v LaTeXu mnoho věděli. Tím, že jednoduše převedeme dokument v DocBooku do LaTeXového a pdflatexem přeložíme. Dosáhneme precizního typografického sjednocení našich dokumentů.
Transformace se skládá ze tří částí:
Transformačního procesoru, který celou transformaci realizuje, většinou napsaný v Javě, C++, Pythonu ...
modul xslt používá xsltproc, saxon7, saxon, xalan nebo jdxslt
pro transformaci do HTML, XHTML, FO, RTF a CHM se používají rozšířené XSL styly docbook-xsl
pro transformaci do LaTeXu upravené a rozšířené XSL styly db2latex s vestavěnou podporou pro LaTeXový cls styl fithesis
Na fakultě informatiky je možné použít modul xslt2
module add xslt2
pokud chcete používat xslt2 na svém počítači, je možné si distribuci stáhnout 6 – „Download“.
Program xslt vypíše jako základní hlášení toto:
usage: xslt [options] inputfile -h, --help prints this help message -v, --version prints version info -d, --debug debud mode: no temporary files cleaning -e, --silent do not display any warnings -m, --timing display consumed time -f, --config set config file -n, --nocatalog do not use catalog files -y, --nolatex do not make changes in LaTeX file -x, --xinclude xinclude support -l, --latex do some useful changes in LaTeX file -s, --xsl stylesheet -o, --out output file -i, --in input file -r, --param stylesheets parameters -p, --processor xslt processor [xsltproc|saxon|saxon7|xalan|jd] -t, --task task {parse|jparse|valid|jvalid| pdf|foppdf|xeppdf|ps|dvi|rtf| win2utf|iso2utf|math|new|}
Význam jednotlivých voleb:
-h
vypíše hlášení o způsobu použití
-v
vypíše verzi programu
-d
debug mode, vypisují se podrobná hlášení při transformaci a nemažou se pomocné soubory
-e
nevypisuje žádné warningy ani chyby při transformaci
-m
zobrací celkový čast transformace
-f
jméno souboru s konfigurací, standardně se hledá v $HOME
nebo lib
(pro lokální instalaci)
-n
přepínač pro nepoužití catalogů
-y
přepínač pro nenahrazování entit v LaTeXovém souboru
-x
přepínač pro podporu xinclude
-l
přepínač pro náhrady entit v LaTeXovém souboru (implicitní při -t pdf
)
-s
jméno XSL souboru pro transformaci
-o
jméno výstupního souboru
-i
jméno vstupního souboru (nepovinné, není nutné uvádět příponu)
-r
parametry pro procesor
-p
jméno XSLT procesoru
-t
způsob transformace
Detailnější informace o parametru: -t
Jako hodnotu tohoto parametru můžeme udat buď název procesoru, který bude použit pro transformaci. Neuvedeme li nic je použit implicitní binární procesor xsltproc. Nebo jeden u transformačních úkonů:
parse
zkontroluje se zdali je dokument označkován způsobem odpovídajícímu standardu XML
jparse
to samé pomocí xercesu
valid
zkontroluje se zdali struktura dokumentu odpovídá uvedené gramatice (DTD)
jvalid
na kontrolu se použije třída xercesu (umí kontrolovat i šablony)
pdf
provede se sekvence příkazů k vygenerování souboru v PDF
foppdf
PDF se vygeneruje ze zdrojového FO souboru pomocí FOPu
xeppdf
PDF se vygeneruje ze zdrojového FO souboru pomocí XEPu
ps
provede se sekvence příkazů k vygenerování souboru v PS
dvi
provede se sekvence příkazů k vygenerování souboru v DVI
rtf
pomocí XSL stylů se soubor transformuje do formátu RTF
math
ze souboru s matematikou se vygenerují obrázky pro použití v HTML souboru
new
vytvoří novou šablonu pro bc nebo dipl. práci a nakopíruje k ní doocbook.xsl
a fi-logo.png
iso2utf
transformuje vstupní soubor v kódovaní ISO-8859-2 do kódování UTF-8
win2utf
transformuje vstupní soubor v kódovaní WINDOWS-1250 do kódování UTF-8
Za parametr -s
můžeme uvést buď:
předdefinovanou hodnotu umístění transformačního stylu:
html
pro HTML transformaci
htmlchunk
pro HTML transformaci do více souboru (např. po kapitolách)
xhtml
pro XHTML transformaci
xhtmlchunk
pro XHTML transformaci do více souboru (např. po kapitolách)
fo
pro FO transformaci
fithesis (fi)
pro LaTeXovou transformaci s použitím cls stylu fithesis pro bc. a dipl. práce
fithesisprint (fiprn)
fithesis pro konečný tisk (černobílé provedení)
latex
pro LaTeXovou transformaci
htmlhelp
pro transformaci do formátu CHM Dále je nutné spustit program hhc na vzniklý soubor htmlhelp.hhp
hhc je součástí: HTML Help Workshop
javahelp
pro transformaci do JavaHelpu
Pro prohlížení Java Helpu musíte mít k dispozici: JavaHelp
jhindexer *.html
jar -cvf help.jar *
hsviewer jhelpset.hs help.jar
nebo vlastní XSL soubor viz „Modifikace stylů“
Příklad 2.4. převod do HTML s použitím catalogů, vlastního XSL souboru a saxonu
xslt -p saxon -s myhtml.xsl -o file.html file.xml
Programu xslt můžeme zadat vlastní hodnoty nastavení cest k programům které používá. Má to význam hlavně při lokálních instalacích, kdy chceme aby xslt používal konkrétní umístění jednotlivých programů. Stačí změnit údaje v konfiguračním souboru .xsltrc
, který se standardně hledá v adresáři $HOME
nebo lib
u lokálních instalací či přímo lze udat jeho umístění přepínačem -f
Není nutné nastavovat vše, jen to co potřebujeme změnit, syntaxe je podobná perlovskému zápisu.
CatalogManager.properties
calalog.xml
.xsltrc
CLASSPATH
convertor.jar
ResolvingXMLReader
CatalogResolver
DocumentBuilderFactoryImpl
SAXParserFactoryImpl
K tomu abychom mohli XML dokument pohodlně tvořit potřebujeme i kvalitní editor ve kterém lze pohodl XML soubor editovat. Musí přinejmenším umožňovat zvýrazňovat syntaxi, ty lepší umí i kontrolovat strukturu XML dokumentu.
Editory napsané v Javě nám poběží na každé platformě, kde máme nainstalováno JDK popřípadě JRE.
JEdit http://www.jedit.org klasický editor, umí zvýrazňovat syntaxi a lze do něj přidat i plugin pro XML validaci a XSLT transformace.
XMLMind http://www.xmlmind.com/xmleditor vynikající WYSIWYG editor.
Flexycontent http://www.dni.lu
dbkEditor http://dbkeditor.sourceforge.net
I pro platformu Linux je několik obstojných editorů.
Bluefish http://bluefish.openoffice.nl vynikající editor, který umožňuje zvýraznění syntaxe a kontrolu pravopisu pomocí Aspellu.
Quanta http://quanta.sourceforge.net asi nejpoužívanější editor pod linuxem, který umožňuje zvýraznění syntaxe.
Nedit http://www.nedit.org editor, který umožňuje zvýraznění syntaxe (neumí utf-8).
Kedit http://www.kde.org editor pocházející z dílny KDE, který umožňuje zvýraznění syntaxe.
Emacs
http://www.emacs.org velice kvalitní editor (pro začátečníky trochu nezvyklé ovládání) lze do něj přidat psgml
plugin a pomocí Aspellu se dá kontrolovat i pravopis.
Pro platformu Windows existuje mnoho různých editorů, mezi ty nejlepší patří:
EmEditor http://www.emurasoft.com rychlý špičkový editor umožňující zvýraznění syntaxe, existuje do něj plugin, který umí kontrolovat jestli je XML dokument well-formed a plugin, který sám doplňuje ukončovací elementy!
UltraEdit www.ultraedit.com editor umožňující zvýraznění syntaxe
Altova AUTHENTIC http://www.altova.com
Emacs
http://www.emacs.org velice kvalitní editor (pro začátečníky trochu nezvyklé ovládání) lze do něj přidat psgml
plugin a pomocí ISpelu se dá kontrolovat i pravopis.
HTML-Kit http://www.chami.com/html-kit
CookTop http://www.xmlcooktop.com umožňuje validuje DTD, XSL transformace, Xpath dotazy ...
TextPad http://www.textpad.com vynikající editor, má v sobě podporu přímo pro DocBook, dokumenty lze psát do šablony podobně jako ve Wordu.
Obsah
Abychom mohl napsat dokument v DocBooku je třeba vědět, které elementy pro daný druh informací máme použít. Uplný referencí přehled všech elementů DocBooku lze nalézt na: DocBook. Nám však bude stačit daleko menší podmnožina.
Každý XML dokument se musí skládat z jednoho kořenového elementu, ve kterém jsou všechny jiné elementy vnořeny. Jeho název musí být shodný z názvem použitého DTD!. Nejpoužívanějším kořenovým elementem pro DocBook je book
, obsahuje též užitečný atribut lang
ve kterém lze zkratkou specifikovat použitý jazyk.
V dokumentu můžeme v záhlaví uvést různé užitečné meta informace ať již o dokumentu tak i o autorovi. K tomu slouží bookinfo
Příklad 4.1. Záhlaví
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"> <book lang="cs"> <bookinfo> <title>Název dokumentu</title> <subtitle>Bakalářská práce</subtitle> <author> <firstname>Jméno</firstname> <surname>Příjmení</surname> </author> <pubdate>jaro 2003</pubdate> <abstract> <para>...</para> </abstract> <keywordset> <keyword>DocBook</keyword> </keywordset> </bookinfo> </book>
Rozsáhlé dokumenty lze členit na části part
. U těch menších stačí dokument členit na kapitoly chapter
pod části sect1..5
. Jako samostatné kapitoly může do dokumentu vložit předmluvu preface
, obsah toc
, přílohy appendix
, slovníček glossary
, seznam literatury bibliography
a rejstřík index
. Každé části je dobré dát i atribut id
pomocí kterého se může později v dokumentu na danou část odkazovat.
Příklad 4.2. Členění dokumentu
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"> <book lang="cs"> <bookinfo> <title>Název dokumentu</title> <subtitle>Bakalářská práce</subtitle> <author> <firstname>Jméno</firstname> <surname>Příjmení</surname> </author> <pubdate>jaro 2003</pubdate> <abstract> <para>...</para> </abstract> <keywordset> <keyword>DocBook</keyword> </keywordset> </bookinfo> <preface id="ch00"> <title>Pár slov úvodem</title> <para>...<para> </preface> <part id="partI"> <title>Část první</title> <para>...</para> <chapter id="ch01"> <title>Začínáme</title> <para>...</para> <sect1 id="sec0101"> <title>Tematická orientace</title><para> <para>...</para> <sect2 id="sec010101"> <title>Horizontální portály</title><para> <para>...</para> </sect2> </sect1> </chapter> </part> </book>
Vytvoření v obsahu je opravdu jednoduché jediné co musí udělat je vložit do dokumentu element <toc/>
. XSLT styly umí automaticky zjistit všechny části dokumentu a vygenerovat obsah sami.
Pro vytvoření rejstříku musíme v textu označit které výrazy mají být do rejstříku začleněny. Rejstřík může mít až tři úrovně odkazovaní, obvykle postačí pouze první úroveň. Na konec dokumentu vložíme element <index/>
. XSLT styly opět automaticky zjistí všechny odkazy na rejstřík sami ho vygenerují.
Elementem citation
označíme v textu místa, kde citujeme z cizí publikace. Na konci dokumentu (před rejstříkem) v sekci bibliography
uvedeme informace o citovaných publikací. Jako identifikátor se obvykle používá pořadové číslo nebo zkratka daného autora popřípadě spojená s rokem vydaní publikace.
Příklad 4.5. Literatura
... <para>... nalézt v knize: XML pro každého <citation>Kosek</citation> ...</para> ... <bibliography> <biblioentry> <abbrev>Kosek</abbrev> <author> <firstname>Jiří</firstname> <surname>Kosek</surname> </author> <title>XML pro každého</title> <publisher> <publishername>Grada Publishing</publishername> </publisher> <pubdate>2000</pubdate> <isbn>80-7169-860-1</isbn> <releaseinfo> <ulink url="http://www.grada.cz">http://www.grada.cz</ulink> </releaseinfo> </biblioentry> </bibliography> <index/> </book>
DocBook nám nabízí tři druhy odstavců: normální para
, simpara
ten obsahuje pouze text a inline elementy (to jsou ty které nám v textu nevytvoří další odstavce, začínají příponou inline) a formalpara
což je odstavec s titulkem.
Příklad 4.6. Odstavce
<para>běžný odstavec</para> <simpara>jednoduchý odstavec</simpara> <formalpara><title>Titulek odstavce</title> <para>odstavec</para> </formalpara>
běžný odstavec
jednoduchý odstavec
Titulek odstavce. odstavec
Na výběr máme z několika možností jak seznam utvořit.
SimpleList
je nejednodušší variantou, pomocí atributů type
a columns
můžeme sdružovat sloupce dohromady.
ItemizedList
seznam s odrážkou.
OrderedList
číslovaný seznam, atributem: numeration
může určit typ výsledného číslování
VariableList
seznam kde je ke každé množině položek přidružená definice
SegmentedList
seznam seskupený do sloupců podle jednotlivých množin údajů
CalloutList
slouží k vytvoření očíslovaných odkazů do textu, použití je o trošku složitější viz referenční stránky: DocBook
Příklad 4.7. SimpleList
<simplelist type="vert" columns="3"> <member>A</member> <member>B</member> <member>C</member> <member>D</member> <member>E</member> <member>F</member> <member>G</member> </simplelist>
A | D | G |
B | E | |
C | F |
Příklad 4.8. ItemizedList
<itemizedlist> <listitem><para>TeX and LaTeX</para></listitem> <listitem><para>XML</para></listitem> <listitem><simpara>HTML</simpara></listitem> <listitem><simpara>XHTML</simpara></listitem> </itemizedlist>
TeX and LaTeX
XML
Příklad 4.9. OrderedList
<orderedlist numeration="lowerroman"> <listitem><para>One</para></listitem> <listitem><para>Two</para></listitem> <listitem><simpara>Three</simpara></listitem> <listitem><simpara>Four</simpara></listitem> </orderedlist>
One
Two
Příklad 4.10. VariableList
<variablelist> <title>Font Filename Extensions</title> <varlistentry> <term><filename>TTF</filename></term> <listitem><para>TrueType fonts.</para></listitem> </varlistentry> <varlistentry> <term><filename>PFA</filename></term> <term><filename>PFB</filename></term> <listitem><para>PostScript fonts. <filename>PFA</filename> coomon <acronym>UNIX</acronym>, <filename>PFB</filename> more common on Windows.</para> </listitem> </varlistentry> </variablelist>
Font Filename Extensions
TTF
TrueType fonts.
PFA
,
PFB
PostScript fonts. PFA
files are common on UNIX systems, PFB
files are more common on Windows systems.
Příklad 4.11. SegmentedList
<segmentedlist><title>State Capitals</title> <segtitle>State</segtitle><segtitle>Capital</segtitle> <seglistitem><seg>Alabama</seg><seg>Montgomery</seg></seglistitem> <seglistitem><seg>Alaska</seg><seg>Anchorage</seg></seglistitem> <seglistitem><seg>Arkansas</seg><seg>Little Rock</seg></seglistitem> </segmentedlist>
Pro zápis tabulky existuje v DocBooku podobně bohatá syntaxe jako pro HTML, podrobněji opět viz originální reference DocBook
Můžeme si vybrat ze svou možností, buď klasickou tabulku uvozenou titulkem table
nebo jako u jiných elementů použít prefix informal, kdy dostane tabulku bez titulku.
Příklad 4.12. Tabulka s titulkem
<table> <title>Sample Table</title> <tgroup cols="2"> <tbody> <row><entry>1</entry><entry>1</entry></row> <row><entry>2</entry><entry>4</entry></row> <row><entry>3</entry><entry>9</entry></row> </tbody> </tgroup> </table>
Příklad 4.13. Tabulka bez titulku a bez rámečku
<informaltable frame="none"> <tgroup cols="2"> <colspec align="center"/> <colspec align="center"/> <tbody> <row><entry>1</entry><entry>1</entry></row> <row><entry>2</entry><entry>4</entry></row> <row><entry>3</entry><entry>9</entry></row> </tbody> </tgroup> </informaltable>
1 | 1 |
2 | 4 |
3 | 9 |
Různé příklady a ukázky v DocBooku se označují elementy: example
nebo bez použití titulku : informalexample
.
Příklad 4.14. Příklad s titulkem
<example> <title>Příklad s titulkem</title> <para>ukázka kódu …</para> </example>
Příklad 4.16. Příklad bez titulku
<informalexample> <para>ukázka kódu …</para> </informalexample>
ukázka kódu …
Slouží pro zápis programového kódu, obvykle je vhodné ho použít se sekcí CDATA
. Zachovává řádkování.
sekce CDATA
slouží pro vkládání kódu, u kterého nechceme aby se uplatňovali speciální znaky jako: <
, >
a &
.
Příklad 4.17. CDATA
<ProgramListing><![CDATA[ for (Iterátore j = neighbors.iterator(); j.hasNext(); ) { Node neighbor = (Node)j.next(); System.out.print(neighbor.getName()); if (j.hasNext()) { System.out.print(", "); } } ]]></programlisting>
for (Iterator j = neighbors.iterator(); j.hasNext(); ) { Node neighbor = (Node)j.next(); System.out.print(neighbor.getName()); if (j.hasNext()) { System.out.print(", "); } }
Obsah
Předem doporučuji dvě věci:
Ze všeho nejlepší je, inspirovat se z již hotových prací (ale není zaručeno, že jsou napsané správně): 7 – „Hotové práce“
Zaručeně správnou syntaxi se můžete dozvědět z referenční příručky tvůrců docbooku: DocBook
Výborné jsou i testovací soubory pro docbook docbook-testdocs-1.1
Na škodu není přečíst si ani tutoriál Jiřího Koska: http://www.kosek.cz/xml/db
xslt umí vygenerovat nový XML soubor pro naši práci: bakalářskou (bc
) či diplomovou (thesis
), obsahuje základní strukturu souboru popsanou v této kapitole a do stejného adresáře jsou nakopírovány i další potřebné soubory.
xslt -t new bc
xslt -t new thesis
Úplně na začátek souboru vložíme element pro identifikaci verze XML a kódování dokumentu.
<?xml version="1.0" encoding="utf-8"?>
Pokud chceme XML soubor úspěšně validovat je třeba uvést gramatiku DTD podle, které se dokument zkontroluje, a odkaz na jeho umístění
Můžeme použít dva způsoby umístění DTD: PUBLIC tzn. uvedeme URL, kde je dané DTD veřejně dostupné z webu. Což je velice výhodné pro přenositelnost dokumentu a obecně doporučované. Pro praxi by ale stahování DTD z internetu značně zpomalovalo proces transformace a nebylo by možné přistupovat k DTD bez připojení na internet. Řešení je použití catalogů, soubor pomocí kterého se PUBLIC DTD přemapuje na lokální umístění DTD.
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!ENTITY % fithesis SYSTEM "http://www.fi.muni.cz/~xpavlov/fithesis.mod"> %fithesis;]>
Dále kořenový element book
s identifikaci jazyka.
<book lang="cs">
Do záhlaví XML souboru je nutné dát povinné identifikační elementy.
title
název práce
subtitle
typ práce: bakalářská, diplomová
firstname
křestní jméno autora
surname
příjmení autora
fi:woman
logická hodnota pohlaví autora: true, false
fi:faculty
zkratka fakulty:
fi: Fakulta informatiky
sci: Přírodovědecká fakulta
law: Právnická fakulta
eco: Ekonomická fakulta
med: Lékařská fakulta
fss: Fakulta sociálních studií
phil: Filozofická fakulta
ped: Pedagogická fakulta
fi:advisor
jméno vedoucího práce
fi:thanks
poděkování, obvykle se uvádí jen u diplomových prací
pubdate
semestr ve kterém byla práce vytvořena
abstract
abstrakt práce (krátké pojednání, o čem práce je)
keywordset
klíčová slova
Takhle může vypadat začátek vašeho XML dokumentu, doporučuji cut and paste okopírovat a pozměnit podle svých údajů.
Příklad 5.1. vzhled XML souboru
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!ENTITY % fithesis SYSTEM "http://www.fi.muni.cz/~xpavlov/fithesis.mod"> %fithesis;]> <book lang="cs"> <bookinfo> <title>Název práce</title> <subtitle>Bakalářská práce</subtitle> <author> <firstname>Jméno</firstname> <surname>Příjmení</surname> <fi:woman>false</fi:woman> <fi:faculty>fi</fi:faculty> <fi:advisor>titul jméno příjmení</fi:advisor> </author> <pubdate>jaro 2003</pubdate> <abstract> <para>Psaní dokumentů ve formátu XML DocBook sebou přináší hned několik výhod ...</para> </abstract> <keywordset> <keyword>XHTML</keyword> <keyword>XML</keyword> </keywordset> </bookinfo> </book>
PDF můžeme z našeho souboru získat tím, že styly vygenerujeme LaTeXový zdrojový kód s již začleněnou podporou pro bakalářské a diplomové práce. Ten se pak pomoci LaTeXových transformací převede do PDF formátu.
Automaticky dojde k nahrazení nejpoužívanějších entit a slova LaTeX se změní na LaTeXové logo.
xslt -t pdf -s fithesis file.xml
Pokud chceme soubor transformovat i do PS, je nutné mít všechny obrázky dostupné i ve formátu EPS (cslatex neumí jednoduše zpracovat jiný formát). V XML souboru uvádíme jména obrázku bez jejich přípony.
xslt -t ps -s fithesis file.xml
Před finální vysázením je dobré zkrotrolovat, zdali proběhl zlom bez problémů. K tomuto slouží LaTeXovým mód draft
, kdy se nám na konci každého špatně zalomeného řádku zobrazí černý obdelníček. Nastavíme pomocí:
<xsl:param name="latex.documentclass.common" select="'draft'"/>
popřípadě:
xslt -t pdf -s fithesis-draft file.xml
Pro tisk je lepší verze dokumentu, kde nejsou použité žádné barvy v odkazech, potřebné monochromatické nastavení provádí šablona fithesis-print
.
xslt -t pdf -s fithesis-print file.xml
Pro vygenerování HTML nebo XHTML použijeme bud předefinované cesty ke stylům pro HTML:
xslt -s html file.xml
pro xhtml:
xslt -s xhtml file.xml
nebo si můžeme přenastavit některé z parametrů ve svém vlastním stylu viz. „Modifikace stylů“
xslt -s myhtmlstyle.xsl -o file.html file.xml
Dále budeme potřebovat logo ve formátu PNG a nějaký CSS styl.
Dostupné CSS styly (časem přibudou další):
a pak ještě logo fakulty ve formátu PNG:
docbook-xsl styly umožňují jistou škálu konfigurovatelnosti nastavováním různých parametrů, což lze provést v iniciálním XSL souboru transformace. V něm nastavíme potřebné parametry a importujeme originální iniciální XSL soubor docbook.xsl
Originální soubor spouštějící samostatnou je transformaci je v /packages/share/xslt2-2.6.5/xsl/{typtrasformace}/docbook.xsl
Pokud chceme změnit nějaké parametry lze spustit překlad pomocí vlastního XSL souboru, ve kterém je nutno importovat originální dockbook.xsl
Vytvoříme si vlastní XSL soubor pro transformaci do HTML, ve kterém změníme jméno CSS souboru a nastavíme potřebné parametry pro použití matematiky.
Příklad 5.2. myhtml.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'> <xsl:import href="/packages/share/xslt2-2.6.5/xsl/html/docbook.xsl"/> <xsl:param name="html.stylesheet" select="'docbook2.css'"/> <xsl:param name="tex.math.file" select="'tex-math-equations.tex'"/> <xsl:param name="tex.math.in.alt" select="'latex'"/> </xsl:stylesheet>
Transformaci pak spustíme takto:
xslt -s myhtml.xsl -o file.html file.xml
Referenční popis parametrů: reference HTML parametrů
XInclude je standard pro vkládání textu do XML souborů, nabízí mnohem elegantnější a silnější prostředek než je vkládání pomocí entit:
<!ENTITY intro "intro.xml"/>
Při vkládání dokumentů jako entity jsme nemohli uvádět DOCTYPE
a XML soubory nebyly tak plnohodnotné a nešly validovat. S XInclude tento problém odpadá. Navíc můžeme pomocí Xpointer odkazu stanovit, kterou část dokumentu vložit, vybrat si zdali dokument vložit jako text nebo jako XML kód a ošetřovat případy, kdy se vložení nepodařilo.
Elementy použité pro XInclude patří do vlastního jmenného prostotu, který musí být všude v dokumentu stejný.
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="intro.xml"/>
Dokument nemusíme vkládat celý, ale třeba jen danou kapitolu, nejednodušší způsob je použít ID dané kapitoly.
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="intro.xml#Installing"/>
Mnohem více lze docílit, pokud použijeme xpointer
ukazatel na požadovanou část dokumentu, pomocí Xpath
syntaxe.
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="intro.xml" xpointer="(/sect1/section[1]/*)"/>
XInclude můžeme použít i ke vkládání prostého textu. Atribut parse="text"
sdělí procesoru, aby daný obsah namísto XML zobrazil jako prostý text. Tím jsou speciální XML znaky převedeny na odpovídající entity:
& na & < na < > na > " na "
<programlisting> <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="code.c" parse="text"/> </programlisting>
Na fakultě informatiky vznikl projekt xincluder-fi.jar, který rozšiřuje originální xincluder.jar o možnost vložit pouze specifikované řádky z vkládaného souboru.
Při vkládání prostého textu můžeme využít rozšířené interpretace URL vkládaného souboru. V URL textového souboru nemají standardně znaky za # žádný speciální význam – např. code.c#1
je běžně interpretováno stejně jako code.c
. Prostor za # proto využijeme ke specifikaci, které řádky ze vstupního souboru vložit, např.:
vloží pouze druhý řádek
vloží od druhého řádku počínaje všechny řádky
vloží řádky od druhého do pátého včetně
vloží tři řádky počínaje druhým
vloží první dva řádky
vloží první dva řádky
Pokud vložení neproběhne správně, ať už z důvodu, že daný soubor neexistuje nebo jej nelze stáhnout, lze namísto prázdného xi:include
elementu vložit na dané místo vlastní chybové hlášení.
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="intro.xml"> <xi:fallback> <para><emphasis>CHYBA: XINCLUDE</emphasis></para> </xi:fallback> </xi:include>
Ve skutečnosti může xi:fallback
obsahovat další xi:include
element, který se procesor pokusí vyhodnotit v případě neúspěchu. Nesmíme však zapomenout, že pokud uvedeme xi:fallback
, tak se transformace dokumentu v případě chyby nezastaví. Pokud je nezbytné, aby vložení souboru proběhlo, je lepší xi:fallback
element nepoužívat a nechat proces skončit s chybou.
Příklad 5.3. použití XInclude
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!ENTITY % fithesis SYSTEM "http://www.fi.muni.cz/~xpavlov/fithesis.mod"> %fithesis; ]> <book lang="cs"> <xi:include href="preface.xml" xpointer="(/book/*)" /> <xi:include href="intro.xml" xpointer="(/book/*)" /> </book>
Při překladu je potřeba použít parametr -x
.
V současné době je možné v XML souboru použít LaTeXovou notaci pro zápis matematiky, ta se pak po transformaci zobrazí jak ve výsledném PDF (PS) tak i HTML (XHTML). LaTeXový procesor si ji sám nativně přeloží a v HTML souboru je zobrazena jako obrázek. Do našeho XSL souboru viz. „Modifikace stylů“ pro HTML nastavíme:
Příklad 5.4. nastavení parametrů pro matematiku
<xsl:param name="tex.math.file" select="'tex-math-equations.tex'"/> <xsl:param name="tex.math.in.alt" select="'latex'"/>
Styly zapíší matematické výrazy do souboru tex-math-equations.tex
z něho lze pomocí
xslt -t math tex-math-equations.tex
získat obrázky matematiky, na které se HTML dokument odkazuje.
Pro zápis matematických výrazů v textu se používá element inlineequation
. Pokud chceme zobrazit matematiku jako samostatnou rovnici, používá se element quation
v XML notaci uvedeme:
Příklad 5.5. zápis matematiky
<para>test matematiky <inlineequation> <alt role="tex">a^2+b^2=c^2</alt> <graphic fileref="math1.png"/> </inlineequation> </para> <equation> <title>Vztah mezi hmotou a energií.</title> <mediaobject> <imageobject> <imagedata fileref="math2.png"/> </imageobject> <textobject role="tex"> <phrase>E=mc^2</phrase> </textobject> </mediaobject> </equation>
Dojde k vytvoření dvou obrázků math1.png
, math2.png
a HTML kódu:
<p>test matematiky</p> <div> <img src="math1.png" /> </div> <div class="equation"> <a id="id535184"></a> <p class="title"> <b>Rovnice 3.1. Vztah mezi hmotou a energií.</b> </p> <div class="mediaobject"> <img src="math2.png" /> </div> </div>
Celý výsledek vypadá takto:
test matematiky
Do LaTeXového souboru je vložen kód:
test matematiky $a^2+b^2=c^2$ \begin{dbequation} \begin{center} $$E=mc^2$$ \caption{Vztah mezi hmotou a energií.} \label{id465441}\hypertarget{id465441}{}% \end{center} \end{dbequation}
Ne všechny znaky jsme schopni napsat na klávesnici, třeba dlouhá pomlčka: — na klávesnici prostě není. Do XML ji dostaneme tak, že ji zapíšeme pomocí entity: —. Stějně tak všechna řecká písmenka atd.
Nicméně do LaTeXové zdrojového kódu se nám vygeruje entita v číselné podobě, pro mdash je to —. Nic takového běžný LaTeXový procesor nezná, musíme proto nahradit všechny takovéto výskyty XML entit na patřičné LaTeXové zápisy, pro mdash je to: ---.
Nahrazování entit se z důvodu rychlosti provádí regulárním výrazem v perlu. Náhrazovaní se zapína přepínačem -l
. Tato volba umožní náhradu všech běžných entit všetně řeckých písmenek. (implicitní při volbě -t pdf
)
Pokud bychom chtěli nahrazovat entitu, která není standardně zahrnuta v reguláních výrazech programu xslt můžeme includovat v náší XSLT šabloně soubor $XSLT_HOME/xsl/latex/format.xsl
pomocí následující direktivy:
Příklad 5.6. my.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'> <xsl:import href="/packages/share/xslt2-2.6.5/xsl/latex/fithesis.xsl"/> <xsl:include href="/packages/share/xslt2-2.6.5/xsl/latex/format.xsl"/> <xsl:param name="latex.texmap.xml" select="document('/packages/share/xslt2-2.6.5/xsl/latex/texmap.xml')"/> </xsl:stylesheet>
Do proměnné latex.texmap.xml
můžeme vložit jméno našeho souboru s definicemi náhrat entit, čím méně položek soubor bude mít, tím rychlejší bude transfomace
Styly pro transformace nejsou omezeny jen na použití pod Masarykovou Univerzitou. Stačí do XML souboru vložit dodatečné informace o jménu fakulty, univerzity a loga.
Do XML souboru přidáme následující elementy:
fi:faculty
celý název fakulty
fi:university
celý název univerzity
fi:logo
jméno souboru s logem fakulty, bez přípony
Hlavička takového souboru může vypadat například takto:
Příklad 5.7. vzhled XML souboru
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!ENTITY % fithesis SYSTEM "http://www.fi.muni.cz/~xpavlov/fithesis.mod"> %fithesis;]> <book lang="cs"> <bookinfo> <title>Název práce</title> <subtitle>Bakalářská práce</subtitle> <author> <firstname>Jméno</firstname> <surname>Příjmení</surname> <fi:woman>false</fi:woman> <fi:faculty>Fakulta uměleckého kovářství</fi:faculty> <fi:university>Metalurgická univerzita</fi:university> <fi:logo>mojelogo</fi:logo> <fi:advisor>titul jméno příjmení</fi:advisor> </author> <pubdate>Praha, jaro 2003</pubdate> <abstract> <para>...</para> </abstract> <keywordset> <keyword>Meče</keyword> <keyword>Sváření</keyword> </keywordset> </bookinfo> ... </book>
Dále je vhodné upravit i místo, kde byla práce publikována. Stačí předefinovat hodnotu paramentru fithesis.pub.place
viz. „Modifikace stylů“.
binary:
source:
Systém je možné používat i off-line lokálně na systémech Linux, Windows, MacOS X, Solaris, FreeBSD a IRIX (na ostatních nebylo vyzkoušeno).
xslt je napsán v jazyce Perl binární distribuci Perlu lze získat z www.perl.com nebo přímo binární verze (Windows, Linux) z http://www.activestate.com
Pro instalaci a práci s javovými procesory je nutné i JRE nebo JDK http://java.sun.com/j2se.
A pro tvorbu PDF a PS potřebujeme nějakou distribuci LaTeXu nejlépe TeXLive nebo tetex.
Instalaci spustíme pomocí příkazu:
java -jar xslt2-2.6.5-install.jar
Pokud chceme použít vlastní softwarové řešení a nemáme přístupové cesty zavedeny do systémových proměnných je nutné změnit cesty v souboru:
lib/.xsltrc
Tak a to by mělo být všechno, nejlépe bude si zkusit přeložit nějakou už hotovou práci, zdali všechno funguje 7 – „Hotové práce“
Transformace se spouští příkazem xslt, v UNIXových systémech stačí přidat cestu k němu do proměnně PATH
. Pod Windows stačí nakopírovat soubor xslt.bat
někam, kde máme nastavenou cestu nebo jí k němu nastavit.
Tato distribuce obsahuje následující verze programů:
Inspirace jak by taková práce v XML DocBooku měla vypadat.
bc1
bc1.xml
bc1.html
bc1.tex
bc1.rtf
bc1.pdf
bc1.chm
bc2
bc2.xml
bc2.html
bc2.tex
bc2.rtf
bc2.pdf
bc2.chm
Pokud jste svou práci také napsali v XML DocBooku a chcete ji poskytnout k inspiraci pro další studenty zašlete ji prosím na <pavlovic@fi.muni.cz>
.
8.1. Úprava XSLT stylů | |
8.1.1. | Lze nějak vložit v DocBooku řádkovou mezeru? |
Vkládání mezer je typograficky ošemetná věc, je lepší nechat formátování dokumentu na procesoru. Nicméně aniž DocBook obsahuje element pro nový řádek, je možné takovýto element jednoduše dodefinovat pomocí procesní instrukce. Stačí si vytvořit vlastní XSLT styl viz: „Modifikace stylů“ a přidat do něj následující šablonu. Příklad 8.1. procesní instrukce Do XML souboru vložíme následující procesní instrukci. <?br?> Kterou definujeme v XSLT souboru. <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'> <xsl:import href="/opt/xslt2/xsl/latex/fithesis.xsl"/> <xsl:output method="text" encoding="ISO-8859-2"/> <xsl:template match="processing-instruction('br')"> <xsl:text>\\[1cm]</xsl:text> </xsl:template> </xsl:stylesheet> | |
8.1.2. | Jak zalomím dlouha slova v bunkách tabulky? |
Neprve si definujeme procesní instrukci na zalomení slova, kterou vložíme na potřebné místo k zalomení. Příklad 8.2. procesní instrukce <?br?> Kterou definujeme v XSLT souboru. <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'> <xsl:import href="/opt/xslt2/xsl/latex/fithesis.xsl"/> <xsl:output method="text" encoding="ISO-8859-2"/> <xsl:template match="processing-instruction('br')"> <xsl:text>\-</xsl:text> </xsl:template> </xsl:stylesheet> Dále musíme také nastavit šířku sloupce tabulky. <colspec colwidth="5cm"/> | |
8.1.3. | Jak zruším < > v url odkazev v PDF? |
Stačí nastavit proměnnou Příklad 8.3. nastavení proměnné <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'> <xsl:import href="/opt/xslt2/xsl/latex/fithesis.xsl"/> <xsl:output method="text" encoding="ISO-8859-2"/> <xsl:param name="latex.url.quotation" select="0"/> </xsl:stylesheet> | |
8.1.4. | Jak vytvořím podkapitolu, která nebude v obsahu? |
Stačí použím element | |
8.1.5. | Jak mohu použít rozdělění práce do kapitol? |
Jelikož standardní LaTeXový styl, na kterém je potaven fithesis nepozdopruje | |
8.2. Ostatní | |
8.2.1. | Jak automaticky zarovnám svůj XML dokument? |
Stačí použít plugin XML Indenter v JEditu, který umí na jedno kliknutí zarovnat jakýkoli XML dokument. | |
8.2.2. | Jak zvýrazním text boldem nebo italitou? |
Takovéto ruční zvýrazňování je většinou proti typografickým zásadám. Proto se mu snažte vyvarovat. Pokud chcete zvýraznit nějaky text použite patřičný element vystihující typ textu. Pokud i přes to potřebuje zvýraznit nějaky text, lze použít následující elemety. |
V případě jakéhokoli problému při transformaci XML souboru klidně napište na <xpavlov@fi.muni.cz>
, rád se vám pokusím pomoci, co se týče problému při překladu LaTeXových zdrojových kódů, spíše vám poradí v diskusní skupině: cz.muni.courses.PB029 nebo na cz.muni.redir.cstex.
Obsah
fix CSS outputs are valid
fix XHMLT, HTML outputs are valid
fix quote substitution
add draft mode to documentation
add to doc how to use part (no part or scrreprt)
add to doc how to use unnumbered section
delted dist/.xsltrc
rename dist and build dirs
add download izpack
del package structure in build.xml
add xslt src compile target and jar
del SDK in build.xml since SVN
SDK should contails only sdk files, no more fully functional distribution
change sdk to SVN
add libxml2 bin package only for windows
move db2latex and docbook styles to optional package
move all devel addtitional files to one directory
clean build.xml
all installers in Java or ant
check margins
fix param.latex.url.quotation -> latex.url.quotation in FAQ
fix adding xalan serializer.jar to .xsltrc xalan jars
add icons to changes
fix postinstall changes, separete them to several files and run in pack sections
del xinstall.xml
add image to installation splash screen
xslt processors upgrade
stylesheets bug fixes
now it is possible to install xslt2 in directories containing spaces
fix FO styles (thanks Pavel Drozd)
fix FO logo path in profile-docbook.xsl
fix imagedata with in db2latex
fix implicite suffix for XHTML
fix figure align in db2latex
add wider left margin in fi-print
no more use of stupid package czech
add DocBook 4.4 DTD
new fithesis.mod for DocBook DTD V4.3
new XSLT processors
fix regexp in xslt.pl for images
fix texmatheq2png.pl eraser for windows
fix --silent for windows
fix index page references
new option --silent (-e)
fix XPath in fithesis.xsl (thanks Petr Hlávka)
fix defaul logo extension (thanks Marek Chowaniok)
FAQ update
fithesis.pub.place update
add support for XEP
fix FO styles
fix FO logo path after installation
fix FOP font path after installation
fix windows fithesis installer
fix windows xslt2 installer (no for Program Files like dirs yet)
fix ugly regxp bug in xslt.pl (thanks Marek Chowaniok)
return to option -l
saxon-8.2
XSLT style fixes
add DocBook 4.3 DTD
GUI installer update
language correction (thanks Petr Adamek)
HTML declaration text fix
new graphical installer
fithesis 0.2.6
fix saxon and jdxslt with j2sdk-1.5
add saxon8
add -c -l implicite
add FAQ
add os option for vars in .xsltrc
new XSLT processors
new XSLT styles
XSLT bug fixes
add lang sk, en
fithesis 2.0
add installator for fithesis (linux only)
new XSLT processors
bug fixes
LaTeX improvements
FOP included
load default config before user config
add blufish and quanta to editors
upgraded to XInclude 2003
new param for number of LaTeX passes
new XSLT processors
new db2latex-xsl stylesheets
new docbook-xsl stylesheets
new way how change entites
new installer
no more DSSSL
new xslt2 params -p and -r
new fithesis URL
new stylesheets
new XSLT processors
vylepšení výstupu do LaTeXu
úpravy ve stylech pro matematiku a titulní stranu
update procesorů (xalan, xerces)