Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

DocBook a jeho použití (2)

Ukážeme si, jak napsat konkrétní dokumentaci v DocBooku a transformovat ji do XHTML. Plus několik pokročilejších rad pro použití catalogů a jednotlivých XSLT procesorů.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Celou tvorbu dokumentace v DocBooku můžeme rozdělit na tři části:

  1. napsání dokumentace
  2. parametrizace a nastavení
  3. transformace

Fáze 1.

Pokud ještě nejsme zběhlí v psaní DocBookových dokumentů, není na škodu si přečíst nějaký ten návod.

referenční příručka: DocBook: The Definitive Guide
užitečné informace: www.kosek.cz/xml/db
menší tutoriál: www.fi.muni.cz/~xpa­vlov/xml/tuto­rial.html

Samozřejmě si musíme stáhnout XSL styly pro transformace:

sourceforge.net/pro­jects/docbook/

A DTD gramatiku:

www.oasis-open.org/docbo­ok/xml/4.2

Hodit se nám bude i editor, který umí zvýrazňovat syntaxi, ať už (g)vim, emacs, či jiný oblíbený editor.

Tak a teď se již můžeme pustit do psaní naší první dokumentace. Na ukázku jsem použil takovou menší dokumentačku k lokálnímu používání PHP :).

php.xml

Fáze 2.

DocBookové XSL styly se dají do značné míry různě parametrizovat, viz DocBook: The Definitive Guide.

Pro začátek není třeba se s obsahem příliš zatěžovat, XSL soubor s parametry bude nyní sloužit jako styl, který spouští transformaci, musíme v něm tedy naimportovat hlavní originální transformační soubor docbook.xsl:

<xsl:import href="/path_to_docbook-xsl/xhtml/docbook.xsl"/>

php.xsl

DTD, které jsme uvedli v hlavičce XML souboru:

<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

neslouží jen pro kontrolu validity dokumentu, ale i pro substituce entit, např. entita &hyphen (HYPHEN-MINUS) se podle odkazu entit v DTD nahradí &#x002D; atd. Nicméně chceme používat transformace i off-line a nestahovat pokaždé DTD z netu a na druhou stranu nechceme uvádět odkaz na lokálně uložené DTD, protože takový dokument pak jinde není bez manuálního zásahu plně transformovatelný.

Rafinovaně tuto situaci řeší catalogy. Ve zvláštním XML souboru jsou uvedeny ekvivalentní odkazy DTD, které v dokumentu používáme, na DTD lokálně uložené. Bohužel většina XML parserů a XSLT procesorů podporujících catalogy má vlastní formu, jak mapovat lokální DTD. Naštěstí množiny řešení nejsou úplně disjunktní.

Ukážeme si catalog soubor (řešení je pro win, pro UNIX je obdobné), ve kterém je uvedeno, kde se má lokálně hledat  PUBLIC DTD DocBook V4.2.

catalog.xml


<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
  <public publicId="-//OASIS//DTD DocBook XML V4.2//EN"
  uri="file:///c:/xml-dev/docbook/4.2/docbookx.dtd"/>
</catalog>

XSLT procesorům musíme sdělit, že hodláme používat catalogy a kde je mají hledat (trochu předběhneme, více o XSLT procesorech ve fázi 3.).

xmllint, xsltproc

nastavíme:

export SGML_CATALOG_FILES=/path/catalog.xml

při transformaci použijeme parametr:

--catalogs

Saxon

U procesorů napsaných pod Javou se catalogy používají tak, že procesoru řekneme jména externích tříd, které mají mapování URL a entit provést za ně. Stáhneme si nějaký nástroj pro používání catalogů a jeho třídy dáme jako parametr.

catalog resolver od Apache

tento catalog resolver má vlastní konfigurační soubor CatalogManager­.properties, ve kterém lze nastavovat krom cesty ke catalogům i několik jiných užitečných voleb.

CatalogManager.properties

verbosity=1
relative-catalogs=yes
catalogs=/path/catalog.xml
prefer=public
static-catalog=yes
allow-oasis-xml-catalog-pi=yes
catalog-class-name=org.apache.xml.resolver.Resolver

do CLASSPATH přidáme cestu k souboru CatalogManager­.properties a resolveru resolver-1.0.jar

export CLASSPATH=/path_to_saxon:/path_to_CatalogManager. properties:/path/resolver-1.0.jar

při transformaci použijeme parametry:

-x org.apache.xml.resolver.tools.ResolvingXMLReader
-y org.apache.xml.resolver.tools.ResolvingXMLReader
-r org.apache.xml.resolver.tools.CatalogResolver

Bohužel parser Saxonu Alfred to s catalogy moc neumí, je třeba použít nějaký jiný parser, třeba Crimson nebo Xerces, přidáme jej do CLASSPATH a použijeme parametry:

-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.crimson. jaxp.DocumentBuilderFactoryImpl
-Djavax.xml.parsers.SAXParserFactory=org.apache.crimson.jaxp. SAXParserFactoryImpl

Xalan

Soubor CatalogManager­.properties je samozřejně stejný a obdobně nastavíme parametry jako výše.

export CLASSPATH=/path_to_xalan:/path_to_CatalogManager.properties: /path/resolver-1.0.jar

při transformaci použijeme parametry:

-ENTITYRESOLVER org.apache.xml.resolver.tools.CatalogResolver
-URIRESOLVER org.apache.xml.resolver.tools.CatalogResolver

Nicméně nám SUN připravil menší překvapení v tom, že integroval (dnes hodně historickou) verzi Xalan přímo do JDK. Což samozřejmě nechceme, a proto musíme Javě říci, že má Xalan hledat nejprve někde jinde. Pro zjištění použité verze Xalanu stačí uvést parametr  -V.

-Xbootclasspath/p:/path_to_xalan/bin/xalan.jar:/ path_to_xalan/bin/xerces Impl.jar:/path_to_xalan/bin/xml-apis.jar:/path/resolver-1.0.jar: /path_to_CatalogManager.properties

Fáze 3.

Abychom mohli dokument správně transformovat, je potřeba zajistit, aby odpovídal gramatice (validita). Nejjednodušší je použít xmllint z libxml2.

xmllint --catalogs --valid --noout php.xml

Pokud se objeví nějaké nesrovnalosti, je potřeba dokument opravit. Poté můžeme s klidem přistoupit k transformaci. Mezi nejznámější XSLT procesory patří:

xsltproc

xmlsoft.org k dispozici i v binární formě pro Windows: www.zlatkovic­.com/projects/lib­xml/

transformaci spustíme:

xsltproc --catalogs -o php.html php.xsl php.xml

Saxon

saxon.sf.net/ existuje i přepracovaná verze Saxon7.

transformaci spustíme:

java \
-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.crimson. jaxp.DocumentBuilderFactoryImpl \
-Djavax.xml.parsers.SAXParserFactory=org.apache.crimson.jaxp. SAXParserFactoryImpl \
com.icl.saxon.StyleSheet \
-x org.apache.xml.resolver.tools.ResolvingXMLReader \
-y org.apache.xml.resolver.tools.ResolvingXMLReader \
-r org.apache.xml.resolver.tools.CatalogResolver \
-o php.html \
php.xml \
php.xsl

Xalan

xml.apache.or­g/xalan-j XSLT procesor z dílny Apache.

transformaci spustíme:

java \
-Djava.endorsed.dirs=/path_to_xalan/bin \
org.apache.xalan.xslt.Process \
-ENTITYRESOLVER org.apache.xml.resolver.tools.CatalogResolver \
-URIRESOLVER org.apache.xml.resolver.tools.CatalogResolver \
-V \
-IN php.xml \
-XSL php.xsl \
-OUT php.html

K výsledku je vhodné dodat nějaký pěkný CSS styl, který naše snažení patřičně prezentuje. A výsledek?

php.html

Automatizace

Samozřejmě pokaždé procházet celou touto procedurou je poněkud nepraktické a je dobré si vytvořit nějaký script, kterému jen předáme pár parametrů. Jedno takové řešení lze nalézt na www.fi.muni.cz/~xpa­vlov/xml, umí nejenom používat catalogy, ale i xinclude, mnoho transformací a lze jej jednoduše nastavovat.

Školení: Linux – Zálohování, Vysoká dostupnost, SNMP dohled

Na třídenním školení se naučíte nainstalovat a spravovat systém zálohování, replikace dat a vysoké dostupnosti dat. Dále také pracovat s RAID a LVM poli a nainstalovat a spravovat si vlastní dohledový systém.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,93

Přehled názorů

SGML_CATALOG_FILES
martin hassman 10. 4. 2003 09:09
Nový
└ 
Re: SGML_CATALOG_FILES
Jirka Kosek 10. 4. 2003 15:55
Nový
Ježišmarjááá
Pichi 10. 4. 2003 09:44
Nový
├ 
Re: Ježišmarjááá
fikus 10. 4. 2003 10:01
Nový
├ 
Re: Ježišmarjááá
Jan Pavlovic 10. 4. 2003 10:05
Nový
├ 
Re: Ježišmarjááá
david 10. 4. 2003 10:35
Nový
│
├ 
Re: Ježišmarjááá
zoul 10. 4. 2003 11:34
Nový
│
└ 
Re: Ježišmarjááá
Pichi 10. 4. 2003 16:46
Nový
│
 
└ 
Re: Ježišmarjááá
BoneFlute 4. 1. 2006 11:38
Nový
├ 
Re: Ježišmarjááá
Jirka Kosek 10. 4. 2003 15:59
Nový
│
└ 
Re: Ježišmarjááá
Pichi 11. 4. 2003 14:09
Nový
│
 
└ 
Re: Ježišmarjááá
Jirka Kosek 11. 4. 2003 17:59
Nový
└ 
Re: Ježišmarjááá
Norbert 12. 4. 2003 14:14
Nový
DocBook
Miloslav Ponkrác 12. 4. 2003 22:25
Nový
├ 
Re: DocBook
Jirka Kosek 12. 4. 2003 22:35
Nový
│
└ 
Re: DocBook
Jan Pavlovic 13. 4. 2003 03:05
Nový
└ 
Re: DocBook
Tomáš Kulhánek 16. 4. 2003 08:35
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem