Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky
Diplomová práce
Převod formátu OOXML do HTML
Hlavní specializace: Znalostní technologie Diplomant:
Jan Tejkal
Vedoucí práce:
Ing. Jiří Kosek
Praha 2008
Prohlášení Prohlašuji, že jsem diplomovou práci na téma Převod formátu OOXML do HTML vypracoval samostatně. Použité zdroje uvádím v přiloženém seznamu.
V Praze dne 23. června 2008
..................................
ii
Děkuji vedoucímu diplomové práce za připomínky a odborné rady. Děkuji společnosti Microsoft s.r.o. za poskytnutou licenci programů Office 2007 a za věnovanou studijní literaturu.
iii
Obsah Úvod ............................................................................................................................ 1 1. Nevýhody existujících konvertorů ........................................................................... 3 2. Popis formátu OOXML ............................................................................................ 8 2.1. Obecně o OOXML................................................................................................... 8 2.2. Balíček .................................................................................................................. 10 2.2.1. Typ souborů – [ContentTypes].xml ........................................................ 10 2.2.2. Vztahy (relationships).............................................................................. 11 2.2.3. Další části balíčku .................................................................................... 13 3. Popis dokumentu WordprocessingML ................................................................... 16 3.1. Balíček dokumentu WordprocessingML .............................................................. 16 3.2. Vztahy s dalšími objekty....................................................................................... 19 3.2.1. Vztahy s externími objekty ...................................................................... 19 3.2.2. Vztahy s objekty DrawingML ................................................................... 20 3.3. Minimální dokument ........................................................................................... 20 3.4. Struktura a základní elementy hlavního dokumentu .......................................... 22 3.4.1. Body......................................................................................................... 23 3.4.2. Odstavec .................................................................................................. 23 3.4.3. Run .......................................................................................................... 24 3.5. Formátování dokumentu ..................................................................................... 25 3.5.1. Formátování odstavce ............................................................................. 27 3.5.2. Další formátování odstavce ..................................................................... 32 3.5.3. Formátování runu.................................................................................... 33 3.5.4. Tabulky .................................................................................................... 37 3.5.5. Styly ......................................................................................................... 41 3.6. Odkazy .................................................................................................................. 43 3.7. Obrázky a grafika ................................................................................................. 43 3.7.1. DrawingML: <w:drawing> ....................................................................... 44 3.7.2. VML: <w:pict> ......................................................................................... 45 3.8. Oddíly ................................................................................................................... 46 3.9. Uživatelská pole ................................................................................................... 47 3.9.1. Jednoduchá pole <w:fldSimple> ............................................................. 47 3.9.2. Strukturované pole <w:sdt> .................................................................... 47 iv
4. API pro práci s dokumenty OOXML ....................................................................... 49 4.1. System.IO.Packaging ............................................................................................ 49 4.1.1. Příklad práce s balíčkem .......................................................................... 50 4.2. Microsoft.Office.DocumentFormat.OpenXml.Packaging .................................... 51 5. Praktická část ....................................................................................................... 52 5.1. Popis programu .................................................................................................... 52 5.1.1. Práce s balíčkem ...................................................................................... 52 5.1.2. Transformace .......................................................................................... 53 5.1.3. Rozšiřující objekt transformace............................................................... 53 5.1.4. Transformace hlavní části ....................................................................... 55 5.1.5. Transformace části se styly ..................................................................... 58 5.1.6. Popis sekvenčního zapracovávání vstupního dokumentu ...................... 59 5.2. Ukázka výstupu .................................................................................................... 61 5.3. Co konvertor neumí zpracovat ............................................................................ 62 Závěr .......................................................................................................................... 65 Zdroje ........................................................................................................................ 67 Příloha 1: Ukázka formátování tabulky ve WordprocessingML .................................... 69 Příloha 2: Nejpoužívanější jmenné prostory ................................................................ 71 Příloha 3: Stav převodu elementů WordprocessingML do HTML .................................. 72
v
Úvod
Tématem této diplomové práce je analýza nového formátu dokumentů kancelářského balíku MS Office 2007. Tento formát je souhrnně označen jako Office Open XML a přináší nové možnosti při práci s dokumenty MS Office. Kompletní prostudování všech aspektů tohoto formátu je poměrně pracné, proto jsem se zaměřil pouze na jazyk WordprocessingML, který se používá v dokumentech editoru MS Word 2007. Při práci s dokumenty MS Wordu je někdy potřeba tyto dokumenty konvertovat do formátu HTML. I když v MS Wordu je možné dokument uložit ve formátu HTML, rozhodl jsem se naprogramovat vlastní konvertor, který by dokumenty z MS Wordu 2007 konvertoval do HTML. Rozhodl jsem se tak proto, neboť existující konvertor mi z mnohých důvodů nevyhovuje, a protože produkuje HTML, které se kvůli nepřehlednosti kódu nedá dále používat. Konvertovat dokumenty jsem zkoušel i jinak (jinými konvertory, převodem přes jiné formáty dokumentu, například binární dokument Wordu nebo formát WordML, které jsem potom konvertoval do HTML), ale nikdy jsem s výsledkem nebyl zcela spokojen. Zpracování diplomové práce lze rozdělit do dvou fází. První fázi lze označit jako teoretickou, neboť obnášela analýzu formátu Office Open XML (zejména tedy značkovacího jazyka WordprocessingML) a druhá fáze představovala praktickou činnost – programování konvertoru dokumentů MS Word 2007 do formátu HTML. Diplomová práce je rozčleněna do pěti kapitol. Více než polovinu práce věnuji popisu dokumentu WordprocessingML, zejména elementům, které tento jazyk používá. Práci jsem rozdělil následovně: První kapitola popisuje nevýhody existujících konvertorů, jejich nedostatky a co mě vedlo k tomu, abych sestrojil konvertor vlastní. Kapitola obsahuje ukázky výstupů těchto konvertorů a seznam hlavních nevýhod konvertorů, které jsem měl k dispozici. Ve druhé kapitole se věnuji obecně formátu Office Open XML. Popisuji vlastnosti tohoto formátu, které jsou stejné pro všechny dokumenty MS Wordu, MS Excelu nebo MS Powerpointu. Zdůrazňuji výhody tohoto formátu, jazyky a další prostředky, které používá. Základním pramenem, ze kterého jsem čerpal informace o formátu Office Open XML a WordprocessingML, je oficiální dokumentace spravovaná sdružením ECMA 1 . Tato dokumentace sestává z pěti dokumentů [1], [2], [3], [4], [5], které jsou k dispozici ve formátu PDF, DOCX nebo ve webové podobě [6].
1
http://www.ecma-international.org/
1
Nejrozsáhlejší kapitolou je popis dokumentu WordprocessingML. Vyjmenovávám v ní všechny části, které může dokument WordprocessingML obsahovat a popisuji ty, které musí dokument obsahovat vždy. Pojednávám o elementech, pomocí nichž se vytváří odstavce, tabulky, obrázky, seznamy, oddíly, odkazy, styly, poznámky pod čarou, vysvětlivky, uživatelská pole a všechny potřebné prvky, které lze v dokumentu použít. Hodně prostoru věnuji formátování jednotlivých prvků. Do přílohy jsem zařadil ukázku použití elementů WordprocessingML pro formátování tabulky. Do problematiky jazyka WordprocessingML jsem se dostával studiem literatury [7] a webu [8], jádrem však bylo časově náročné studium oficiální dokumentace. Konvertor jsem programoval v .NET Frameworku. Jádrem konverze jsou XSLT šablony, které vstupní XML transformují do výsledného HTML. Pro práci s dokumenty Office Open XML jsem používal programové rozhraní ze jmenného prostoru System.IO.Packaging, které se nachází v .NET Frameworku 3.0. Na příkladu ukážu použití některých tříd z tohoto jmenného prostoru. API pro práci s dokumenty Office Open XML se věnuje kapitola 4. Poslední kapitola je věnována popisu praktické činnosti a prezentaci dosažených výsledků. V této kapitole detailně popisuji naprogramovaný konvertor, zaměřuji se především na transformační šablony. Při transformaci jsem používal XSLT 1.0, které jsem se naučil používat podle webových stránek [9] a literatury [10]. Při programování v .NETu jsem se opíral o literaturu [11]. Jednoduchou ukázku konverze pomocí XSLT v .NETu si lze prohlédnout na webové stránce [12]. Na několika obrázcích také ukazuji, jak vypadá webová stránka vytvořená mým konvertorem. V dokumentu WordprocessingML se používají také další elementy, které patří například do DrawingML, VML nebo MathML. Z kapacitních důvodů jsem pracoval pouze s elementy WordprocessingML a konvertor tedy jiné elementy transformuje pouze omezeně. Popisu toho, co konvertor zatím neumí konvertovat, se věnuje podkapitola 5.3. V příloze 3 vyjmenovávám všechny podstatné elementy, které se v dokumentu mohou vyskytovat. U každého elementu jsem uvedl, jestli ho dokáže konvertor zpracovat. V dokumentech WordprocessingML se používají elementy z různých jmenných prostorů, proto nejpoužívanější jmenné prostory a jejich standardní prefixy vyjmenovávám v příloze 2. Součástí diplomové práce je doprovodné CD, které obsahuje naprogramovaný konvertor. Konvertor je k dispozici ve dvou distribucích, jedna obsahuje pouze samotný program, druhá distribuce je připravena jako Add-in (viz [13]) do MS Wordu 2007. Veškeré informace o obsahu CD jsou uvedeny na tomto CD.
2
Nevýhody existujících konvertorů
1. Nevýhody existujících konvertorů
Občas je potřeba dokument MS Wordu zobrazit na internetu jako webovou stránku. K tomu lze použít funkci tohoto editoru „Uložit dokument jako webovou stránku ve formátu HTML“. V prohlížeči se tato webová stránka zobrazí v téměř stejné podobě, jak vypadá původní dokument v MS Wordu. Podíváme-li se ale na zdrojový kód této stránky, sotva poznáme, že se vůbec jedná o formát HTML. Webovou stránku můžeme z dokumentu vytvořit i jiným způsobem. Můžeme použít některý z dostupných konvertorů dokumentů Wordu do formátu HTML. Při konvertování dokumentů do HTML jsem ale narážel na mnohé nedostatky konvertorů (viz dále), což mě přivedlo na myšlenku sestrojit konvertor nový. Tento konvertor by nemusel generovat webové stránky v prohlížeči vypadající naprosto stejně, jak vypadá originální dokument. Mým cílem by spíše bylo, aby výsledné HTML vypadalo poněkud sofistikovaněji, než jaké produkují stávající konvertory. Při analýze existujících konvertorů bylo problémem vůbec najít konvertor, který by převáděl dokumenty WordprocessingML do formátu HTML. Kromě použití MS Wordu 2007 jsem nenašel jiný způsob, jak z dokumentu WordprocessingML vytvořit webovou stránku. Zkusil jsem tedy dokument uložit jako starší binární verzi Wordu 2003, která se označuje koncovkou „doc“. Pro tento formát již existuje konvertorů více. Konverzi dokumentů MS Wordu 2007 do HTML jsem zkoušel více způsoby, ale nikdy jsem nedosáhl uspokojivého výsledku. Zkoumal jsem především výsledek konverze, kterou by zvolila většina uživatelů, a to uložení dokumentu do formátu HTML přímo v editoru MS Wordu. Pracoval jsem také s binárním formátem MS Wordu, do kterého jsem WordprocessingML dokument převedl. S tímto formátem jsem zkoušel konverzi do HTML pomocí Open Office a dalších existujících konvertorů binárních dokumentů MS Wordu, jako např. konvertor nabízený na webu Flash Utility2. Vyzkoušel jsem i převod přes formát WordML pomocí XSLT šablony z [14]. Na testovaný dokument tato šablona nefungovala. Ze zdánlivě velkého množství konvertorů, které jsou na webu k dispozici, mně jich zbylo k odzkoušení poměrně málo. Mnoho odkazů na konvertory již bylo neplatných. Další konvertory, které jsem chtěl vyzkoušet, byly komerční a bylo nutné si je zakoupit. Přitom mnohé konvertory vůbec nefungovaly nebo vytvářely nepoužitelné webové stránky. Shrňme si hlavní nedostatky konvertorů, které se mi podařilo opatřit a zprovoznit:
2
Ke stažení na http://www.flash-utility.com/download/doc2html.exe
3
Nevýhody existujících konvertorů Nečitelnost kódu
Podívá-li se běžný uživatel na zdrojový kód HTML vyprodukovaného MS Wordem 2007, zjistí, že se v něm vůbec nevyzná a že je tento kód naprosto nepřehledný. Každý element má velké množství atributů, jejichž význam většině uživatelů uniká. Výsledné HTML obsahuje také poměrně dost nadbytečných elementů, například několikrát do sebe vložený element <span>. Dokument obsahuje mnoho nově vzniklých stylů, což značně znesnadňuje uživateli vyznat se ve struktuře dokumentu. Nevýhodou také je, že jsou styly umístěny ve stejném dokumentu jako HTML. Ukázka části kódu vygenerovaného editorem MS Word:
Kód je velmi složitý a nepřehledný, i když má sloužit pouze k vypsání nadpisu kapitoly „5.11.1. Object Anchoring“, který je ve stylu „Heading3“ a který je cílem nějakého odkazu. Jiné konvertory produkovaly také nadbytečný kód, ale už ne v tak velkém rozsahu. Ve výsledku konverze jsem nacházel zbytečné elementy, atributy a také zastaralé elementy, jako je například
. Některé atributy bylo vůbec zbytečné vypisovat, protože byly uvedeny s prázdnou hodnotou. Vhodnost pro další použití
Pokud uživatel potřebuje něco víc než pouze dokument zobrazit na webu, ale chce ho např. dále upravovat, udržovat a rozvíjet v podobě HTML, nebude s použitím konvertoru MS Wordu moc spokojen. 4
Nevýhody existujících konvertorů V minulosti jsem osobně potřeboval udělat webovou stránku z několika dokumentů WordprocessingML. Byly to vesměs jednoduché textové dokumenty, ale konvertor MS Wordu jsem nepoužil a raději jsem si ručně text doplnil HTML kódem. Kód v předchozí ukázce, který vznikl automatickou konverzí, je natolik nepřehledný, že případného uživatele téměř nutí k tomu, aby ho vypsal ručně. Například následovně: 5.11.1. Object Anchoring
Při konverzi delších dokumentů samozřejmě není možné do textu ručně doplňovat HTML značky a bez použití nějakého konvertoru se nelze obejít. Číslované seznamy
Problém nastává při konvertování číslovaných seznamů. V dokumentu WordprocessingML lze udělat seznamy, které na sebe navazují. V HTML k tomu ale neexistuje ekvivalentní element. Konvertor v MS Wordu řeší situaci tak, že při konverzi rozděleného číslovaného seznamu nepoužívá element , aby se položky seznamu automaticky číslovaly, ale rovnou vypíše do textu odpovídající číslo. Ukažme si to na ukázce konverze následujícího jednoduchého dokumentu: 1. První položka Text odstavce… 2. Druhá položka
Obrázek 1: Číslovaný seznam, který chceme zkonvertovat
<span style='mso-bidi-font-family:Calibri; mso-bidi-theme-font:minor-latin'> <span style='mso-list:Ignore'>1. <span style='font:7.0pt "Times New Roman"'> První položka
Text odstavce...
5
Nevýhody existujících konvertorů <span style='mso-bidi-font-family:Calibri; mso-bidi-theme-font:minor-latin'> <span style='mso-list:Ignore'>2. <span style='font:7.0pt "Times New Roman"'> Druhá položka
Je vidět, že je seznam tvořen tím způsobem, že jsou v textu přímo vypsaná čísla odpovídající dané položce seznamu. Nelze jednoznačně říci, jak tento problém řešit. Je jen zřejmé, že takto zkonvertovaný seznam nelze dále používat, neboť přidání jedné položky doprostřed seznamu by znamenalo ruční přečíslování všech následujících položek. Lepším způsobem konverze „roztrženého“ číslovaného seznamu by patrně bylo vytvořit v HTML dva seznamy, přičemž u druhého seznamu by bylo nastaveno, aby začínal číslovat položky od správného čísla. Tímto způsobem by se navodil dojem, že jsou tyto dva seznamy spojené a tvoří seznam jeden. Dodejme, že konvertor v OpenOffice pro jistotu vůbec seznamy nevytváří a položky jsou vypisovány bez čísel, odrážkové seznamy jsou vypisovány bez odrážek. Velikost souboru na disku
Zjistil jsem, kolik „nadbytečného“ kódu konvertor MS Wordu (ale i další konvertory) generuje. Takto vzniklé soubory jsou podle mého odhadu více než třikrát větší, než by bylo nutné. Protože ještě mnoho uživatelů nemá rychlé připojení k internetu, není velikost souboru zanedbatelným faktorem. Složitost kódu může dělat problém i při jiném než ručním zpracování (editace, tisk, automatické zpracování informací). Uvažme, že ne všichni uživatelé internetu používají grafické prohlížeče (textové prohlížeče, čtečky stránek pro nevidomé a podobně). Pro zajímavost uveďme, že konverze dokumentu z předchozí ukázky (dvoupoložkový seznam rozdělený jedním odstavcem) zabírá 25 kB místa na disku. Je to dáno tím, že před elementem obsahuje výsledný dokument velké množství běžnému uživateli neidentifikovatelného kódu. Problém s dlouhými dokumenty
Často je potřeba zkonvertovat dokumenty, které jsou opravdu rozsáhlé a členěné do několika kapitol a podkapitol. Konvertory tyto dokumenty zkonvertují do jedné dlouhé stránky, jejíž prohlížení je velmi obtížné kvůli nepřehlednosti a ztrátě orientace. Navíc 6
Nevýhody existujících konvertorů prohlížeče si s hodně dlouhými stránkami neumí moc dobře poradit a práce s nimi je velmi pomalá. Je veliká škoda, že se nevyužije „vymoženosti“ HTML, které je děláno pro práci s hypertextem. Dlouhý dokument by mohl být rozdělen do souborů podle kapitol, velmi dlouhé dokumenty i podle podkapitol. Rozdělovat by se mohl dokument i podle oddílů. Dokumenty by mezi sebou mohly být provázány odkazy, případně by mohl být vytvořen nějaký soubor s obsahem a s navigací po jednotlivých částech výsledného dokumentu. V praktické části této diplomové práce bude mým cílem sestrojit konvertor, který odstraní nejenom předchozí uvedené problémy, ale zejména problém dlouhých dokumentů. Vytvořím proto takový konvertor, který bude rozdělovat dokument na HTML soubory podle oddílů nebo podle vyjmenovaných stylů odstavců. Pokud uživateli stačí dokument na webu zobrazit a už dále ho nebude nijak zpracovávat, použije konvertor MS Wordu, protože výsledný dokument HTML pak bude vypadat naprosto stejně jako původní dokument WordprocessingML. Důležitým faktorem je ale velikost dokumentu (na disku) a jeho délka (počet stran). Konvertor MS Wordu totiž generuje nadměrně velké HTML soubory. Při tom může dojít k značnému zpomalení práce s velkými soubory. Pokud je dokument dlouhý, dochází také ke ztrátě orientace v takto dlouhém dokumentu a uživatel přirozeně cítí potřebu dlouhou HTML stránku rozdělit. Problém konverze delších souborů vedl ke vzniku myšlenky zabývat se řešením tohoto problému.
7
Popis formátu OOXML
2. Popis formátu OOXML
V této kapitole popíšu vlastnosti formátu OOXML a jeho přednosti. Uvedu, co všechno může obsahovat a jakým způsobem jsou jeho jednotlivé části propojeny.
2.1. Obecně o OOXML Firma Microsoft Corporation vyvinula nový formát dokumentů Microsoft Office, který lze souhrnně označit jako Office Open XML. Specifikace Office Open XML vznikla pod záštitou sdružení ECMA. Tento nový formát slouží k ukládání dokumentů programů Word, Excel a Powerpoint z balíku Microsoft Office 2007. Formát Office Open XML (dále jen OOXML) mě zaujal hned z několika důvodů. Jeho výhodou je především to, že se jedná o otevřenou technologii, jejíž formát je plně popsaný. To umožňuje vývojářům pracovat s těmito dokumenty podstatně jednodušeji, než tomu bylo doposud. Není problém dokumenty vytvářet nebo editovat „ručně“ bez použití některého programu z MS Office. Další výhodou je, že dokumenty OOXML jsou založeny na dvou zažitých standardech, jako jsou technologie XML a ZIP. „Bezstarostnou“ práci s dokumenty OOXML umožňuje také to, že je tento formát určen pro volné použití. Dokument OOXML bývá označován příponou docx (dokument MS Wordu), xlsx (dokument MS Excelu) a pptx (dokument MS Powerpointu). Tyto dokumenty jsou ve skutečnosti archívy ZIP, které jsou pojmenovány pomocí příslušné přípony podle druhu dokumentu. Archív ZIP budu dále nazývat balíčkem (package). Balíček má mnoho částí, kromě hlavního dokumentu může obsahovat např. přiložené obrázky, jiný balíček, data v podobě uživatelského XML. Jednotlivé části balíčku musí mít definovaný typ obsahu. Části balíčku jsou propojeny pomocí tzv. vztahů (relationships). Balíček dále popíšu detailněji. Na úvod je důležité poznamenat, že hlavní dokument a další části balíčku jako např. styly nebo záhlaví, jsou ukládány v souborech typu XML. Díky tomu lze jednoduše dokumenty číst, vytvářet a měnit. Dokumenty lze editovat také v jednoduchém textovém editoru. Soubory XML jsou kódovány pomocí UTF-8 nebo UTF-16 využívajících znakovou sadu Unicode. Soubory XML by měly být validní oproti odpovídajícímu XSD schématu, které je definováno ve specifikaci Open Packaging (viz dále). Základním prostředkem pro popis dokumentů jsou tři značkovací jazyky: WordprocessingML (pro MS Word), SpreadsheetML (pro MS Excel) a PresentationML (pro MS Powerpoint). Všechny tyto jazyky jsou založeny na XML. 8
Popis formátu OOXML Kromě těchto tří základních jazyků existuje také sada dalších ML (značkovacích jazyků), které slouží např. ke tvorbě grafů, diagramů nebo grafiky. Významným je DrawingML, který popisuje, jak používat grafické elementy v dokumentech Office Open XML. DrawingML se používá v rámci WordprocessingML, SpreadsheetML i PresentationML. K vektorovému popisu grafiky slouží jazyk VML. DrawingML je ovšem novější a bohatší než VML a postupně by ho měl nahrazovat. Existují i další podpůrné ML pro popis specifických úloh, jako jsou např. matematické vzorce. Dokument obsahuje také data o dokumentu, tzv. metadata. Metadata obsahují informace, jako je např. autor nebo datum vytvoření dokumentu. Metadata nemusí být pouze standardní běžně užívané položky, uživatel má možnost dodefinovat jakékoliv vlastní. Dokumenty mohou obsahovat XML soubor s bibliografií nebo XML soubor s digitálním podpisem (pokud je podpisů více, vytvoří se více XML souborů). Technologii Office Open XML lze znázornit pomocí následujícího schématu (převzato z literatury [7]): Značkovací jazyky WordprocessingML
SpreadsheetML
PresentationML
Podpůrné jazyky a prostředky DrawingML
Uživatelské XML
Bibliografie
VML
Metadata
Rovnice
Open Packaging Convention Vztahy (relationships)
Typy obsahu
Digitální podpisy
Základní technologie ZIP
XML + Unicode Obrázek 2: Schéma technologie OOXML
9
Popis formátu OOXML K hlubšímu prostudování problematiky lze doporučit návštěvu webové podoby oficiální dokumentace ECMA-376 [6].
2.2. Balíček Dokument OOXML je ZIP archívem, který se nazývá balíčkem. Balíček reprezentující dokumenty OOXML je standardizován v Open Packaging Conventions (OPC). Podrobný popis balíčku lze nalézt v oficiální dokumentaci v dokumentu Part 2 - Open Packaging Conventions [2]. Účelem balíčku je uchovat všechny části dokumentu (např. text a obrázky) v jednom objektu. Balíček se tedy skládá z několika souborů. Balíček musí povinně obsahovat následující soubory: *ContentTypes+.xml (popisuje typ souborů, které balíček obsahuje), .rels (popisuje vztahy mezi jednotlivými částmi balíčku), hlavní soubor, který popisuje vlastní tělo dokumentu. Jaké další soubory balíček obsahuje, to závisí na druhu dokumentu – jedná-li se o dokument WordprocessingML, SpreadsheetML nebo PresentationML. Záleží také na obsahu dokumentu. Máme-li např. definované styly nebo číslování, vytvoří se XML soubor se styly resp. s číslováním. Jednotlivé soubory jsou v balíčku adresovány pomocí vztahů. Adresa souboru je vyjádřena užitím URI, např. /word/document.xml představuje soubor document.xml, který je v balíčku uložen v adresáři word. Soubor se vztahy musí být v balíčku uložen v adresáři _rels a musí se jmenovat .rels. Ostatní soubory mohou být v balíčku kdekoliv, mohou mít libovolný název, ale musí být popsány v souboru se vztahy. Pokud nějaký soubor není uveden v souboru se vztahy, je považován za neznámou část balíčku a je ignorován. Pokud se v balíčku vyskytuje soubor, který neodpovídá standardu OPC nebo nemá uvedený typ v souboru *ContentTypes+.xml, případně tento typ neodpovídá skutečnému typu souboru, je považován za neplatnou část balíčku. 2.2.1. Typ souborů – [ContentTypes].xml Soubor [ContentTypes].xml: popisuje typ dokumentů v balíčku. Tento soubor obsahuje kořenový element , který obsahuje následující dva druhy elementů:
10
Popis formátu OOXML Pomocí tohoto elementu se definuje typ souboru pro všechny soubory určitého (stejného) typu, jako např. pro všechny soubory s názvem *.xml. Tento element obsahuje atribut Extension (hodnotou je daná koncovka) a atribut ContentType (hodnotou je daný typ obsahu). Příkladem může být:
Element slouží k definici typu obsahu konkrétních souborů v balíčku. Kromě atributu ContentType obsahuje tento element atribut PartName, do kterého se udává URI označující daný soubor v balíčku. Příkladem je tato definice:
Pokud by typ souboru /word/styles.xml nebyl definován pomocí elementu , mělo by se podle předchozí definice za to, že je typu „application/xml“. Pořadí elementů a může být libovolné. 2.2.2. Vztahy (relationships) Vztah popisuje souvislost mezi zdrojovou a cílovou částí. Zdrojovou částí je část balíčku, kde se soubor se vztahy nachází. Cílovou částí jsou zejména soubory uvnitř balíčku, ale mohou to být také externí objekty, jako např. nějaká stránka na internetu nebo soubor na disku. Vztahy představují spojení dvou objektů bez ohledu na jejich obsah. Soubor se vztahy nepopisuje vztahy v jiné části balíčku, než se tento soubor nachází. Každá část balíčku má přiřazenou vlastní část se vztahy. Pomocí informací ze souborů se vztahy můžeme jednoduše procházet balíček. Program MS Word ukládá soubory do balíčku se standardním názvem a standardní cestou. Na to ovšem nemůžeme spoléhat. Soubory mohou být vytvořeny jiným způsobem než pomocí MS Wordu a mohou mít libovolné názvy a libovolné umístění v balíčku. Je chybou hledat v balíčku soubor zadáním této standardní cesty k němu, vždy je třeba využívat vztahů. Souborů se vztahy je v balíčku většinou více. Minimálně je potřeba jeden, který popisuje vztahy balíčku. Má pevné umístění (adresář _rels) a pevný název (.rels). Tento soubor slouží jako „startovní“ soubor se vztahy, z něhož se dostaneme na ostatní části balíčku.
11
Popis formátu OOXML Soubor se vztahy je XML dokumentem, jehož kořenovým elementem je . Tento element obsahuje jednotlivé elementy se jménem . Každý tento element představuje jeden vztah. Povinné atributy elementu : Id – identifikátor vztahu, musí být unikátní v rámci příslušné části balíčku. Target – odkaz URI ukazující na cíl vztahu. Type – definuje typ vztahu. Volitelný atribut: TargetMode – nabývá hodnot „Internal“ nebo „External“. Indikuje, zda je cíl vztahu uvnitř balíčku nebo mimo něj. Defaultní hodnota je „Internal“. Uveďme si příklad vztahů v případě, že dokument opatříme digitálním podpisem. V souboru se vztahy balíčku /_rels/.rels se vytvoří vztah s hodnotami atributů Type = „http://schemas.openxmlformats.org/package/2006/ relationships/digital-signature/origin“
a s atributem Target="_xmlsignatures/origin.sigs". Vztah odkazuje na část balíčku nazvanou Digital Signature Origin Part. Tato část obsahuje svůj vlastní soubor se vztahy _rels/origin.sigs.rels, který již bude obsahovat odkazy na jednotlivé digitální podpisy. Element bude mít hodnotu atributu Type = „http://schemas.openxmlformats.org/package/2006/ relationships/digital-signature/signature“
a atribut Target="signature1.xml", což znamená, že v adresáři _xmlsignatures se nachází XML soubor signature1.xml obsahující digitální podpis. Dokument může být samozřejmě opatřen více než jedním podpisem. Graficky můžeme strukturu balíčku s digitálním podpisem znázornit následovně:
12
Popis formátu OOXML soubor se vztahy balíčku: _rels/.rel: … … adresář _xmlsignatures: _rels/origin.sigs.rels: + případné další odkazy na další podpisy: signature2.xml, … origin.sigs signature1.xml signature2.xml … Obrázek 3: Struktura balíčku opatřeného digitálním podpisem
2.2.3. Další části balíčku Dokumenty WordprocessingML, SpreadsheetML i PresentationML mohou v balíčku obsahovat soubory s rozličnými druhy informací. Tyto soubory jsou popsány v oficiální dokumentaci v souboru Part 1 – Fundamentals [1] v kapitole 15. Lze zde nalézt podrobnější popis těchto dalších částí balíčku, typy dokumentů, jmenné prostory elementů a typy vztahů. V dokumentaci lze nalézt i příklady příslušných vztahů. Uvedu jenom stručný přehled částí balíčků, které mohou dokumenty OOXML obsahovat: Additional Characteristics dodatečné informace o dokumentu, které nemohou být specifikovány pomocí elementů definovaných Standardem. Tyto informace jsou uloženy v uživatelském XML, které je součástí balíčku. Audio část s audio souborem. Audio soubor může být také umístěn mimo balíček. Bibliography bibliografická data pro daný balíček, je to uživatelské XML.
13
Popis formátu OOXML Custom XML Data Storage zcela libovolný XML soubor. Custom XML Data Storage Properties vlastnosti příslušející k danému uživatelskému XML souboru. Součástí vlastností je ID souboru a informace o případném schématu tohoto uživatelského XML. Digital Signature Origin tato část nemá žádný obsah. Slouží pouze jako startovní bod pro práci s podpisy v balíčku. Tato část obsahuje soubor se vztahy, které již odkazují na jednotlivé podpisy. Digital Signature XML Signature tato část obsahuje digitální podpis. Částí může být víc, každá pro jeden podpis. Embedded Control Persistence v této části jsou informace o různých prvcích, které lze do balíčku začlenit. Mohou to být např. Java applety nebo ActiveX prvky, pro jejichž začlenění do balíčku je v dokumentaci uveden příklad. Typ obsahu závisí na typu daného prvku, např. pro ActiveX prvek by se zadávalo ContentType=“application/vnd.ms-office.activeX+xml“.
Embedded Object část s vloženým objektem. Každý objekt může mít asociovaný obrázek, který se v dokumentu objeví na místě vloženého objektu. Embedded Package tato část obsahuje celý další balíček. Balíček může být jiného typu, než je daný dokument, např. dokument WordprocessingML může obsahovat dokument SpreadsheetML nebo i další dokument WordprocessingML. File Properties vlastnosti dokumentu. Existují tři druhy vlastností dokumentu: základní (Core), rozšířené (Extended) a definovatelné (Custom). Dokument obsahuje maximálně jednu část každého druhu. o Core File Properties: základní vlastnosti dokumentu bez ohledu na to, zda se jedná o dokument Wordu, Excelu nebo Powerpointu. K těmto vlastnostem patří vlastnosti definované v tzv. Dublin Core: created, creator, description, identifier, language, modified, subject, title. Lze zde 14
Popis formátu OOXML navíc definovat další následující vlastnosti: např. category, contentStatus, contentType, keywords, lastModifiedBy, lastPrinted, revision, version. Tato část se obvykle v balíčku ukládá do souboru core.xml v adresáři docProps. Podrobný popis těchto vlastností je obsažen v kapitole 10 v oficiální dokumentaci Office Open XML Part 2 – Open Packaging Conventions [2]. o Extended File Properties: vlastnosti, jejichž použití se liší v závislosti na druhu dokumentu. Např. dokument WordprocessingML může obsahovat vlastnosti, jako je počet stránek (Pages) nebo počet odstavců (Paragraphs). V balíčku se tato část ukládá do adresáře docProps do souboru app.xml. o Custom File Properties: vlastnosti definované uživatelem. Každá vlastnost má jméno, hodnotu a typ hodnoty. Font část obsahuje font, který je přímo do dokumentu vložen. Vkládání fontu do dokumentu je užitečné při použití netypických fontů, které nejsou moc rozšířené. Vložené fonty mohou být dvojího druhu – True Type font nebo bitmapový font. Image část balíčku, která obsahuje obrázek. Těchto částí může balíček obsahovat více. Obrázek může být do balíčku vložen jako ZIP. Standardně se obrázky v balíčku vkládají do adresáře Media. Printer Settings nastavení pro tiskárnu nebo pro jiné zobrazovací zařízení. Thumbnail miniaturní obrázky, které pomáhají uživateli identifikovat jednotlivé části balíčku. Typem dokumentu těchto náhledů je jakýkoliv podporovaný typ obrázku. Video part může to být jakýkoliv podporovaný video soubor. VML Drawing část, která vektorově popisuje grafiku (Vektor Markup Language).
15
Popis dokumentu WordprocessingML
3. Popis dokumentu WordprocessingML
Dokument WordprocessingML je jedním ze tří nových druhů dokumentů, které byly vyvinuty pod souhrnným názvem OOXML. Pojmem WordprocessingML se rozumí značkovací jazyk, pomocí něhož se zapisují elementy dokumentu, který se vytváří především v editoru MS Word. Jak již bylo zmíněno v předchozích kapitolách, dokument OOXML, tedy i dokument WordprocessingML je ZIP archív, který se nazývá balíčkem. Balíček dokumentu WordprocessingML obsahuje soubor s tělem vlastního dokumentu. Kromě částí, které jsem uvedl při obecném popisu balíčku jakéhokoliv dokumentu OOXML, může balíček dokumentu WordprocessingML dále obsahovat další části, jako jsou např. definice stylů, číslování, komentářů, atd. Vhodným dokumentem obsahujícím přehledný popis jazyka WordprocessingML je [8].
3.1. Balíček dokumentu WordprocessingML Balíček dokumentu WordprocessingML musí obsahovat minimálně tři soubory. Kromě hlavního souboru, ve kterém je popsáno tělo dokumentu, musí balíček povinně obsahovat ještě soubor se vztahy balíčku, ve kterém je uveden odkaz na soubor obsahující tělo dokumentu a soubor s definicemi typů obsahu souborů. Dokument WordprocessingML má mnoho možností, proto balíček dokumentu obsahuje mnoho částí. Z jakých částí se balíček skládá, lze graficky znázornit následovně:
16
Popis dokumentu WordprocessingML
Media: audio / video / obrázky
Fonty
Bibliografie
Komentáře
Vložený objekt / další balíček
Uživatelské XML Hlavní dokument Seznamy číslované / odrážkové
Digitální podpis
Poznámky pod čarou / vysvětlivky
Záhlaví / zápatí
Styly
Vlastnosti dokumentu
Obrázek 4: Obsah balíčku dokumentu WordprocessingML
Nyní uvedu přehled částí, které se mohou vyskytovat v balíčku dokumentu WordprocessingML. Popíšu cestu a název souborů, kde se v balíčku jednotlivé části standardně nacházejí. Připomeňme, že se soubory i adresáře mohou jmenovat libovolně – jejich přesný název je třeba hledat v souborech se vztahy, nelze spoléhat na to, že potřebnou část nalezneme tam, kam ho ukládá editor MS Word. Přehled částí bude opět jenom stručný, jejich podrobnější popis lze nalézt v oficiální dokumentaci Part 1 – Fundamentals [1] v kapitole 11.3. Alternative Format Import Tato část umožňuje vložit do balíčku obsah alternativního formátu, např. HTML. Do hlavního dokumentu se potom tento obsah vkládá pomocí elementu <w:altChunk>. Tento element má jediný atribut s hodnotou id vztahu, jehož cílem je odkaz na část balíčku obsahující vložený alternativní formát. Comments Je to část s texty komentářů. Soubor s komentáři má jako kořenový element <w:comments>, který obsahuje jednotlivé komentáře v elementech <w:comment>. Do těla hlavního dokumentu se komentář vkládá pomocí elementu <w:commentReference>, který má atribut id identifikující komentář. Standardně se komentáře v balíčku ukládají do souboru comments.xml do adresáře word. Document Settings Document Settings je část balíčku popisující vlastnosti dokumentu. Mezi vlastnosti dokumentu může patřit například defaultní nastavení zarážek tabulátorů nebo vlastnosti 17
Popis dokumentu WordprocessingML záhlaví. Dále zde může být informace o použité šabloně pro dokument nebo o XSLT transformaci, která se užije při ukládání dokumentu. V balíčku se tato část ukládá do souboru settings.xml v adresáři word. Endnotes V této části jsou uloženy texty vysvětlivek. Vysvětlivky jsou totéž jako poznámky pod čarou, pouze s tím rozdílem, že jejich text není uveden na příslušné stránce, ale na konci dokumentu. Část bývá obvykle uložena v adresáři word v dokumentu endnotes.xml. Font Table Informace o fontech, které jsou v dokumentu použity. Tyto informace lze využít v případě, že daný font není v systému instalován. Část balíčku Font Table může obsahovat vztah, jehož cílem je font definovaný v části Fonts. Část Font Table se standardně ukládá do adresáře word do dokumentu fontTable.xml. Footer Tato část obsahuje informace o zápatí pro jednotlivé oddíly dokumentu. Jaké zápatí se v dokumentu použije, se definuje ve vlastnostech oddílu (element <w:sectPr>) v elementu <w:footerReference>. Tento element kromě atributu w:val s id identifikujícím vztah obsahuje také atribut w:type. Atribut w:type může nabývat hodnot „first“, „odd“, „even“ nebo „default“ a určuje, pro jaké stránky se záhlaví použije. Částí se zápatím může být v balíčku více, pro každý druh zápatí se vytváří jedna část. Části se ukládají do adresáře word a pojmenovávají se footer1.xml, footer2.xml, ... Footnotes Do této části se ukládají poznámky pod čarou. V balíčku se footnotes ukládají do adresáře word do souboru footnotes.xml. Header Část Header obsahuje záhlaví pro jednotlivé oddíly dokumentu. Vlastnosti záhlaví jsou analogické s vlastnostmi zápatí. Soubory se záhlavím se standardně pojmenovávají header1.xml, header2.xml, ... Main document Tato část obsahuje vlastní tělo dokumentu. Souboru s tělem dokumentu se budu v následující kapitole věnovat podrobněji. Obvykle se část s tělem vlastního dokumentu jmenuje document.xml a ukládá se v balíčku do adresáře word. Tato část obsahuje vlastní soubor se vztahy, který se standardně nachází v souboru /word/_rels/document.xml.rels.
18
Popis dokumentu WordprocessingML Numbering Definitions Všechny seznamy jsou definované v této části. Jsou zde obsaženy informace o tom, zda je seznam číslovaný nebo odrážkový, jaká jsou odsazení v jednotlivých úrovních, od jakého čísla začíná číslovaný seznam nebo jak vypadají odrážky seznamu odrážkového. Hlavní dokument obsahuje pouze id seznamu a číslo úrovně položky, vše ostatní je definováno v části Numbering Definitions. Část se obvykle ukládá do adresáře word do souboru numbering.xml. Style Definitions Tato část obsahuje definice a popis stylů. Standardní cesta a název souboru se styly je /word/styles.xml. Websettings V této části jsou popsány vlastnosti specifické pro web. Část Websettings může mít vztah s externí částí Frame. Pojmem Frame se může rozumět WordprocessingML dokument, který lze editovat uvnitř jiného dokumentu WordprocessingML – ten se nazývá Frameset. Při editaci dokumentu Frameset se okno editoru MS Word rozdělí na tolik částí, kolik Frameset obsahuje dokumentů Frame a jednotlivé dokumenty je možné upravovat současně v jedné instanci editoru. Část Websettings se v balíčku ukládá do adresáře word do souboru webSettings.xml.
3.2. Vztahy s dalšími objekty 3.2.1. Vztahy s externími objekty Určité části balíčku dokumentu WordprocessingML nemusí mít vztahy pouze s částmi, které jsou součástí balíčku, ale vztahy mohou mít za cíl externí objekty. K těmto externím objektům patří: Framesets Jsou to dokumenty WordprocessingML, které v sobě obsahují další dokumenty, tzv. Frame, viz výše odstavec Websettings. Hyperlinks Představují hypertextové odkazy. V hlavním dokumentu se odkaz reprezentuje pomocí elementu <w:hyperlink>, jenž obaluje text odkazu. Tento element obsahuje atribut id, který identifikuje vztah, jehož cílem je požadovaná adresa. Vztah je uložen v souboru se vztahy pro hlavní dokument.
19
Popis dokumentu WordprocessingML Master Document and subdocuments Master dokument je hlavní dokument, který skládá dohromady jednotlivé dílčí dokumenty. Typickým příkladem je rozdělení knihy do jednotlivých kapitol (a subdokumentů), které mohou editovat různí autoři nezávisle na sobě. Master dokument potom v sobě obsahuje odkazy na jednotlivé subdokumenty. XSL transformace Při ukládání je možné na dokument použít XSL transformaci. Cílem vztahu odkazujícího na XSL transformaci může být externí XSL stylesheet. Do části Document Settings se přidává element <w:saveThroughXslt> s atributem označujícím id vztahu. 3.2.2. Vztahy s objekty DrawingML Dokumenty OOXML používají pro zápis grafických elementů jazyk DrawingML. Tento jazyk nebudu podrobně popisovat, uvedu jenom stručný přehled jeho možností. Specifikace jazyka DrawingML je uvedena v oficiální dokumentaci v dokumentu Office Open XML Part 1 – Fundamentals [1] v kapitole 14 a je podrobně rozepsána v dokumentu Office Open XML Part 4 - Markup Language Reference [4] v kapitole 5. Jazyk DrawingML používá tyto základní prvky: Diagram Colors Part – popisuje informace o barvách použitých v diagramu. Diagram Data Part – obsahuje data pro diagram. Diagram Layout Definition Part – definuje vzhled diagramu a jakým způsobem jsou data do diagramu mapována. Diagram Styles Part – upravuje vzhled diagramu podle tématu (Theme Part) dokumentu. Chart – část, která popisuje grafy. Chart Drawing Part – popisuje všechny základní elementy, které jsou použity při kreslení daného grafu. Theme Part – definuje „téma“, tedy jak celkově dokument vypadá. V této části jsou definována schémata barev, fontů a formátů jednotlivých prvků.
3.3. Minimální dokument Nyní popíšu, jak vypadá „nejmenší“ dokument, který obsahuje pouze povinné součásti. Minimální dokument musí obsahovat tyto tři soubory: 20
Popis dokumentu WordprocessingML 1. [Content_Types].xml – definice typu obsahu souborů v balíčku V tomto souboru musí být definované typy obsahu všech souborů. Musí být uložen v kořenovém adresáři balíčku a musí se jmenovat tímto předepsaným způsobem. Pomocí elementu můžeme typ obsahu souborů definovat souhrnně pro soubory určitého typu (např. *.jpg) nebo pomocí elementu specifikovat typ konkrétního souboru. Použití těchto elementů bylo popsáno v kapitole 2.2. Balíček reprezentující ukázkový minimální dokument obsahuje v souboru [Content_Types].xml následující:
2. .rels – soubor se vztahy balíčku Tento soubor představuje „startovní“ soubor se vztahy balíčku, pomocí něhož lze poznat, kde se nacházejí další části balíčku. Soubor se musí nacházet v adresáři _rels a musí se jmenovat .rels. V případě minimálního dokumentu bude obsahovat pouze jeden vztah, a to odkaz na hlavní část balíčku, která je tvořena souborem obsahujícím vlastní tělo dokumentu. Tento soubor může mít libovolné umístění a může se jmenovat libovolně, např. doc.xml. Ukažme si příklad „nejkratšího“ souboru se vztahy balíčku:
3. doc.xml – soubor obsahující vlastní tělo dokumentu Strukturou hlavního dokumentu se budu podrobně zabývat v další kapitole, proto zde uvedu ukázku dokumentu bez komentáře: <w:document xmlns:w="http://schemas.openxmlformats.org/ wordprocessingml/2006/main"> <w:body> <w:p> <w:r> <w:t> Dokument obsahující pouze pět slov.
21
Popis dokumentu WordprocessingML
Dokument vytvořený výše uvedeným způsobem má velikost 926 bytů a přitom je korektním dokumentem WordprocessingML.
3.4. Struktura a základní elementy hlavního dokumentu Kořenovým elementem hlavního dokumentu WordprocessingML je element <w:document>. Ten obsahuje element <w:body>, který v sobě může obsahovat dva druhy elementů: blokové a inline elementy. K blokovým elementům patří tabulky <w:tbl> a odstavce <w:p>. Příklad dokumentu s jedním prázdným odstavcem: <w:document> <w:body> <w:p/>
Inline elementy se nacházejí uvnitř odstavce a jsou to obrázky a tzv. runy <w:run>. Run nastavuje formátování textu, je to element nejnižší úrovně, který může obsahovat formátování. Text viditelný pro uživatele je uvnitř elementu <w:run> umístěný v elementu text <w:t>. Tuto hierarchii lze znázornit následujícím schématem: Odstavec
Run
Text
<w:p>
<w:r>
<w:t>
formátování odstavce
formátování runu
text viditelný pro uživatele
Obrázek 5: Elementy potřebné pro zápis textu
Jak již bylo řečeno, kořenovým elementem hlavního dokumentu je element <w:document>. Tento element může obsahovat dva elementy: volitelný element <w:background> a především povinný element <w:body>. 1. <w:background> – pozadí Pomocí tohoto elementu se definuje vzhled pozadí dokumentu. Element může obsahovat atribut w:color s hodnotou barvy ve formátu RRGGBB, např.: <w:background w:color="FCD09F"/>
22
Popis dokumentu WordprocessingML Další atributy slouží k výběru pozadí podle témat. Pozadí můžeme vyjádřit i vektorově pomocí VML, jehož kód se píše dovnitř elementu <w:background>. 2. <w:body> – tělo dokumentu (viz následující podkapitola). 3.4.1. Body Elementy popisující tělo dokumentu se zapisují do elementu <w:body>. Nyní uvedu nejzajímavější elementy, které se v elementu <w:body> mohou vyskytovat: <w:altChunk> – kotva pro umístění externího obsahu <w:bookmarkStart>, <w:bookmarkEnd> – začátek a konec záložky <w:commentRangeStart>,<w:commentRangeEnd> – začátek a konec komentáře <w:customXML> – blokový element pro uživatelské XML <w:oMath> – matematický výraz <w:oMathPara> – odstavec s matematickými výrazy <w:p> – odstavec <w:sdt> – blokové strukturované pole <w:sectPr> – vlastností posledního oddílu <w:tbl> – tabulka 3.4.2. Odstavec Element <w:p> je blokový element a používá se pro označení odstavce. Je jedním z nejčastěji používaných elementů. Může obsahovat následující druhy elementů: 1. Vlastnosti odstavce: <w:pPr> V tomto elementu se popisuje formátování odstavce, této problematice budu věnovat kapitolu 3.5.1 – Formátování odstavce. 2. Anotace Do této skupiny elementů lze zařadit následující: -
záložky: <w:bookmarkStart>, <w:bookmarkEnd> komentáře: <w:commentRangeStart>, <w:commentRangeEnd> informace o revizích
3. Značky pro uživatelské XML: <w:customXml> 23
Popis dokumentu WordprocessingML 4. Prvky na úrovni runu (inline elementy) -
jednoduchá pole: <w:fldSimple>, strukturovaná inline pole: <w:sdt> hyperlinky: <w:hyperlink> runy: <w:r>
5. Další elementy jako např.: -
zápis matematiky: <w:oMath> oprava chyb: <w:proofErr> kotva pro umístění subdokumentu: <w:subDoc>
3.4.3. Run Element run <w:r> obsahuje tyto dva nejdůležitější elementy: <w:t> – text viditelný pro uživatele <w:pPr> – vlastnosti formátování runu. Může však obsahovat i mnohé další. Z nich uvádím ty nejzajímavější: -
<w:br> – zalomení Element může obsahovat atribut w:type, který značí, čeho se toto zalomení týká. Jeho hodnoty mohou být „textWrapping“ (zalomení řádku), „page“ (zalomení stránky), „column“ (zalomení sloupce). Defaultní hodnota je „textWrapping“. Tato hodnota atributu může být doprovázena atributem w:clear (ten může mít hodnoty „all“, „left“, „right“ nebo „none“), který restartuje umístění plovoucích objektu.
-
<w:cr> – odřádkování
-
<w:drawing> – vložení objektu DrawingML Tento element může obsahovat buď <wp:inline> pro inline objekty nebo <wp:anchor> sloužící k ukotvení plovoucích objektů.
-
<w:nonBreakHyphen> – nezlomitelný spojovník Pokud je slovo s nezlomitelným spojovníkem na konci řádku a přesahuje délku řádku, potom nedojde k rozlomení slova na dvě části podle spojovníku, ale celé slovo se přesune na následující řádek.
-
<w:object> – vložený objekt Tento objekt je vložený inline. Podelementy mohou být <w:control> nebo jakýkoliv element ze jmenného prostoru
24
Popis dokumentu WordprocessingML urn:schemas-microsoft-com:vml nebo urn:schemas-microsoftcom:office:office.
-
<w:pgNum> – číslo aktuální stránky
-
<w:pict> – vložený objekt Element <w:pict> obsahuje elementy, jako jsou např. <w:control> nebo <w:movie>, případně jakýkoliv jiný element ze jmenného prostoru urn:schemas-microsoft-com:vml nebo urn:schemas-microsoft-com:office:office.
-
<w:softHyphen> – měkký spojovník V místě měkkého spojovníku může dojít ke zlomu řádku.
-
<w:sym> – vložený symbol Element obsahuje atributy w:char (hexadecimální kód znaku Unicode) a w:font (font symbolu), např. <w:sym w:font="Wingdings" w:char="F04A"/>.
-
<w:tab> – vložení tabulátoru Element nemá žádné atributy. V kontextu runu má tato značka jiný význam než v kontextu vlastnosti runu (tam slouží pouze jako definice).
-
<w:footnoteReference> – poznámka pod čarou Run obsahující tento element je automaticky číslovaný. Na stránce pod textem se potom objeví text této poznámky. Element obsahuje v atributu w:id identifikátor poznámky, jejíž text je uložen v části balíčku Footnotes.
-
<w:endnoteReference> – vysvětlivky Vysvětlivky se chovají stejně jako poznámky pod čarou, pouze s tím rozdílem, že jejich text není umístěný na dané stránce, ale na konci dokumentu.
3.5. Formátování dokumentu Vlastnosti a formátování textu je v dokumentu možné nastavit na několika úrovních. Tyto úrovně lze definovat následovně: 1. 2. 3. 4.
Defaulty dokumentu Styl tabulky Styl seznamu Styl odstavce 25
Popis dokumentu WordprocessingML 5. Styl runu 6. Přímé formátování: formátování odstavce, formátování runu V části balíčku Style Definitions se definují defaultní nastavení týkající se odstavců a runů, ale především styly pro tabulky, seznamy, odstavce a runy. Jednotlivé odstavce i runy lze naformátovat přímo pomocí elementů <w:pPr>, resp. <w:rPr>. Úrovně formátování jsou očíslovány úmyslně, neboť v nich je obsaženo hierarchické uspořádání v tom smyslu, že každá následující úroveň má při formátování vyšší prioritu. Uvedeme si příklad formátování. Uvažujme vlastnost „mezera za odstavcem“ (atribut w:after v elementu <w:spacing>). V defaultech dokumentu je pro vlastnosti odstavce nastaveno <w:spacing w:after=”240” />, ve stylu odstavce „Nadpis1“ je nastaveno <w:spacing w:before=”480” w:after=”0” />. Mějme následující tři odstavce: <w:p> <w:r> <w:t>Odstavec číslo 1. <w:p> <w:pPr> <w:pStyle w:val="Nadpis1"/> <w:r> <w:t>Odstavec číslo 2. <w:p> <w:pPr> <w:pStyle w:val="Nadpis1"/> <w:spacing w:before="0" w:after="480"/> <w:r> <w:t>Odstavec číslo 3.
Otázkou nyní je, jak bude vypadat velikost mezery za jednotlivými odstavci. Za prvním odstavcem bude mezera 12 bodů. Tato hodnota se převezme z defaultního nastavení, kde je řečeno, že mezera za odstavcem má být 240 twipů3 (= 12 bodů). Druhý odstavec má nastavený styl Nadpis1, u kterého je uvedeno, že mezera za odstavcem typu Nadpis1 je 0. Styl odstavce má vyšší prioritu než defaultní nastavení, proto bude mezera za druhým odstavcem nulová. 3
WordprocessingML často používá měrnou jednotku twip, která je definovaná jako 1/1440 palce.
26
Popis dokumentu WordprocessingML Třetí odstavec má styl Nadpis1, ale má nastaveno také přímé formátování odstavce v elementu <w:pPr>. Rozhodující proto bude hodnota v tomto elementu a mezera za třetím odstavcem bude 24 bodů (480 twipů = 24 bodů). Hierarchii stylů a jednotlivých druhů formátování popisuje kapitola 2.7.2 dokumentu Office Open XML Part 4 - Markup Language Reference [4]. Hierarchie stylů je v této kapitole kompletně a přehledně popsána, proto jsem z ní převzal následující obrázek:
Obrázek 6: Možné způsoby formátování ve WordprocessingML
V záhlaví obrázku je uveden prvek (tabulka, run, odstavec, seznam), jehož vlastnosti mají být nastaveny. V zaoblených obdélnících je uveden druh formátování (defaulty dokumentu, styl tabulek, styl seznamu, styl odstavce, styl runu, přímé formátování). Z obrázku lze vyčíst, co mohou jednotlivé druhy formátování ovlivnit. Obrázek dále vyjadřuje, že nejprve dochází k aplikování defaultů dokumentu, poté jednotlivých druhů stylů a až nakonec se provádí přímé formátování odstavce a runu. 3.5.1. Formátování odstavce Vzhled dokumentu je možné ovlivnit mnoha nastaveními. Kromě definovaného vzhledu ve stylech můžeme formátování nastavovat pro celé odstavce, nebo uvnitř odstavce pro jednotlivé runy. Formátování odstavce nastavujeme v elementu <w:pPr> (= paragraph properties), který je dítětem elementu <w:p>, jenž označuje odstavec. Odstavec může obsahovat více elementů <w:pPr>, vlastnosti mohou být rozděleny mezi tyto elementy, ale je to zbytečné.
27
Popis dokumentu WordprocessingML Formátování odstavce představuje nastavení týkající se zarovnání odstavce, odsazení řádků (případně předsazení), řádkování, orámování, stínování, atd. Je zbytečné zde uvádět všechny elementy s detailními popisy všech atributů. Zabývat se budu jenom těmi nejdůležitějšími elementy; především tedy těmi, které ovlivňují vzhled nejenom dokumentu WordprocessingML, ale také dokumentu HTML, který vznikne jeho konverzí. Detailní popis všech elementů lze nalézt v oficiální dokumentaci v dokumentu Office Open XML Part 4 - Markup Language Reference [4] v kapitole 2.3.1.26. Elementy mají atributy, jejichž hodnoty mohou být číselné nebo výčtové. Jedná-li se o atribut výčtového typu, jsou tyto hodnoty uvedeny v dokumentu [4] v kapitole 2.18. Například element pro zarovnání odstavce <w:jc> obsahuje způsob zarovnání v atributu w:val. Tento atribut je typu ST_Jc; možné hodnoty, kterých může nabývat, lze nalézt v uvedeném dokumentu v kapitole 2.18.50, která popisuje tento typ atributu. Odsazení odstavce – <w:ind> Pomocí elementu <w:ind> se nastavuje odsazení řádků odstavce a odsazení nebo předsazení prvního řádku odstavce. Levé a pravé odsazení se nastavuje v atributech w:left, resp. w:right. Hodnotou těchto atributů je velikost odsazení v jednotkách twip. Odsazení (resp. předsazení) prvního řádku se nastavuje v atributu w:firstLine (resp. w:hanging), opět v jednotkách twip. Odsazení a nastavení nemohou být aplikovány současně, pokud oba atributy mají nějakou hodnotu, potom se hodnota odsazení ignoruje. Typickým příkladem může být tento tvar elementu s jeho atributy: <w:ind w:left="1418" w:right="1440" w:hanging="851"/>
Odstavec potom bude mít toto nastavení: odsazení vlevo 1 cm, odsazení vpravo 2,54 cm, předsazení 1,5 cm. Atribut určující odsazení vlevo (w:left) má hodnotu 1418 twipů, což je v přepočtu na centimetry 2,5 cm, ale program MS Word uvažuje odsazení vlevo po odečtení předsazení. Všechny čtyři uvedené atributy mají ekvivalentní podobu s atributy w:leftChars, w:rightChars, w:firstLineChars a w:hangingChars. Princip použití je stejný, pouze hodnota atributů není udávána v jednotkách twip, ale v setinách znakového bodu. Zarovnání – <w:jc> Odstavec může být zarovnán doleva, doprava, na střed nebo do bloku (oboustranné zarovnání). Způsob zarovnání se nastavuje v atributu w:val. Hodnoty atributu odpovídající uvedenému zarovnání jsou „left“, „right“, „center“ a „both“. Použije-li se pro zarovnání odstavce do bloku hodnota „both“, roztáhnou se mezery mezi slovy, aby se dosáhlo zarovnání do bloku. Můžeme ale také použít hodnotu „distribute“, která způsobí
28
Popis dokumentu WordprocessingML zarovnání do bloku tak, že se v daném řádku rovnoměrně rozšíří mezery mezi jednotlivými písmeny. Pro zarovnání odstavce do bloku se tento element použije takto: <w:jc w:val="both" />
Seznam – <w:numPr> Element <w:numPr> poukazuje na to, že je daný odstavec součástí seznamu. Seznam může obsahovat číslování nebo odrážky. Veškeré informace o seznamu jsou ukládány v části balíčku Numbering Definitions. Element <w:numPr> obsahuje důležitý podelement <w:numId>, jehož atribut w:val obsahuje id seznamu. Dalším potřebným podelementem je <w:ilvl>, který označuje úroveň odsazení seznamu. Problematika seznamů je poměrně rozsáhlá, věnuje se jí celá kapitola 2.9 oficiální dokumentace Office Open XML Part 4 - Markup Language Reference [4]. Uvedu zde jenom velice stručný popis části balíčku Numbering Definitions: Kořenovým elementem souboru představujícím část s číslováním je <w:numbering>, který obsahuje dva základní druhy elementů: <w:num> a <w:abstractNum>. Elementů <w:num> je v souboru tolik, kolik je seznamů v hlavním dokumentu; každý tento element je pomocí id propojen s jednou instancí seznamu v dokumentu. Element <w:num> obsahuje odkaz na jeden z elementů <w:abstractNum>, který již obsahuje formátování pro jednotlivé úrovně seznamu. K nejzákladnějším vlastnostem, které zde lze nastavit, patří hlavně typ číslování seznamu v dané úrovni – např. arabské číslice, římské číslice, malá písmena, velká písmena, atd. Kromě číslování je možné nastavit odrážkování. Odrážky mohou být tvořeny znakem, symbolem nebo i obrázkem. Seznam může být i smíšený (hybridní) – to je takový seznam, u kterého se na jedné úrovni vyskytuje číslování, a na jiné úrovni tohoto seznamu jsou odrážky. Dále lze definovat velikost odsazení příslušné úrovně seznamu, zarovnání a číslo, od kterého se seznam začíná číslovat. Ve vlastnostech odstavce se nejčastěji setkáme s následující podobou elementu určující seznam: <w:numPr> <w:numId w:val="7"/> <w:ilvl w:val="0"/>
Je vidět, že se jedná o seznam s id = 7 a úroveň odsazení je 0. Všechny další informace o seznamu jsou uloženy jinde – v části Numbering Definitions.
29
Popis dokumentu WordprocessingML Orámování – <w:pBdr> Pomocí elementu <w:pBdr> se definuje styl rámečku kolem odstavce. Element obsahuje podelementy specifikující orámování jednotlivých stran odstavce. K těmto podelementům tedy patří: <w:top>, <w:bottom>, <w:left>, <w:right> a také <w:between>, který definuje styl rámečku mezi identickými odstavci. Dalším možným podelementem elementu <w:pBdr> může být <w:bar>, pomocí něhož se specifikuje vnitřní (u hřbetu) rámeček odstavce (jsou-li použity zrcadlové okraje stránky). Jednotlivé čáry rámečku jsou u uvedených podelementů popsány atributy. Jedním z nejdůležitějších atributů je w:val. Tento atribut popisuje styl rámečku, hodnoty atributu mohou být například single, double, dotted, dashed, outset, inset, atd. Atribut w:sz označuje tloušťku čáry, měří se v osminách bodu. Pro čáru širokou 3 body by atribut vypadal w:sz=“24“. Barvu čáry nastavíme atributem w:color, jehož hodnotou je trojice hexadecimálních čísel, případně hodnota „auto“ pro automatické stanovení barvy. Barvu rámečku lze definovat také pomocí témat. Vzdálenost čáry od obsahu rámečku se stanovuje pomocí atributu w:space. Hodnota se udává v bodech, které jsou ekvivalentní 1/72 palce. U rámečku se může nastavit efekt stínu pomocí atributu w:shadow. Atribut může nabývat hodnotu „true“ nebo „false“. Definice rámečku může vypadat následovně: <w:pBdr> <w:top w:val="single" w:sz="16" w:space="1" w:color="ABCDEF"/> <w:left w:val="single" w:sz="24" w:space="4" w:color="456981"/> <w:bottom w:val="single" w:sz="16" w:space="1" w:color="483659"/> <w:right w:val="single" w:sz="24" w:space="4" w:color="AB54DF"/> <w:between w:val="single" w:sz="8" w:space="1" w:color="0AF98C"/>
Všechny čáry rámečku jsou jednoduché a mají barvy podle hodnoty atributu w:color, vzdálenost od textu odpovídá také hodnotě atributu. Horní a dolní čára mají tloušťku 2 body, levá a pravá čára 3 body. Čára mezi odstavci se stejnými vlastnostmi má tloušťku 1 bod. Styl odstavce – <w:pStyle> Element označuje, jaký styl se má na odstavec použít. Identifikace stylu je uvedena v atributu w:val. Hodnotou bývá řetězec označující styl, např. „Nadpis1“: <w:pStyle w:val="Nadpis1" />
30
Popis dokumentu WordprocessingML Stínování – <w:shd> Pozadí odstavce se definuje pomocí elementu <w:shd>. Povinným atributem tohoto elementu je w:val, jenž označuje, jakým rastrem se má stínovat. Příkladem hodnoty tohoto atributu je “horzStripe” (horizontální čáry), “pct15” (výplň je 15 %) nebo hodnota “clear”, která označuje, že se nepoužije žádný rastr, bude to tedy „plná“ výplň. Dalšími atributy jsou w:color (barva popředí) a w:fill (barva pozadí). Lze použít také barvy podle tématu, element <w:shd> může obsahovat atributy w:themeColor, w:themeFill, ... Uveďme příklad použití tohoto elementu: <w:shd w:val="pct10" w:color="00FF00" w:fill="0D4CF6"/>
Pozadí tohoto odstavce bude mít barvu 0D4CF6 (formát RRGGBB) a bude doplněno 10% rastrem se zelenou barvou (00FF00). Mezery před a po odstavci, řádkování – <w:spacing> Pro formát odstavce je tento element důležitý a často používaný. Pomocí atributu w:line se nastavuje řádkování, hodnota je v jednotkách twip. Typ řádkování („auto“, „exact“, „atLeast“) lze nastavit v atributu w:lineRule. Mezera před odstavcem se nastavuje v atributu w:before, mezera za odstavcem v atributu w:after. Hodnoty se udávají v jednotkách twip. Například element <w:spacing w:before="240" w:after="120" w:line="360" w:lineRule="auto"/>
vyjadřuje, že před odstavcem bude mezera 12 bodů, za odstavcem 6 bodů a řádkování odstavce bude 1,5. Element <w:spacing> může take obsahovat atribut w:beforeAutospacing a atribut w:afterAutospacing (s hodnotami typu ST_OnOff). Hodnota atributů „on“ značí, že se mezera před odstavcem a za odstavcem nastavuje automaticky. Pokud jsou atributy takto nastaveny, ignorují se případné hodnoty atributů w:before a w:after. Definice tabulátorů – <w:tabs> Element <w:tabs> slouží pouze jako kontejner pro jednotlivé elementy <w:tab>, které slouží k definici jednotlivých tabulátorů. Definice tabulátoru – <w:tab> K definici tabulátoru potřebujeme znát typ tabulátoru a jeho pozici. Typ nastavíme v atributu w:val. Typem rozumíme způsob zarovnání textu umístěného na tabulátor, typy mohou být např. „left“, „center“, „decimal“. Pozici tabulátoru nastavím v atributu w:pos, 31
Popis dokumentu WordprocessingML používají se jednotky twip. Volitelně můžeme přidat atribut w:leader, který nastavuje vodící znak tabulátoru. Hodnotou může být „dot“,“hyphen“, „underscore“, atd. Prozatím byla řeč pouze o definování tabulátorů. Samotný tabulátor se potom v textu umísťuje pomocí stejnojmenného elementu <w:tab>. Význam tohoto elementu tedy závisí na použitém kontextu. Zarážky tabulátorů na druhém a čtvrtém centimetru se definují následovně: <w:tabs> <w:tab w:val="left" w:pos="1134"/> <w:tab w:val="left" w:pos="2268"/>
Vertikální zarovnání textu – <w:textAlignment> Jediný a povinný atribut tohoto elementu je atribut w:val, který udává typ vertikálního zarovnání textu v odstavci. Hodnoty atributu mohou být „top“, „center“, „baseline“, „bottom“ a „auto“, například: <w:textAlignment w:val="top" />
3.5.2. Další formátování odstavce Ze zajímavosti uvedu ještě další vlastnosti odstavce. Jejich popis bude pouze stručný, protože v souvislosti s konverzí dokumentu WordprocessingML do formátu HTML nejsou tolik zajímavé: -
<w:bidi/>: obrácení layoutu dokumentu, který bude uvažován zprava doleva
-
<w:contextualSpacing/>: pokud mají dva po sobě jdoucí odstavce stejné formátování, potom se bude ignorovat mezera mezi odstavci
-
<w:keepLines />: zachování všech řádků odstavce na jedné stránce
-
<w:keepNext />: svázání odstavce s následujícím
-
<w:mirrorIndents />: místo levého a pravého okraje se budou požívat okraje vnitřní a vnější
-
<w:pageBreakBefore/>: vložení konce stránky před odstavcem
-
<w:suppressAutoHyphens />: potlačení dělení slov (při nastavování vlastností odstavce se v české verzi MS Wordu nastavuje zaškrtnutím checkboxu „bez dělení slov“)
-
<w:suppressLineNumbers />: potlačení čísel řádků
32
Popis dokumentu WordprocessingML -
<w:textFlow w:val="btLr" />: směr toku odstavce (zde je v atributu w:val nastaveno: „bottom to top, left to right“)
-
<w:widowControl w:val="off" />: povolení vdov a sirotků (poslední řádek odstavce na následující stránce nebo první řádek odstavce na předchozí stránce)
-
<w:wordWrap w:val="off" />: dělení slov 3.5.3. Formátování runu
Run je nejmenší část dokumentu, která může obsahovat formátování. Je označen elementem <w:r>. Všechen text uvnitř jednoho runu má tedy stejný formát. Prvním elementem runu je element <w:rPr> (= run properties), ve kterém jsou definovány vlastnosti runu, např. text tučný, podtržený, viditelný. Kompletní popis runu a jeho podelementů lze nalézt v oficiální dokumentaci v dokumentu Office Open XML Part 4 Markup Language Reference [4] v kapitole 2.3.2. Uvedu zde opět jen nejdůležitější elementy, které formátování runu ovlivňují. Styl runu – <w:rStyle> Pro run lze předdefinovat styly. V těchto stylech je nastavené formátování runu, které je možné „přepsat“ pomocí elementů pro přímé formátování runu. Jaký styl se má použít nastavíme v elementu <w:rStyle> v atributu w:val, např.: <w:rStyle w:val="ZvyraznenyText" />
Písmo – <w:rFonts> Tento element slouží k nastavení písma daného runu. Run může obsahovat čtyři typy obsahu (ASCII, High ANSI, Complex Script, East Asian). Pro každý typ lze nastavit různý font. Nejzajímavější jsou první dva typy – písmo se pro ně nastavuje v atributech w:ascii a w:hAnsi, např.: <w:rFonts w:ascii="Courier New" w:hAnsi="Times New Roman" />
Velikost písma – <w:sz> Velikost písma se nastavuje v atributu w:val. Tato hodnota se udává v půlbodech. Velikost písma např. 12 bodů udává hodnota atributu rovna číslu 24: <w:sz w:val="24"/>
Tučný text – <w:b> Pro nastavení tučného textu stačí ve vlastnostech runu uvést pouze <w:b/>. Tento element může obsahovat atribut w:val, který pro tučný text může mít jednu z následujících hodnot: „on“, „1“ nebo „true“. Pokud atribut w:val chybí, implicitně se 33
Popis dokumentu WordprocessingML nastavuje jedna z hodnot označující tučný text. Možné hodnoty tohoto atributu se ve WordprocessingML označují typem ST_OnOff. Tento typ se používá u elementů, které nastavují vlastnosti způsobem ano / ne. Kurzíva – <w:i> Analogicky se nastavuje text napsaný kurzívou. Atribut w:val má hodnotu typu ST_OnOff. Podtržení – <w:u> V atributu w:val tohoto elementu se nastavuje typ podtržení. Typickými hodnotami jsou „single“, „double“, nebo také „dotted“ či „wave“. Lze nastavit i barvu podtržení v atributu w:color. Dvojité podtržení, které má barvu 95B3D7 (formát RRGGBB), se nastaví takto: <w:u w:val="double" w:color="95B3D7"/>
Rámeček – <w:bdr> Element nastaví rámeček kolem textu. Je možné zvolit barvu rámečku (atribut w:color), tloušťku rámečku (atribut w:sz, hodnota v osminách bodu), typ rámečku (atribut w:val). Pomocí atributu w:shadow se nastaví stín rámečku, atribut w:space nastavuje mezeru mezi rámečkem a textem. Barvu rámečku lze nastavit také pomocí témat, např. w:themeColor=“vystraznaBarva“. Tuto barvu lze předdefinovat v části balíčku ThemePart. Při využití atributu w:color i w:themeColor se použije nastavení z atributu w:themeColor. Například element <w:bdr w:val="single" w:sz="40" w:space="2" w:color="FF00FF">
definuje kolem textu rámeček, který je tvořen jednoduchou čárou o tloušťce 5 bodů, jejíž vzdálenost od textu je 2 body a barva FF00FF. Velká písmena, kapitálky – <w:caps>, <w:smallCaps> Pomocí těchto elementů se mění text na velká písmena nebo kapitálky. Oba elementy mohou mít atribut w:val obsahující „boolovské“ hodnoty typu ST_OnOff. Atribut lze vynechat; při vynechání se jeho hodnota implicitně uvažuje jako „true“. Barva písma – <w:color> Hodnota barvy se nastaví v atributu w:val. Barva se udává jako tři hexadecimální čísla ve tvaru RRGGBB, případně může být barva automatická – hodnota atributu je „auto“. Barvu lze opět nastavit podle témat. Černou barvu je možné nastavit takto: <w:color w:val="000000">
34
Popis dokumentu WordprocessingML Přeškrtnutí – <w:strike> nebo <w:dstrike> Pomocí elementu <w:strike> se nastaví jednoduché přeškrtnutí textu, pomocí elementu <w:dstrike> přeškrtnutí dvojité. Může se použít atribut w:val s hodnotou ST_OnOff. Efekt – <w:effect> Může se nastavit animovaný efekt, který zvýrazní text. Element má atribut w:val, který specifikuje, jaký efekt se má použít. Hodnota atributu je typu ST_TextEffect. Příkladem tohoto efektu může být „shimmer“, jenž způsobí, že se text rozmazává: <w:effect w:val=" shimmer "/>
Zvýraznění pomocí znaku – <w:em> Text se může zvýraznit pomocí zvýrazňovacího znaku. Tento znak se uvádí v atributu w:val a jeho hodnota může být např. „dot“ (zvýrazňovací bod nad textem): <w:em w:val="dot"/>
nebo „underDot“ (zvýrazňovací bod pod textem). Zvýraznění barvou pozadí – <w:highlight> Tímto elementem se mění barva pozadí textu. Hodnota barvy se nastaví v atributu w:val. Tato hodnota je jednou z možných hodnot typu ST_HighlightColor, např. green: <w:highlight w:val=" green" />
Stínování – <w:shd> U pozadí runu se mohou nastavit tři vlastnosti: barva pozadí, vzorek (rastr) a barva vzorku. Barva pozadí se uvádí v atributu w:fill, barvu vzorku v atributu w:color, obojí ve formátu RRGGBB. Vzorek pozadí se nastaví v atributu w:val. Hodnota tohoto atributu je typem ST_Shd, např. „diagStripe“. Element <w:shd> se používá stejně u runu jako u odstavce. Reliéf – <w:emboss>, ryté písmo – <w:imprint>, obrys – <w:outline> Elementy definují popořadě tzv. reliéfní písmo, ryté písmo nebo obrys. Hodnota atributu w:val je u všech elementů typu ST_OnOff. Stín – <w:shadow> Pomocí atributu w:val, který je typu ST_OnOff, lze nastavit písmo stínované.
35
Popis dokumentu WordprocessingML Rozšíření nebo zúžení – <w:w> Text je možné rozšířit nebo zúžit pomocí elementu <w:w>, kterému se v atributu w:val nastaví šířka textu v procentech. Při rozšiřování textu se nastavuje hodnota větší než 100, při zužování hodnota menší než 100. Příklad rozšíření textu na 200 %: <w:w w:val="200"/>
Pevná šířka textu – <w:fitText> Do atributu w:val tohoto elementu se může nastavit, jakou pevnou šířku má text mít. Text se potom automaticky roztáhne nebo zúží na tuto velikost bez ohledu na to, jakou má skutečnou šířku. Například element <w:fitText w:val="1440" />
značí, že jakýkoliv text v tomto runu bude mít šířku 1440 twipů (= 1 palec). Kerning – <w:kern> Pomocí tohoto elementu se dosáhne automatického kerningu (= úpravy velikosti mezer mezi písmeny). Element obsahuje atribut w:val, který označuje nejmenší velikost písma (v půlbodech), na kterou se automatický kerning provede. Na menší písmo, než je uvedené v tomto atributu, se kerning neprovádí. Kerning, který se bude provádět na písmena o velikosti minimálně 14 bodů: <w:kern w:val="28" />
Umístění – <w:position> Text v runu může být vzhledem k řádku zvýšený nebo snížený. Tohoto efektu se dosáhne pomocí elementu <w:position>, jemuž se v atributu w:val nastavuje hodnota umístění. Pří zvyšování runu se použije kladná hodnota, při snížení hodnota záporná. Jako jednotka se používají tzv. půlbody, při zvýšení textu např. o 12 bodů bude hodnota atributu 24: <w:position w:val="24" />
Mezery mezi znaky – <w:spacing> Mezery mezi znaky se mohou změnit o hodnotu, která se v tomto elementu nastavuje do atributu w:val. Při zvětšování velikosti mezer je tato hodnota kladná, při zmenšování se udává hodnota záporná (hodnota se udává v jednotkách twip). Element <w:spacing w:val="200"/>
bude označovat text, který je rozšířený o 10 bodů. 36
Popis dokumentu WordprocessingML Horní a dolní index – <w:vertAlign> Horní nebo dolní index se rozliší atributem w:val. Pro použití horního indexu se nastaví tomuto atributu hodnota „superscript”: <w:vertAlign w:val="superscript" />
Dolní index je reprezentován hodnotou „subscript”. Atribut může nabývat ještě hodnoty „baseline”, která se používá implicitně, pokud se nenastaví jedna z předchozích dvou hodnot. Skrytý text – <w:vanish> Element obsahuje atribut w:val, který je „booleovského“ typu ST_OnOff. Atribut lze vynechat. Skrytý text na webu – <w:webHidden> Element označuje run, jehož text se nemá zobrazovat na webu. Typickým příkladem jsou čísla stránek v obsahu. 3.5.4. Tabulky Dalším blokovým elementem, který se může vyskytovat v dokumentu WordprocessingML (v elementu <w:body>) jsou tabulky. Tabulky jsou reprezentovány pomocí elementu <w:tbl>. V tvorbě tabulek lze vidět určitou podobnost s tabulkami v HTML. Element <w:tbl> v sobě obsahuje jednotlivé řádky zapsané elementem <w:tr>, které obsahují buňky – element <w:tc>. Text, který se má zobrazit uživateli, je v buňce uložen opět v hierarchii elementů <w:p> (odstavec) – <w:r> (run) – <w:t> (text). Pomocí elementu <w:tblGrid> je možné definovat mřížku tabulky, vlastnosti tabulky se nastavují v elementu <w:tblPr> (= table properties). Kromě vlastností celé tabulky se nastavují vlastnosti i pro jednotlivé řádky nebo pro jednotlivé buňky. Tyto vlastnosti se nastavují v elementu <w:trPr> (= table row properties) daného řádku resp. v elementu <w:tcPr> (= table cell properties) dané buňky. V příloze 1 si lze prohlédnout příklad formátování tabulky a jejího kódu zapsaného v jazyce WordprocessingML. Nyní popíšu obsah uvedených elementů pro nastavení mřížky a pro nastavení vlastností tabulky, řádku a buňky:
37
Popis dokumentu WordprocessingML Nastavení mřížky <w:tblGrid>
Element <w:tblGrid> slouží k definici mřížky tabulky, v HTML se vyskytuje podobný element . Element <w:tblGrid> obsahuje definici jednotlivých sloupců pomocí elementů <w:gridCol>, u kterých se v atributu w:w nastavuje šířka daného sloupce v jednotkách twip. Vlastnosti tabulky <w:tblPr>
K nejdůležitějším vlastnostem tabulky, které se nastavují v tomto elementu, patří: Šířka tabulky <w:tblW>: nastavuje se v atributu w:w, použitá jednotka se uvede v atributu w:type. Touto jednotkou může být „dxa“ (twips), „pct“ (padesátiny procenta), „nil“ (žádná šířka) nebo „auto“ (automatická šířka). Nastavení stylu <w:tblStyle>: použitý styl tabulky se zapisuje do atributu w:val. Rámeček kolem tabulky <w:tblBorders>: tento element obsahuje podelementy <w:top>, <w:left>, <w:bottom>, <w:right>, ve kterých se definuje příslušná čára kolem tabulky. Tyto podelementy mají stejné atributy jako stejnojmenné podelementy elementu <w:pBdr>, který definuje orámování odstavce (popsáno v kapitole 3.5.1). Element <w:tblBorders> navíc obsahuje podelementy <w:insideH> a <w:insideV>, které se týkají vnitřní horizontální, resp. vertikální čáry mezi buňkami uvnitř tabulky. Mají stejné atributy jako elementy pro čáry kolem tabulky. Zarovnání tabulky <w:jc>: v atributu w:val se nastavuje způsob zarovnání tabulky, možné hodnoty jsou např. „center“, „left“, „right“. Stínování tabulky <w:shd>: tento element má stejné vlastnosti jako element <w:shd> u odstavce (runu), který jsem popsal v kapitole 3.5.3. Vnitřní okraj buněk <w:tblCellMar>: pomocí tohoto elementu se nastavují vnitřní okraje všech buněk v tabulce. U jednotlivých buněk můžeme tuto hodnotu přepsat elementem <w:tcMar>. Element <w:tblCellMar> obsahuje podelementy <w:top>, <w:left>, <w:right>, <w:bottom>, které představují příslušný okraj. Tyto podelementy mají atributy w:w obsahující šířku okraje a atribut w:type obsahující jednotky míry. Těmito jednotkami může být „dxa“ (twips), „pct“ (padesátiny procenta), „nil“ (žádná šířka) nebo „auto“ (automatická šířka). Mezera mezi buňkami <w:tblCellSpacing>: velikost této mezery se nastavuje v atributu w:w a jednotka v atributu w:type. Odsazení tabulky <w:tblInd>: hodnota se opět zadává do atributu w:w a jednotka do atributu w:type.
38
Popis dokumentu WordprocessingML Nastavení layoutu tabulky <w:tblLayout>: tabulka může mít pevnou nebo automatickou šířku. Pevná šířka se zajistí nastavením hodnoty „fixed“ v atributu w:type. Opakování záhlaví <w:tblHeader>: použití tohoto elementu s atributem w:val typu ST_OnOff zajišťuje opakování záhlaví na každé stránce dokumentu WordprocessingML. Obrácení layoutu <w:bidiVisual>: požitím tohoto elementu bude layout stránky uvažován zprava doleva. To znamená, že první sloupec tabulky bude v dokumentu zobrazen napravo. Element lze použít bez atributu nebo s atributem w:val obsahujícím hodnotu typu ST_OnOff. Vlastnosti řádku <w:trPr>
Výška řádku <w:trHeight>: v atributu w:val se může nastavit výška daného řádku, výška se udává v jednotkách twip. Element obsahuje také atribut w:hRule označující způsob určení výšky řádku. Možnými hodnotami může být „atLeast“, „auto“ nebo „exact“. Zarovnání řádku <w:jc>: způsob zarovnání řádku vzhledem k okrajům textu v daném oddílu. Zarovnání se nastavuje v atributu w:val. Zákaz rozdělení řádku <w:cantSplit>: element se používá k tomu, aby řádek s rozsáhlým obsahem buňky zůstal na jedné stránce. Pokud by se tento řádek vyskytoval na přelomu stránek, dojde k tomu, že se celý řádek vykreslí na následující stránce. Jediný atribut elementu je w:val a je typu ST_OnOff. Podmíněné formátování <w:cnfStyle>: vlastnosti řádku (nebo také buňky či odstavce – podle toho, kde se tento element použije) se převezmou ze stylu buňky, která se nachází na pozici definované atributem w:val elementu <w:cnfStyle>. Pozice je definována bitovou maskou (12 binárních hodnot) a vyjadřuje, zda se jedná o buňku v prvním řádku tabulky, buňku v pravém horním rohu tabulky, atd. Atribut popisuje celkem 12 možných pozic. Příkladem může být formátování řádku buňky podle stylu pro poslední řádek tabulky (poslední řádek tabulky je označen v druhém "bitu" hodnoty atributu): <w:cnfStyle w:val="010000000000" />
Vynechání sloupců <w:gridAfter>, <w:gridBefore>: lze vynechat sloupce za poslední buňkou (resp. před první buňkou). Počet vynechaných buněk je určen v atributu w:val.
39
Popis dokumentu WordprocessingML Šířka vynechaných sloupců <w:wAfter>, <w:wBefore>: šířka vynechaných sloupců pomocí elementu <w:gridAfter> nebo <w:gridBefore> se nastaví v atributu w:w, jednotka se uvede v atributu w:val. Vlastnosti buňky <w:tcPr>
Šířka buňky <w:tcW>: šířka je udána v atributu w:w, jednotka, ve které je šířka udána, v atributu w:type. Zarovnání obsahu buňky <w:vAlign>: tento element nastavuje vertikální zarovnání textu v buňce. Typ zarovnání se udává v atributu w:val, atribut obsahuje jednu z těchto hodnot: „both“, „bottom“, „center“, „top“. Směr textu <w:textDirection>: směr se udává v atributu w:val, který obsahuje hodnotu typu ST_TextDirection, např. "btLr" (zkratka pro výraz „bottom to top, left to right“). Rámeček kolem buňky <w:tcBorders>: tento element obsahuje elementy <w:bottom>, <w:left>, <w:right>, <w:top>, které definují jednotlivé čáry kolem buňky. Dále může element obsahovat elementy <w:insideH> nebo <w:insideV> pro definici vnitřní horizontální (resp. vertikální) čáry kolem buňky. V buňce lze udělat i diagonální čáry pomocí elementů <w:tl2br> a <w:tr2bl>. Stínování buňky <w:shd>: element má stejné vlastnosti jako element <w:shd> u odstavce a runu. Vnitřní okraj <w:tcMar>: příslušný vnitřní okraj buňky se nastavuje v podelementech <w:top>, <w:left>, <w:bottom>, <w:right>, ve kterých se velikost okraje nastavuje v atributu w:w a jednotka se nastavuje v atributu w:type. Roztažení textu <w:tcFitText>: podle šířky buňky lze text roztáhnout nebo zúžit, aby zabíral přesně velikost dané buňky. Element může obsahovat atribut w:val typu ST_OnOff. Zákaz zalamování textu <w:noWrap>: dlouhý text v buňce se při použití tohoto elementu nebude zalamovat. Element může obsahovat atribut w:val typu ST_OnOff. Horizontální sloučení buněk <w:gridSpan>: počet sloučených buněk, počet je udán v atributu w:val. Pokud je např. hodnota w:val=”2”, potom se tato buňka počítá za 2 a řádek musí tedy obsahovat o jednu buňku méně. Analogické to je pro větší hodnoty tohoto atributu. Tento princip je stejný v HTML. Ve WordprocessingML existuje také element <w:hMerge>, který by měl sloužit k horizontálnímu sloučení sousedních buněk tabulky, ale jelikož sloučení buněk dělá MS Word pomocí <w:gridSpan>, tak tento element nemá cenu uvažovat. 40
Popis dokumentu WordprocessingML Vertikální sloučení buněk <w:vMerge>: zda patří buňka ke skupině sloučených buněk, vyjádříme pomocí atrbitu w:val, jehož hodnota může být „continue“ nebo „restart“. Tam, kde sloučení buněk začíná (tato buňka je horní buňkou tohoto sloučení), je hodnota atributu „restart“. V buňce, ve které má sloučení pokračovat, má atribut hodnotu “continue”. Vertikální sloučení buněk je trochu odlišné od horizontálního sloučení pomocí elementu <w:gridSpan>, kde řádky kvůli sloučení obsahovaly buněk méně. Při vertikálním sloučení se žádné buňky neodstraňují. Obsah buněk, ve kterých je v elementu <w:vMerge> nastaven atribut w:val na „continue“, se nezobrazuje. Pokud vlastnosti buňky už neobsahují element <w:vMerge> s atributem w:val nastaveným na „continue“ ani element <w:vMerge> bez atributu w:val (pokud je atribut w:val vynechán, předpokládá se jeho implicitní hodnota „continue“), má se za to, že tato buňka ke sloučení už nepatří. 3.5.5. Styly Ve WordprocessingML je možné definovat styly pro formátování následujících 4 prvků: Tabulky Seznamy Odstavce Runy Ve vlastnostech jednotlivých prvků se uvádí pouze odkaz na jméno daného stylu, např. u odstavce: <w:pStyle w:val="Nadpis1"/>
a v části balíčku, která obsahuje styly (standardně v souboru styles.xml), se definují jednotlivé vlastnosti. Kořenovým elementem části se styly je element <w:styles>. Tento element obsahuje tři druhy elementů: 1) Defaulty dokumentu <w:docDefaults>: zde se nastavují vlastnosti pro odstavec a pro run. Element <w:docDefaults> může obsahovat dva elementy: <w:rPrDefault> s podelementem <w:rPr> a element <w:pPrDefault> s podelementem <w:pPr>. Uvnitř elementů <w:rPr> a <w:pPr> se vyskytují stejné elementy jako u přímého formátování. 2) Latentní styly <w:latentStyles>: tyto styly se v daném dokumentu nepoužívají, případně nejsou viditelné, proto u nich nejsou uvedené vlastnosti formátování, aby se zbytečně nezvětšovala velikost balíčku.
41
Popis dokumentu WordprocessingML 3) Styly <w:style>: každý tento element slouží k definici jednoho stylů. Element obsahuje atribut w:type obsahující druh stylu („table“, „numbering“, „paragraph“, „character“) a atribut w:styleId, který obsahuje id stylu, např. „Nadpis1“. Důležitým atributem je také volitelný atribut w:default, který u jednotlivých druhů stylu vyjadřuje, že se tento styl použije u prvku, který nemá ve svých vlastnostech nastaven styl. Element <w:style> obsahuje podelement <w:name>, ve kterém je v atributu w:val uveden název stylu, jak ho zobrazí aplikace MS Word. WordprocessingML podporuje dědičnost stylů. Pomocí elementu <w:basedOn>, který má v atributu w:val název stylu, na kterém je založen, můžeme vyjádřit, že daný styl dědí všechny vlastnosti z uvedeného „nadřazeného“ stylu. „Nadřazený“ styl může být také založen na jiném stylu a takto můžeme opakovaně dědit vlastnosti až po styl, který nebude obsahovat element <w:basedOn>. Velice stručně popíšu, co mohou jednotlivé druhy stylů formátovat a co je pro tyto druhy typické: Styl tabulky <w:style w:type=“table“>
Ve stylu tabulky je možné nastavit poměrně složité formátování. Lze zde formátovat tabulku, řádek tabulky, buňku tabulky, odstavec a run. Je umožněno „rozdělit“ tabulku do několika sekcí (první sloupec, horní nebo dolní řádek, poslední sloupec, sudé / liché řádky), pro které lze nastavit různé formátování. Tyto sekce se značí pomocí elementu <w:tblStylePr> s atributem w:type, který je typu ST_TblStyleOverrideType a může obsahovat hodnoty např. „firstCol“ (celý první sloupec) nebo „nwCell“ (horní levá buňka). Styl pro tabulku v dokumentu se nastavuje v jejích vlastnostech pomocí elementu <w:tblStyle>. Styl seznamu <w:style w:type=“numbering“>
Tento styl umožňuje nastavit odkaz na definici seznamu, který se nachází v části balíčku Numbering Definitions. Všechny vlastnosti formátování seznamů jsou pak uvedeny v této části. Styl odstavce <w:style w:type=“paragraph“>
Ve stylu odstavce lze nastavit jednak vlastnosti odstavce pomocí elementu <w:pPr> a také vlastnosti každého runu v tomto odstavci pomocí elementu <w:rPr>. Oba tyto elementy obsahují elementy uvedené při popisu formátování odstavce a runu. Styl odstavce se nastavuje ve vlastnostech odstavce pomocí elementu <w:pStyle>. Styl runu <w:style w:type=“character“>
Lze používat také styly pro jednotlivé runy. Jednotlivé elementy sloužící pro formátování runu se zapisují dovnitř elementu <w:rPr>. V runu se v jeho vlastnostech použití stylu značí elementem <w:rStyle>.
42
Popis dokumentu WordprocessingML
3.6. Odkazy Odkazy mohou odkazovat na objekt umístěný mimo dokument nebo na záložku umístěnou uvnitř dokumentu. Podle toho se odkazy rozlišují na externí a interní. Externí odkazy
Externí odkazy mají svůj cíl umístěný mimo balíček. Nejtypičtějším externím odkazem je webová stránka na internetu. V hlavním dokumentu je externí odkaz reprezentován elementem <w:hyperlink>, který obklopuje run s textem odkazu. Element je tedy přímým potomkem elementu <w:p>. Element <w:hyperlink> obsahuje pouze ID vztahu, který je popsán v části balíčku se vztahy. Zde je potom uveden vztah v následující podobě: Interní odkazy
Odkaz v rámci dokumentu Odkaz tohoto druhu je také tvořen elementem <w:hyperlink>, avšak neobsahuje ID vztahu s cílem odkazu, nýbrž název záložky v dokumentu. Na tuto záložku je odkaz nasměrován pomocí atributu w:anchor. Záložka Cílem interního odkazu jsou tzv. záložky (bookmarks). Tvoří se podobným způsobem jako externí odkazy, až na to, že netvoří kontejner, do kterého se vloží run, ale vytváří se pomocí dvou elementů: <w:bookmarkStart> a <w:bookmarkEnd>. Oba tyto elementy obsahují ID příslušné k dané záložce. Element <w:bookmarkStart> navíc obsahuje jméno záložky, pomocí něhož je záložka definována uživatelem. S tím, že začátek a konec záložky není tvořen jedním elementem a jeho koncovou značkou, ale dvěma elementy, je potřeba nakládat opatrně, zejména při ruční editaci dokumentu. Může se např. stát, že začátek záložky je v jednom odstavci a konec v odstavci druhém.
3.7. Obrázky a grafika Grafiku je možné definovat pomocí DrawingML nebo VML. Základními elementy pro popis grafiky jsou: <w:drawing> – slouží k vložení objektu popsaného pomocí DrawingML. Problematice DrawingML se věnuje celá 5. kapitola oficiální dokumentace v souboru Part 4 – Markup Language Reference [4].
43
Popis dokumentu WordprocessingML <w:pict> – element, který obsahuje definici a obsah objektu VML. Podrobný popis lze najít v oficiální dokumentaci v souboru Part 4 – Markup Language Reference [4] v kapitole 6. Tyto dva elementy se vkládají do elementu <w:run>. Oba elementy stručně popíšu a uvedu jejich nejzákladnější podelementy: 3.7.1. DrawingML: <w:drawing> Elementy DrawingML se používají s prefixem „a“ a patří do jmenného prostoru: http://schemas.openxmlformats.org/drawingml/2006/main.
Používají se také elementy DrawingML, které lze použít jenom v dokumentu WordprocessingML. Tyto elementy mají prefix „wp“ a jsou ze jmenného prostoru: http://schemas.openxmlformats.org/drawingml/2006/ wordprocessingDrawing.
Element <w:drawing> tvoří grafický rámec, do něhož se vkládají objekty DrawingML, jako jsou např. obrázky, grafy, diagramy, různé tvary a další grafika. Objekt DrawingML může být do dokumentu vložen jako inline objekt, který ovlivňuje výšku řádku, nebo jako plovoucí objekt (floating), který je k textu ukotven, anebo může být absolutně pozicován vzhledem ke stránce. Zmíním jenom dva nejzákladnější elementy, a to jsou: <w:inline>, který slouží pro inline vložení objektů nebo <wp:anchor>, který se používá jako kotva pro uchycení plovoucích objektů. -
<wp:inline>
Element obsahuje atributy distT, distB, dittR, distL, které vyjadřují vzdálenost objektu od textu. Tato vzdálenost se udává v jednotkách EMU (360 000 EMU = 1 cm). Velikost objektu je popsána elementem <wp:extent>, jehož atribut cx udává šířku objektu a atribut cy jeho výšku. Velikosti jsou rovněž v jednotkách EMU. Obsahuje elementy, jako jsou např. , který nastavuje velikost objektu a , který reprezentuje grafický objekt. Element obsahuje element , který slouží jako odkaz na grafický objekt; jeho dětmi může být jakýkoliv element, např. pro obrázek se používá element ze jmenného prostoru http://schemas.openxmlformats.org/drawingml/2006/picture
-
<wp:anchor>
Obsahuje také atributy distT, distB, dittR, distL a element <wp:extent> se stejným významem jako u elementu <wp:inline>. V elementu <wp:anchor> se pro vyjádření horizontálního zarovnání objektu používá element <wp:positionH>, který obsahuje atribut 44
Popis dokumentu WordprocessingML relativeFrom (hodnota je typu ST_RelFromH, např. to může být „page“, „margin“ nebo „column“) a podelement <wp:align> (může obsahovat např. „left“ nebo „center“). Pro zobrazení obrázků se používá element , který jsem popsal o odstavec výše. Elementy pro práci s obrázky, jejich použití a význam popisuje dokument Part 4 – Markup Language Reference [4] v kapitole 5.2. 3.7.2. VML: <w:pict> Do elementu <w:pict> se vkládá vektorový popis grafiky. Elementy VML standardně používají prefix „v“, který označuje tento jmenný prostor: urn:schemas-microsoft-com:vml.
Pro základní představu vyjmenuji několik elementů z tohoto jmenného prostoru: -
– oblouk
-
– slouží k popisu pozadí dokumentu, pomocí tohoto elementu lze barvu pozadí nastavit např. jako gradientní přechod dvou barev
-
– Bézierova křivka
-
– obrázek načtený z externího zdroje, obsahuje atribut src s názvem obrázku. Může být potomkem pouze těchto elementů: <w:background>, <w:object>, <w:pict> nebo , který slouží k označení skupiny tvarů.
-
– element se stejnými vlastnostmi jako . Musí být vložen v elementu VML, nejčastěji to bývá element .
-
, – čára (resp. lomená čára)
-
– ovál
-
, – obdélník (resp. zaoblený obdélník)
-
– definice tvaru, je to základní objekt VML, pomocí něhož je definován např. WordArt
-
– element popisující vlastnosti textu, který má být veden po nějaké vektorové cestě – typicky se tento element používá ve WordArtu; element obsahuje mimo jiné atributy style (popis fontu a jeho velikosti) a string (text, který se má vykreslit)
-
– element představující prvek textové pole. Element je obsažen v elementu a sám obsahuje podelement <w:txbxContent>, což je kontejner pro zápis WordprocessingML, který umožňuje vkládání elementů z WordprocessingML do objektů z VML. Element <w:txbxContent> tedy bude 45
Popis dokumentu WordprocessingML obsahovat např. <w:p> s jeho podelementy a formátováním známým z dřívějšího popisu. Textové pole se v MS Wordu poměrně často vyskytuje, proto si na příkladu ukážeme jeho použití (následující kód je vložen do elementu <w:r>): <w:pict> <w:txbxContent> <w:p> <w:pPr> <w:r> <w:t>Text v poli.
3.8. Oddíly Oddíly slouží k rozdělení dokumentu na části se společnými vlastnostmi, jako je například záhlaví a zápatí. Ve WordprocessingML se nastavení oddílu provádí v elementu <w:sectPr>. Tento element má dvojí umístění: -
pro všechny oddíly kromě posledního se element <w:sectPr> vkládá do vlastností (element <w:pPr>) posledního odstavce daného oddílu,
-
pro poslední oddíl se element <w:sectPr> vkládá do elementu <w:body>. Element <w:sectPr> bývá posledním elementem elementu <w:body>.
V elementu <w:sectPr> lze nastavit následující vlastnosti: odkaz na záhlaví a zápatí <w:headerReference>, <w:footerReference> (záhlaví i zápatí jsou definované v části balíčku Header a Footer), číslování stránek <w:pgNumType>, číslování řádků <w:lnNumType>, okraje stránky <w:pgMar>, orientaci a velikost stránky <w:pgSz>, počet sloupců a jejich definice <w:cols>, zákaz editování obsahu mimo formuláře <w:formProt>, směr textu <w:textDirection>, orámování stránky <w:pgBorders>, vertikální zarovnání <w:vAlign> a grid stránky <w:docGrid>. Lze nastavit se typ oddílu <w:type>, který značí, že následující oddíl začíná: -
na stejné stránce na následující stránce na následující liché stránce 46
Popis dokumentu WordprocessingML -
na následující sudé stránce na začátku dalšího sloupce.
Uveďme si příklad nastavení oddílu: <w:sectPr> <w:headerReference w:type="default" r:id="rId6"/> <w:footerReference w:type="default" r:id="rId7"/> <w:type w:val="continuous"/> <w:pgSz w:w="11906" w:h="16838"/> <w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/> <w:cols w:num="2" w:space="708"/> <w:docGrid w:linePitch="360"/>
Podle toho, co jsem popsal, je zřejmé, co jednotlivé elementy mají vyjadřovat.
3.9. Uživatelská pole Uživatelskými poli se rozumí dynamická pole, která se mění v závislosti na svém umístění a na obsahu dokumentu. Tato pole mohou být jednoduchá (obsahují jeden run) nebo to mohou být pole strukturovaná (mohou obsahovat třeba několik odstavců). Typickým příkladem jednoduchého pole je číslo stránky nebo název aktuálního nadpisu první úrovně, strukturovaným polem je např. obsah nebo seznam literatury. 3.9.1. Jednoduchá pole <w:fldSimple> Jednoduchá pole se značí elementem <w:fldSimple>, který obsahuje důležitý atribut w:instr. Hodnota tohoto atributu vyjadřuje obsah pole. Uveďme si příklad, jak vyjádřit číslo aktuální stránky: <w:fldSimple w:instr=“PAGE“> <w:r> <w:t>47
Seznam všech instrukcí (hodnot atributu w:instr) je možné nalézt v kapitole 2.16.5 v oficiální dokumentaci Part 4 – Markup Language Reference [4]. Lze si zde vybrat z velkého množství instrukcí (celkově jich existuje kolem 80). 3.9.2. Strukturované pole <w:sdt> Strukturovaná pole mohou být bloková (vložená v dokumentu na úrovni odstavce) nebo inline (na úrovni runu). Mohou být také vložená v tabulce na úrovni řádku nebo buňky 47
Popis dokumentu WordprocessingML tabulky. Strukturované pole obsahuje dva základní elementy: vlastnosti pole <w:sdtPr> a především <w:sdtContent> s vlastním obsahem pole. V elementu <w:sdtContent> se vyskytují elementy v závislosti na kontextu: pokud je strukturované pole blokové, obsahuje v sobě v podstatě stejné elementy jako <w:body>, pokud je strukturované pole inline, obsahuje elementy stejné, jako může obsahovat odstavec <w:p>. Z mnohých nastavení vlastností v <w:sdtPr> jmenuji tyto: unikátní id daného pole (element <w:id>), user-friendly pojmenování pole (element <w:alias>), označení typu pole (např. pomocí elementu <w:citation>). Jako příklad strukturovaného inline pole uvádím citaci literatury: <w:sdt> <w:sdtPr> <w:id w:val="2235826"/> <w:citation/> <w:sdtContent> <w:fldSimple w:instr=" CITATION MSD082 \l 1029 "> <w:r> <w:t>[13]
48
API pro práci s dokumenty OOXML
4. API pro práci s dokumenty OOXML
Pro práci s dokumenty OOXML existují mnohá programová rozhraní. V této práci jsem používal platformu .NET, proto budu hovořit pouze o API pro .NET. Popíšu třídy ze jmenného prostoru System.IO.Packaging a na příkladu ukážu jejich použití. Pro úplnost se také velice stručně zmíním o existenci následující knihovny: Microsoft.Office.Document.Format.OpenXml.dll. Tato knihovna byla speciálně vyvinuta pro práci s dokumenty OOXML. Knihovna obsahuje třídy patřící do jmenného prostoru Microsoft.Office.DocumentFormat.OpenXml.Packaging.
4.1. System.IO.Packaging V .NET frameworku 3.0 se nachází Package API, což jsou třídy z uvedeného jmenného prostoru System.IO.Packaging. Toto API zabezpečuje veškerou funkcionalitu týkající se technologie ZIP. Souží k vytváření a otevírání balíčku a k vytváření, úpravě, odstraňování částí dokumentů a vztahů mezi nimi. Jednotlivé části dokumentů umí načítat do streamů a umožňuje do nich zapisovat. Uvedu zde několik nejvýznamnějších tříd z tohoto jmenného prostoru: Package
Package je název třídy, která reprezentuje balíček. Třída obsahuje metody zabezpečující práci se samotným balíčkem, jako je vytváření, procházení, modifikace a odstraňování balíčku, vztahů balíčku a jednotlivých částí balíčku. Třída obsahuje také metody na otestování existence části balíčku nebo vztahu v balíčku. PackageRelationship
Třída PackageRelationship slouží k práci se vztahy mezi částmi balíčku. Instance této třídy jsou uloženy v kolekci vztahů PackageRelationshipCollection. Třída obsahuje vlastnosti vztahu, jimiž jsou Id, Package, RelationshipType, SourceUri, TargetMode a TargetUri. PackagePart
Třída představuje část dokumentu, např. hlavní část nebo část se styly. Obsahuje metody pro práci s těmito částmi, načítá jejich streamy, zajišťuje také práci se vztahy v částech balíčků – obsahuje metody na vytvoření vztahu, smazání vztahu a test existence vztahu.
49
API pro práci s dokumenty OOXML Třída obsahuje vlastnosti této části, jako jsou CompressionOption, ContentType, Package a Uri. Další třídy
Do jmenného prostoru System.IO.Packaging samozřejmě patří i další třídy, např. PackageProperties (Created, Creator, Description, Language, Keywords, Version) nebo PackageDigitalSignature a PackageDigitalSignatureManager zajišťující práci s digitálním podpisem a mnohé další. 4.1.1. Příklad práce s balíčkem Na příkladu ukážu otevření balíčku, nalezení Uri pro hlavní část balíčku, získání hlavního dokumentu balíčku a vytvoření XPathDocumentu představujícího hlavní dokument. using System; using System.IO; using System.IO.Packaging; using System.Xml.XPath; … // otevření balíčku: using (Package package = Package.Open(„diplomka.docx“, FileMode.Open, FileAccess.Read)) { // získání kolekce vztahů balíčku: PackageRelationshipCollection relationshipCollection = package.GetRelationships(); string strMainPartUri = ""; Uri uriMainPart = new Uri(""); // procházení kolekcí vztahů a najití Uri pro // MainPart (hlavní část balíčku): foreach (PackageRelationship rel in relationshipCollection) { if (rel.RelationshipType == "…/2006/relationships/officeDocument") { strMainPartUri = rel.TargetUri.ToString(); uriMainPart = new Uri(rel.TargetUri.ToString(), UriKind.Relative); break; } } // třída představující hlavní dokument: PackagePart mainPart = MyPackage.package.GetPart(uriMainPart); // získání XPathDocumentu představujícího hlavní dokument // balíčku:
50
API pro práci s dokumenty OOXML XPathDocument xMainDocument = new XPathDocument(mainPart.GetStream()); /* ... kód pro práci s xMainDocument */ // zavření balíčku package.Close(); }
4.2. Microsoft.Office.DocumentFormat.OpenXml.Packaging Součástí OpenXML Format SDK 1.0 je také API pro práci s dokumenty OOXML. Název jmenného prostoru pro prvky tohoto API je: Microsoft.Office.DocumentFormat.OpenXml.Packaging.
Tento jmenný prostor obsahuje velké množství tříd sloužících pro práci s dokumentem WordprocessingML, SpreadsheetML i PresentationML. Dokument WordprocessingML je reprezentován třídou WordprocessingDocument. Třída obsahuje speciální metody, uveďme jako příklad metodu AddMainDocumentPart(). Toto API jsem nepotřeboval používat, zmiňuji ho jenom pro úplnost. Jmenný prostor obsahuje přibližně 100 tříd, uveďme z nich např. DocumentSettingsPart, EndnotesPart, FooterPart, MainDocumentPart, NumberingDefinitionsPart, StyleDefinitionsPart, XmlSignaturePart. Pro pokročilejší zacházení s dokumenty OOXML bych doporučoval použití právě tohoto API. K podrobnějšímu prostudování Open XML Format SDK 1.0, které toto API obsahuje, doporučuji webovou stránku [15].
51
Praktická část
5. Praktická část
Úkolem této diplomové práce byla analýza formátu WordprocessingML a nalezení řešení pro převod tohoto formátu do formátu HTML. Praktická část obsahuje naprogramování tohoto konvertoru. Popíšu tedy výsledek praktické části své práce, uvedu postup, jak jsem konvertor programoval, jakých jsem při tom použil technologií a čeho jsem dosáhl. Naprogramovat dokonalý konvertor je náročná práce, proto také uvedu, čemu jsem se nemohl věnovat, co v konvertoru chybí a co by bylo užitečné doprogramovat. Mnohé užitečné informace, které jsem při programování využil, jsem se dozvěděl na webu [16], který je určen pro vývojáře pracující s OOXML.
5.1. Popis programu Tělo dokumentu WordprocessingML, stejně tak jako ostatní jeho části, je soubor formátu XML. Pro transformaci tohoto XML do HTML jsem se rozhodl využít technologie XSLT, neboť je jednoduchá a přímo určená k těmto transformacím. Nestačilo však vytvořit šablonu, která by popisovala transformaci jednoho souboru XML, neboť dokument obsahuje více souborů XML. Bylo proto nutné vytvořit program, který by tuto transformaci řídil. Tento program jsem vytvořil na platformě .NET, viz [11]. 5.1.1. Práce s balíčkem Jednotlivé části balíčku jsem získával pomocí tříd z API nacházejícím se v .NET Frameworku 3.0 ve jmenném prostoru System.IO.Packaging. Toto API popisuji v kapitole 4.1. Jednotlivé části balíčku se získávají jako stream, z něhož program čte daný XML soubor. Po balíčku se program pohybuje pomocí vztahů. Jednotlivé části balíčku ukládá MS Word vždy se stejným Uri, ale na to nelze spoléhat, protože názvy souborů s danou částí se mohou jmenovat libovolně a mohou mít v balíčku libovolné umístění. Proto je nejdříve ve vztazích balíčku potřeba najít, kde se nachází hlavní část balíčku a vztahy pro tuto část. Ve vztazích pro hlavní část se najde Uri pro části se styly, číslováním, tématy, nastavením, poznámkami pod čarou a vysvětlivkami. Všechny tyto části program při transformaci využívá (pokud jsou v dokumentu vytvořeny).
52
Praktická část 5.1.2. Transformace Program provádí dvě transformace: transformace hlavní části (standardně document.xml), vzniká konvertovaný HTML soubor index.html a transformace části se styly (standardně styles.xml), vzniká soubor s CSS styly styles.css. Tyto transformace vykonává procesor .NETu použitím metody Transform, což je metoda objektu třídy XslCompiledTransform. Metoda Transform má 14 různých přetížení, program používá metodu s těmito parametry: -
XPathDocument: představuje vstupní dokument, který má být transformován.
-
XsltArgumentList: seznam argumentů určených pro šablonu transformace, např. název stylu odstavce, podle kterého má být dokument rozdělován. Tento seznam může být doplněn o rozšiřující objekt, k jehož metodám lze při transformaci přistupovat.
-
XmlTextWriter: objekt zajišťující zápis do výstupního souboru. Při transformaci hlavní části jsem tento objekt nahradil objektem třídy MultiXmlTextWriter, který umí zapisovat do více souborů. Tuto třídu jsem převzal z [17]. Popis použití této třídy a výstupu do více souborů lze najít na webové stránce [18].
Procesor provádějící transformaci umí pracovat s transformačními šablonami XSLT verze 1.0. Zjednodušenou transformaci, která pracuje pouze se souborem obsahující hlavní část dokumentu, lze provést jakýmkoliv procesorem, který umí zpracovávat XSLT 1.0, např. Saxonem 4 . Spouštění tohoto procesoru je popsáno na webové stránce [19]. Pro transformaci se používá šablona MainPart.xslt. 5.1.3. Rozšiřující objekt transformace Vytvořil jsem objekt třídy Helper, který slouží k získávání informací z jiných částí balíčku, než je transformovaná část. Tento objekt se připojuje při transformaci hlavní části balíčku i při transformaci části se styly. Rozšiřující objekt obsahuje následující metody: ProcessImage
Je to metoda, která zpracovává obrázky. Vstupním parametrem metody je id vztahu mezi hlavním dokumentem a obrázkem. Metoda nalezne jméno obrázku, přečte stream tohoto obrázku a uloží ho do adresáře media. Metoda vrací název obrázku. 4
Ke stažení na http://saxon.sourceforge.net/
53
Praktická část Pokud je obrázek ve formátu WMF (nejpoužívanější vektorový formát obrázků na MS platformě), provádí se jeho konverze do bitmapového PNG, protože prohlížeč IE formát WMF neumí zobrazovat. Tuto konverzi provádí metoda .NET Frameworku. GetListInfo
Pomocí této metody se získávají potřebné informace o seznamu. Vstupními parametry je Id seznamu, úroveň seznamu a druh informace, který je potřeba získat. Získává se informace o druhu seznamu (číslovaný, odrážkový), o druhu číslování (čísla, velká nebo malá písmena, velká nebo malá římská písmena), o velikosti odsazení dané úrovně seznamu. Metoda také poskytuje startovní hodnotu čísla, jaká přísluší první položce seznamu. GetDefaultTabStops
Metoda vrací defaultní velikost tabulátorů. Tato hodnota je uložena v části balíčku Document Settings. GetThemeFont
Metoda zjišťuje font, jehož nastavení je uloženo v Theme Part. GetHyperlinkTarget
Vstupním parametrem metody je Id vztahu, jehož cílem je odkaz na externí objekt (například URL nějaké webové stránky). Metoda vrací text tohoto odkazu. GetBullettingDefinedInStyle
Tato pomocná metoda zjišťuje, že má daný styl odstavce definováno odrážkování. Při transformaci se u tohoto odstavce vytváří seznam pomocí elementu . GetFootnoteText resp. GetEndnoteText
Vstupním parametrem metod je Id vztahu, který spojuje hlavní dokument s poznámkou pod čarou uloženou v části Footnotes resp. s vysvětlivkou uloženou v části Endnotes. Metoda pak vrací text této poznámky resp. vysvětlivky. GetNumberingDefinedInStyle
Metoda pro daný styl odstavce (název stylu je vstupní parametr) vytváří číslování, které je definováno ve stylech. Nejčastěji se takto definuje číslování kapitol a podkapitol. V dokumentu víme pouze to, že je nadpis číslovaný, hodnotu čísla ale musíme určit sami. K vytvoření tohoto čísla před kapitolou nebo podkapitolou bylo proto nutné vytvořit tuto metodu. V konstruktoru rozšiřujícího objektu Helper program vytváří tabulku, ve které se ukládá číslování jednotlivých úrovní číslovaných stylů. Tato tabulka má čtyři sloupce: id seznamu,
54
Praktická část název stylu, úroveň odsazení a hodnotu udávající počet předchozích odstavců tohoto stylu této úrovně. Při transformaci metoda GetNumberingDefinedInStyle zjistí, zdali se jedná o odstavec s číslováním definovaným ve stylech a pokud ano, provede následující: zvýší o 1 počet odstavců daného stylu dané úrovně, vynuluje počet odstavců daného stylu všech nižších úrovní, z počtů odstavců daného stylu této a všech vyšších úrovní vytvoří číslo, které metoda vrátí a které se bude vypisovat před odstavcem. 5.1.4. Transformace hlavní části Šablonu, která popisuje transformaci hlavní části, jsem rozdělil do několika souborů. Tím jsem dosáhl větší přehlednosti a lepší orientace v šablonách. Hlavní důvod rozdělení šablon do souborů podle funkčnosti byl ten, aby bylo možné dané ucelené části doprogramovat. Mým cílem nebylo např. vytvářet šablony na transformaci prvků DrawingML, proto jsem vytvořil soubor DrawingML.xslt, do kterého lze časem tyto šablony doplnit. Soubor nyní obsahuje jenom základní šablony pro zobrazení obrázků. Šablony jsem rozdělil do těchto souborů: MainPart.xslt, ParagraphRun.xslt, Tables.xslt, DrawingML.xslt, VML.xslt a Translator.xslt. K transformaci se používá soubor MainPart.xslt, který v sobě obsahuje instrukci na použití ostatních souborů, např.: <xsl:include href="ParagraphRun.xslt"/>
Popis funkce jednotlivých šablon: MainPart.xslt
Stylesheet obsahuje dva parametry: první parametr určuje, zda má být dokument rozdělen podle oddílů; pokud ne, druhý parametr obsahuje seznam stylů odstavců, podle nichž se má dokument rozdělit. Dělení do více dokumentů se provádí pomocí rozšíření ze jmenného prostoru http://exslt.org/common, jehož elementy mají prefix exsl. Za tímto účelem jsem použil element <exsl:document>. Nejdůležitější atribut tohoto elementu je href, který určuje jméno souboru, do kterého má být výstup zapsán. Při dělení dokumentu podle oddílů vypadá použití elementu <exsl:document> následovně: <exsl:document indent="yes" method="html" encoding="UTF-8"> <xsl:attribute name="href"> <xsl:value-of select="concat($Counter, '.html')" />
55
Praktická část
Podrobný popis elementu <exsl:document> lze nalézt na webové stránce [20]. Při transformaci se postupuje tak, že se dokument čte sekvenčně po elementech (podrobněji popsáno v podkapitole 5.1.6), které jsou dětmi elementu <w:body> a na ně se aplikují naprogramované šablony. Je-li dokument dělen podle oddílů, tak pokud se narazí na element s vlastnostmi oddílu, následující element se transformuje již do nového souboru. Pokud se dělí podle stylů odstavce, tak narazíme-li se na odstavec „dělícího“ stylu, tak se od tohoto odstavce transformuje dokument do dalšího souboru. Vytvořil jsem šablonu, která k jednotlivým částem HTML dokumentů doplňuje navigaci. V každém souboru je odkaz na předchozí a na následující soubor. Soubor MainPart.xslt obsahuje také šablony na vytvoření poznámek pod čarou a vysvětlivek. Poznámky pod čarou i vysvětlivky jsou odkazy, jejichž cílem je reference, která na ně směřuje. Vysvětlivky se zapisují do samostatného souboru endnotes.html. Poznámky pod čarou jsou uvedeny na konci každého HTML dokumentu. V tomto souboru se také nacházejí šablony na zpracování jednoduchých a strukturovaných uživatelských polí. ParagraphRun.xslt
Tento soubor obsahuje šablony především s formátováním odstavců a runů. Šablona pro zpravování odstavce obsahuje test, jestli odstavec nepatří do seznamu. Pokud tomu tak je, vytvoří se HTML element (odrážkový seznam) nebo (číslovaný seznam) a tento element obsahuje jednotlivé položky seznamu - . Pokud je seznam přerušen odstavcem, který do seznamu nepatří, následující položky se zahrnou do seznamu nového. Pokud je seznam číslovaný, tak se nezačíná číslovat od 1, ale v číslování se pokračuje. Jiné konvertory takto přerušené seznamy konvertují na obyčejné odstavce bez seznamu, pouze před danou položku vytisknou příslušné číslo položky. Do takto vytvořeného seznamu při přidání nové položky dojde k nekonzistenci v číslování a je potřeba seznam ručně přečíslovat, proto jsem raději zvolil uvedené řešení. Při mém postupu při přidání nové položky v seznamu stačí upravit startovní číslo druhého seznamu. Při zpracování odstavce se také zjišťuje, jestli odstavec nezačíná tabulátorem. Tímto způsobem se v dokumentu často dělá odsazení. Tabulátory mohou být defaultní nebo definované uživatelem. V šabloně pro zpracování odstavce se spočítá, jak má být velká mezera na začátku řádku a do výsledného HTML se vygeneruje element <span> s odpovídající šířkou. Tabulátory, které jsou uvnitř textu, považuji v HTML za bezvýznamné, proto se nahrazují pouze mezerou. 56
Praktická část Dále se zde zpracovávají hyperlinky a jejich cíle, tzv. záložky a odkazy na poznámky pod čarou a vysvětlivky. Poznámky pod čarou a vysvětlivky jsem vylepšil tím, že se v textu při najetí na odkaz objeví jejich text. Toho jsem dosáhl „nastylováním“ pomocí CSS. Tables.xslt
Soubor obsahuje šablony, které se týkají tabulek. Jsou v něm šablony zpracovávající mřížku tabulky <w:tblGrid> (v HTML tomu odpovídá element ), formátování tabulky a formátování řádku a buňky tabulky. Speciální šablony jsou zkonstruovány pro řádek tabulky, ve které jsou sloučeny některé buňky. Je potřeba určit, kolik buněk náleží tomuto sloučení a v HTML potom sloučené buňky vynechat. DrawingML.xslt
Soubor obsahuje pouze šablonu na transformaci elementu reprezentujícího obrázek. Tento obrázek může být v dokumentu umístěn inline (v elementu <wp:inline>) nebo může být plovoucí (v elementu <wp:anchor>). Šablona nastaví pouze velikost obrázku a okraj kolem obrázku. Zpracování elementů DrawingML je záměrně odděleno do tohoto samostatného souboru, aby mohly být šablony pro zpracování DrawingML doplněny nezávisle na ostatních šablonách. VML.xslt
Opět téměř prázdný soubor připravený k budoucímu doplnění šablon pro zpracování elementů VML. Soubor nyní obsahuje pouze triviální šablony vypisující do tabulky obsah textového pole (element <w:txbxContent>) a text umístěný na křivce, např. Wordart. Translator.xslt
Šablony z tohoto souboru slouží jako překladače terminologie WordprocessingML do terminologie HTML. Uveďme si příklad: jednoduchá čára užitá na orámování tabulky se ve WordprocessingML nazývá „single“, pro HTML potřebujeme, aby se tato hodnota změnila na „solid“. Vytvoříme proto šablonu ConvertBorderStyle: <xsl:template name="ConvertBorderStyle"> <xsl:param name="value"/> <xsl:choose> <xsl:when test="$value='single'">solid <xsl:when test="$value='double'">double <xsl:when test="$value='triple'">double <xsl:otherwise>solid
57
Praktická část Při výpisu stylu čáry se zavolá tato šablona s parametrem „value“, jehož hodnotou bude výraz, který je potřeba přeložit (hodnota atributu w:val): <xsl:call-template name="ConvertBorderStyle"> <xsl:with-param name="value" select="@w:val" />
Podobné šablony pro překlad terminologie je možné nalézt v šabloně pro transformaci formátu WordML do HTML, kterou lze získat na webové stránce [14]. 5.1.5. Transformace části se styly Při vytváření souboru s kaskádovými styly styles.css se používají šablony ze souboru Styles.xslt. Transformuje se část balíčku se styly, která se standardně jmenuje styles.xml. Do souboru Styles.xslt je vložen odkaz na šablony v ostatních souborech, ze kterých se použijí šablony např. na formátování odstavce, runu, tabulky, atd. Kromě transformace jednotlivých stylů se vytváří také tzv. defaulty dokumentu. To jsou výchozí nastavení, která se mají použít, není-li u prvku nastaveno něco jiného. Tyto defaulty se nacházejí také v části balíčku se styly. Typickým příkladem defaultního nastavení je formátování odstavce: <w:spacing w:after="200" w:line="276" w:lineRule="auto"/>
Šablona vytvoří tomu odpovídající CSS styl, který bude použit na každý odstavec: P { line-height:1.15; margin-bottom:10pt; }
Ve WordprocessingML má každý odstavec nastavený nějaký styl. Pokud není nastaven, tak se předpokládá, že má tzv. defaultní styl. Tímto defaultním stylem bývá pro odstavec obvykle styl „Normální“. Ze všech čtyř druhů stylů („odstavec“, „run“, „tabulka“, „seznam“) bývá jeden z každého druhu označen jako defaultní. Tento styl vypíšeme v CSS stylech dvakrát: jednou s názvem stylu, podruhé bez názvu, aby se aplikoval na elementy, které nemají nastavený styl. Pokud styl „NormalniTabulka“, který formátuje buňku tabulky, bude označený jako defaultní, výstupem konvertoru budou následující styly: table td { padding-top:0px; padding-left:5px; padding-bottom:0px; padding-right:5px; } table.NormlniTabulka td { padding-top:0px; padding-left:5px; padding-bottom:0px;
58
Praktická část padding-right:5px; }
Kromě toho se ještě vypisují styly vlastních prvků, jako je třeba rámeček zobrazující text poznámky pod čarou nebo vysvětlivky. Při transformaci stylů jsem narazil na problém technologie CSS. V CSS neexistuje dědičnost stylů. Ve WordprocessingML se styly dědí, proto jsem musel transformaci upravit tak, aby styly obsahovaly i vlastnosti zděděné ze stylů jiných. Proto se v šabloně pro zpracování stylů nejprve zjistí, zda styl dědí z jiného stylu. Pokud ano, vypíší se nejprve zděděné styly, aby bylo formátování vypisováno ve správném pořadí a správně se použilo při vícenásobném nastavení stejné vlastnosti. Předtím, než se zpracují vlastnosti stylu, zavolá se šablona zpracovávající styl, ze kterého daný styl dědí: <xsl:if test="w:basedOn"> <xsl:apply-templates select="../w:style[@w:styleId = w:basedOn/@w:val]" mode="inheritance"/>
Šablona, která vypisuje zděděné formátování, obsahuje nejprve stejný test, který má zjistit, jestli tento nadřazený styl nedědí z dalšího stylu: <xsl:template match="w:style" mode="inheritance"> <xsl:if test="w:basedOn"> <xsl:variable select="w:basedOn/@w:val" name="BasedOnId"> <xsl:apply-templates select="../w:style[@w:styleId = $BasedOnId]" mode="inheritance"/>
Ve výsledném souboru styles.css se vypisují také komentáře, aby bylo zřejmé, co je nastavení příslušné danému stylu a co je nastavení zděděné ze stylu jiného. 5.1.6. Popis sekvenčního zapracovávání vstupního dokumentu Přímé potomky elementu <w:body> se zpracovávají nestandardním způsobem, proto mu věnuji tuto podkapitolu. Standardně se v XSLT napíší šablony pro jednotlivé elementy a tyto šablony je zpracují. Aby šlo dokument rozdělovat podle vybraných stylů nebo podle oddílů, prochází se dokument tak, že se zpracuje první element, otestuje se „podmínka rozdělení dle stylů nebo oddílů“ a stejným způsobem se zpracuje element následující. Postup popíšu nejprve při rozdělování podle oddílů, potom podle stylů. Pokud nemá být výstup rozdělen, postup je stejný jako při rozdělování podle stylů, program pouze nastaví neexistující styl. Protože se tento styl v dokumentu nenachází, bude celý výstup v prvním souboru. 59
Praktická část Dělení podle oddílů
Šablona pro element <w:body> obsahuje instrukci pro zpracování prvního svého podelementu: <xsl:apply-templates select="child::*[1]" mode="switch" />.
Šablona s módem „switch“ je klíčová, nyní ji popíšu. Šablona zpracovává první podelement elementu <w:body>. Pokud tento element zná (<w:tbl>, <w:p>, <w:sdt> a <w:bookmarkStart>), zavolá pro něj odpovídající šablonu. Šablona s módem „switch“ obsahuje test, jestli není zpracovávaný element posledním odstavcem daného oddílu (to se pozná tak, že element obsahuje „w:pPr/w:sectPr“). Pokud tomu tak je, následující element se zpracovává do nového souboru: <xsl:apply-templates select="following-sibling::*[1]" mode="DividingBySection" />.
Pokud se nedosáhne konce oddílu, zavolá se zpracování následujícího elementu: <xsl:apply-templates select="following-sibling::*[1]" mode="switch" />.
Šablona s módem „DividingBySection“ obsahuje přesměrování do nového souboru a již uvedenou instrukci pro zpracování daného elementu: <xsl:apply-templates select="." mode="switch" />. Dělení podle stylů
Šablona pro element <w:body> nejprve zpracovává elementy, které jsou před prvním „dělícím“ stylem. Zavolá se šablona pro zpracování prvního elementu: <xsl:apply-templates select="child::*[1]" mode="switch" />.
V šabloně s módem „switch“ se zjistí, jedná-li se o jeden ze známých elementů (<w:tbl>, <w:p>, <w:sdt> nebo <w:bookmarkStart>) a ten se zpracuje příslušnou šablonou, ve které se potom zavolá zpracování následujícího elementu: <xsl:apply-templates select="following-sibling::*[1]" mode="switch" />.
Tato instrukce se volá i v šabloně s módem „switch“, pokud je daný element neznámý. Před tímto voláním se ale v obou případech otestuje, jestli následující element není odstavec „dělícího“ stylu, v tom případě bychom tomto volání neprováděli. Prozatím byly zpracovány elementy před prvním odstavcem, který je „dělícího“ stylu. Šablona pro <w:body> potom obsahuje zpracování pouze odstavců „dělícího“ stylu:
60
Praktická část <xsl:apply-templates select="w:p[w:pPr/w:pStyle and contains($DividingStyle, w:pPr/w:pStyle/@w:val)]" mode="OnlyDividingStyle" />.
V šabloně <xsl:template match="w:p" mode="OnlyDividingStyle"> se přesměruje výstup do dalšího souboru a zpracujeme se daný odstavec: <xsl:apply-templates select="." mode="switch" />.
5.2. Ukázka výstupu První ukázkou bude konverze dokumentu s oficiální dokumentací WordprocessingML. Dokument jsem rozděloval podle nadpisu nejvyšší úrovně. Na začátku každého souboru jsou přidány odkazy na předchozí a následující soubor a na dokument index.html (tento dokument obsahuje seznam souborů a část dokumentu, která se nachází před prvním nadpisem, podle kterého se dokument rozděluje).
Obrázek 7: Ukázka výstupu a navigace mezi jednotlivými dokumenty
Druhá ukázka se týká zpracování poznámek pod čarou. Poznámky fungují jako oboustranné odkazy. Při najetí myší na odkaz se u něj zobrazí text poznámky.
61
Praktická část
Obrázek 8: Ukázka konverze poznámek pod čarou
5.3. Co konvertor neumí zpracovat Naprogramování konvertoru, který by dokázal správně převádět všechno, co lze v MS Wordu 2007 vytvořit, je rozsáhlejší práce přesahující možnosti diplomové práce. Proto jsem musel některé části vynechat a zpracovávat elementy pouze z WordprocessingML. Uvedu, s čím si naprogramovaný konvertor neumí poradit a co by bylo užitečné doprogramovat. S tímto budoucím doplněním a rozšířením jsem počítal, proto jsem se snažil, aby se tak dalo učinit co nejjednodušeji. Konvertor neumí zpracovávat elementy z DrawingML nebo VML. Z elementů DrawingML jenom nejjednodušším způsobem zpracovává obrázky a z VML pouze vypíše obsah textového pole. Do DrawingML patří i část balíčku s tématy, se kterými konvertor také nepracuje. Můžu uvést příklad zpracování textových polí. Textová pole, která jsou použita v této práci na začátku 3. kapitoly za účelem schematického vyjádření balíčku, by konvertor pouze vypsal tímto způsobem:
62
Praktická část
Obrázek 9: Ukázka konverze textových polí
Uživatel může do dokumentu WordprocessingML vložit vlastní XML značky (tzv. uživatelské XML) a dokonce je možné do balíčku vložit datový XML soubor. Lze vytvořit speciální strukturovaná pole a na ně potom z tohoto datového XML navázat data. Konvertor s uživatelským ani s datovým XML neumí pracovat. Stejně tak nelze snadno konvertovat dokumenty obsahující matematiku zapsanou pomocí elementů z MathML. Například při konverzi tohoto vzorce:
získáme následující výstup, protože konvertor při převodu matematiky vypisuje pouze text:
63
Praktická část
Obrázek 10: Konverze matematiky
Uvedené nedostatky by bylo vhodné odstranit a doprogramovat šablony, které by dokázaly tyto problémy zdárně vyřešit. Na druhou stranu je vznik uvedených nedostatků pochopitelný a souvisí do značné míry s možnostmi HTML. Kupříkladu HTML nezobrazuje rovnice; matematické vzorce se zobrazují nejčastěji pomocí obrázků, které by konvertor musel generovat. (Na to už existují automatické generátory.) V XHTML by ovšem bylo vhodnější vložit popis rovnic pomocí elementů jiného jmenného prostoru (MathML je standardizovaný W3C formát). Mnoho prohlížečů by to ale nedokázalo správně přečíst. Stejný problém se týká vektorové grafiky. Grafiku by asi bylo vhodné transformovat do SVG, ale opět zatím chybí podpora prohlížečů. Proto uvedené problémy proto nevidím tolik jako nedostatek konvertoru samotného, nýbrž nedostatečně zaběhnutou webovou technologii podporující práci s matematikou a vektorovou grafikou. Příloha 3 obsahuje seznam elementů, u kterých je uvedeno, zda je program umí konvertovat.
64
Závěr
Seznámil jsem se s novým standardizovaným formátem Office Open XML, jenž byl vyvinut s novou verzí balíku kancelářských aplikací MS Office 2007. Tento formát mě zaujal hned z několika důvodů: je otevřený, plně dokumentovaný, zdarma licencovaný a založený na formátu XML. Proto bylo vyvinutí formátu Office Open XML ku prospěchu nejenom vývojářům, ale především uživatelům. V dokumentech Office Open XML se používají tři základní značkovací jazyky: WordprocessingML, SpreadsheetML a PresentationML; detailně jsem se zaměřil na jazyk WordprocessingML, který se používá na ukládání dokumentů MS Wordu 2007. Velkou část textu této práce jsem věnoval formátu Office Open XML a značkovacímu jazyku WordprocessingML. Popisuji je zde poměrně rozsáhle, neboť obdobné detailní a přitom časově ne tak náročné čtení o tomto tématu je obtížné najít, v češtině dokonce nemožné. Oficiální dokumentace, která obsahuje kompletní popis formátu Office Open XML a značkovacích jazyků, které se v něm používají, zvídavého čtenáře odradí už svým několika tisíci stránkovým rozsahem. Nově získané poznatky jsem využil při vývoji konvertoru dokumentů WordprocessingML do formátu HTML. Tento konvertor je také hlavním přínosem mé práce. Vysvětlil jsem, proč mi nevyhovují existující konvertory a proč jsem se tedy pustil do programování konvertoru vlastního. Uvedené nevýhody se mi podařilo odstranit, ovšem za tu cenu, že jsem se nemohl plně věnovat ostatním jazykům, kterých dokument WordprocessingML také využívá. K těmto jazykům patří zejména jazyk DrawingML pro zápis grafických elementů, jazyk VML pro zápis vektorové grafiky a jazyk MathML pro zápis rovnic a matematických symbolů. Tohoto omezení jsem si byl vědom, a proto jsem konvertor programoval tak, aby bylo jednoduché v budoucnu doplnit XSLT šablony na konverzi elementů výše uvedených značkovacích jazyků. Zdrojový kód HTML, který je výstupem naprogramovaného konvertoru, je stručný, přehledný, avšak ne na úkor vynechání informací o formátování dokumentu. Podařilo se mi také vyřešit problém s dlouhými dokumenty. Při konverzi lze parametrem nastavit, máli být dokument rozdělen podle oddílů. Častěji však bude využívána možnost rozdělit dokument podle nadpisů. Konvertoru je možné předat parametr obsahující seznam stylů odstavců (libovolné množství, proto lze rozdělovat podle nadpisů více úrovní) a konvertor podle tohoto nastavení vytvoří několik výstupních souborů. Kromě toho vytvoří hlavní soubor s obsahem, soubor se styly a soubor s vysvětlivkami. V každém souboru, který vznikl při výskytu „dělícího“ stylu odstavce, se vytvoří navigace pro jednoduchý pohyb mezi soubory. 65
Do budoucna počítám s rozšířením konvertoru o šablony zpracovávající elementy patřící do jiného značkovacího jazyka, než je WordprocessingML. V současné podobě umožňuje konvertor dobře převádět naprostou většinu dokumentů MS Wordu 2007 do formátu HTML.
66
Zdroje
[1] ECMA-376, Standard. Part 1 - Fundamentals. [Online] Prosinec 2006. www.ecmainternational.org/publications/files/ECMA-ST/Office Open XML Part 1 (PDF).zip. [2] —. Part 2 - Open Packaging Conventions. [Online] Prosinec 2006. www.ecmainternational.org/publications/files/ECMA-ST/Office Open XML Part 2 (PDF).zip. [3] —. Part 3 - Primer. [Online] Prosinec 2006. www.ecmainternational.org/publications/files/ECMA-ST/Office Open XML Part 3 (PDF).zip. [4] —. Part 4 - Markup Language Reference. [Online] Prosinec 2006. www.ecmainternational.org/publications/files/ECMA-ST/Office Open XML Part 4 (PDF).zip. [5] —. Part 5 - Markup Compatibility and Extensibility. [Online] Prosinec 2006. www.ecma-international.org/publications/files/ECMA-ST/Office Open XML Part 5 (PDF).zip. [6] ECMA-376. Office Open XML File Formats. [Online] http://openiso.org/Ecma/376/. [7] Vugt, Wouter Van. Open XML Explained. Redmond : Microsoft, 2007. [8] Overview of WordprocessingML. [Online] Microsoft, Redmond, 2003. http://rep.oio.dk/Microsoft.com/officeschemas/wordprocessingml_article.htm. [9] Kosek, Jiří. XSLT v příkladech. Vše o www. [Online] http://www.kosek.cz/xml/xslt/index.html. [10] Holzner, Steven. XSLT příručka internetového vývojáře. Praha : Computer Press, 2002. 8072266004. [11] Northrup, Tony a Wildermuth, Shawn. .NET Framework 2.0 Application Development Foundation. Redmond, Washington : Microsoft Press, 2006. 0-7356-2277-9. [12] Conversion of OpenXML (WordProcessingML) to HTML using XSLT:. OpenXML Developer. [Online] Microsoft, 2006. http://openxmldeveloper.org/articles/333.aspx. [13] MSDN. Visual Studio 2008 Developer Center. Word Application-Level Add-in Development. [Online] Microsoft, 2008. http://msdn.microsoft.com/enus/library/bb386164.aspx. [14] Tkachenko, Oleg. On transforming WordML to HTML again. *Online+ Únor 2004. http://www.tkachenko.com/blog/archives/000153.html. 67
[15] MSDN. Welcome to the Open XML Format SDK 1.0. Office Developer Center. [Online] Microsoft, 2008. http://msdn.microsoft.com/en-us/library/bb448854.aspx. [16] OpenXML Developer. [Online] Microsoft, 2006. http://openxmldeveloper.org/. [17] Tkachenko, Oleg. MultiXmlTextWriter class. [Online] http://www.tkachenko.com/dotnet/multixmltextwriter.html. [18] MSDN. Producing Multiple Outputs from an XSL Transformation. .NET Framework Developer Center. [Online] Microsoft, 2008. http://msdn.microsoft.com/enus/library/ms950784.aspx. [19] Running XSLT from the Command Line. XSLT and XQuery Processing. [Online] Saxonica. http://www.saxonica.com/documentation/using-xsl/commandline.html. [20] Stewart, Craig, a další. exsl:document. Rozšíření exsl. [Online] http://www.exslt.org/exsl/elements/document/index.html.
Pozn.: Všechny odkazy jsou platné k červnu 2008.
68
Příloha 1: Ukázka formátování tabulky ve WordprocessingML
Pro ilustraci uvažujme následující tabulku, jejíž vzhled je níže popsán pomocí jazyka WordprocessingML: Sloučené buňky
F i t
T e x t
Jedna
Tři Dvě
Jednotlivé elementy, které určují vzhled této tabulky, jsem popsal, proto nebude problém se zorientovat v kódu, který tuto tabulku představuje: <w:tbl> <w:tblPr> <w:tblCellSpacing w:w="56" w:type="dxa"/> <w:tblBorders> <w:top w:val="double" w:sz="4" w:space="0" w:color="auto"/> <w:left w:val="double" w:sz="4" w:space="0" w:color="auto"/> <w:bottom w:val="double" w:sz="4" w:space="0" w:color="auto"/> <w:right w:val="double" w:sz="4" w:space="0" w:color="auto"/> <w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto"/> <w:insideV w:val="single" w:sz="4" w:space="0" w:color="auto"/> <w:jc w:val="center"/> <w:tblLayout w:type="fixed"/> <w:tblCellMar> <w:left w:w="10" w:type="dxa"/> <w:right w:w="10" w:type="dxa"/> <w:tblGrid> <w:gridCol w:w="2924"/> <w:gridCol w:w="2859"/> <w:gridCol w:w="2122"/>
69
<w:tr> <w:trPr> <w:trHeight w:hRule="exact" w:val="454"/> <w:tblCellSpacing w:w="56" w:type="dxa"/> <w:tc> <w:tcPr> <w:tcW w:w="5951" w:type="dxa"/> <w:gridSpan w:val="2"/> <w:vAlign w:val="bottom"/> <w:p><w:r><w:t>Sloučené buňky <w:tc> <w:tcPr> <w:tcFitText/> <w:p><w:r><w:t>FitText <w:tr> <w:trPr> <w:trHeight w:val="1134"/> <w:tblCellSpacing w:w="56" w:type="dxa"/> <w:tc> <w:tcPr> <w:tcMar> <w:top w:w="113" w:type="dxa"/> <w:right w:w="113" w:type="dxa"/> <w:textDirection w:val="tbRl"/> <w:p><w:r><w:t>Jedna <w:tc> <w:tcPr> <w:shd w:val="clear" w:color="auto" w:fill="D9D9D9"/> <w:vAlign w:val="center"/> <w:p><w:r><w:t>Dvě <w:tc> <w:p><w:r><w:t>Tři
70
Příloha 2: Nejpoužívanější jmenné prostory
V práci se vyskytují elementy z různých jmenných prostorů, proto zde vyjmenuji nejpoužívanější jmenné prostory, jejich standardní prefixy a stručný popis elementů z těchto jmenných prostorů. Prefix
w
Jm. prostor
http://schemas.openxmlformats.org/wordprocessingml/2006/main
Popis
elementy WordprocessingML
Prefix
r
Jm. prostor
http://schemas.openxmlformats.org/officeDocument/2006/relationships
Popis
elementy pro zápis vztahů v balíčku
Prefix
a
Jm. prostor
http://schemas.openxmlformats.org/drawingml/2006/main
Popis
elementy DrawingML – zápis grafiky
Prefix
wp
Jm. prostor
http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing
Popis
elementy DrawingML – zápis grafiky používané ve WordprocessingML
Prefix
pic
Jm. prostor
http://schemas.openxmlformats.org/drawingml/2006/picture
Popis
elementy DrawingML – práce s obrázky
Prefix
m
Jm. prostor
http://schemas.openxmlformats.org/officeDocument/2006/math
Popis
elementy MathML – zápis matematiky
Prefix
v
Jm. prostor
urn:schemas-microsoft-com:vml
Popis
elementy VML – vektorový popis grafiky
71
Příloha 3: Stav převodu elementů WordprocessingML do HTML
Příloha obsahuje seznam relevantních elementů, které se používají v dokumentech WordprocessingML. V těchto dokumentech se používají elementy z různých jmenných prostorů, jejichž seznam si lze prohlédnout v příloze 2. Seznam je rozdělen na dvě části: „hlavní“ elementy (elementy nepatřící do vlastností) a „formátovací“ elementy (tj. elementy z vlastností odstavce, runu, tabulky, řádku a buňky tabulky). U každého elementu je uvedeno, jak s ním umí konvertor zacházet. „Hlavní“ elementy Element
Popis
Konvertor zpracovává
Poznámka
w:background
pozadí dokumentu
ne
převážně bývá popsáno vektorově
w:body
tělo dokumentu
ano
w:bookmarkEnd
záložka – konec
ne
w:bookmarkStart
záložka – začátek
ano
w:br
zalomení
ano
w:control
objekt VML vložený do balíčku
ne
w:cr
nový řádek
ano
w:customXml
uživatelské XML
ne
w:document
kořenový element dokumentu
ano
w:drawing
objekt DrawingML
částečně
w:endnoteReference
vysvětlivka
ano
w:fldSimple
jednoduché pole
částečně
w:footnoteReference
poznámka pod čarou
ano
w:gridCol
sloupec tabulky
ano
w:hyperlink
ano
ano
w:ilvl
úroveň seznamu
ano
w:movie
vložené video
ne
72
začátek a konec záložky netvoří kontejner, proto se konec záložky neuvažuje
pouze se zobrazí obrázek
pouze se zpracovává jeho run
Element
Popis
Konvertor zpracovává
w:numId
id seznamu
ano
w:object
objekt vložený do balíčku
ne
w:p
odstavec
ano
w:pict
grafický element
částečně
w:pPr
vlastnosti odstavce
ano
w:r
run
ano
w:rPr
vlastnosti runu
ano
w:sdt
uživatelské pole
ano
w:sdtContent
obsah uživ. pole
ano
w:sectPr
vlastnosti oddílu
částečně
w:sym
speciální symbol
ne
w:t
text
ano
w:tab
tabulátor
částečně
w:tbl
tabulka
ano
w:tblGrid
mřížka tabulky
ano
w:tblPr
vlastnosti tabulky
ano
w:tblStyle
styl tabulky
ano
w:tc
buňka tabulky
ano
w:tcPr
vlastnosti buňky
ano
w:tr
řádek tabulky
ano
w:trPr
vlastnosti řádku
ano
w:txbxContent
obsah textového pole
ano
wp:anchor
float objekt
částečně
wp:extent
velikost objektu
ano
wp:inline
inline objekt
částečně
pouze se zobrazí obrázek
a:blip
odkaz na grafický objekt
částečně
používá se pouze cesta k obrázku
m:oMath
zápis matematiky
částečně
vypisuje se pouze text
m:oMathPara
zápis matematiky
částečně
vypisuje se pouze text
m:r
run s matematikou
ano
73
Poznámka
vypisuje se pouze obsah textového pole nebo text WordArtu
používá se pouze k identifikaci hranic oddílu
uvažuje se, pouze pokud je na začátku řádku (před textem)
pouze se zobrazí obrázek
Element
Popis
Konvertor zpracovává
Poznámka
v:textpath
text na křivce
částečně
pouze výpis textu ve WordArtu
Poznámka
„Formátovací“ elementy Element
Popis
Konvertor zpracovává
w:b
tučné písmo
ano
w:bdr
ohraničení runu
ne
dva runy s touto vlastností vedle sebe by bylo potřeba spojit do jednoho rámečku
w:between
rámeček mezi stejnými odstavci
ne
formátování předchozího nebo následujícího odstavce se nesleduje
w:bidi
obrácení layoutu (zprava doleva)
ne
w:bidiVisual
obrácení layoutu tabulky (zprava doleva)
ne
w:bottom
dolní čára rámečku
ano
w:caps
velká písmena
ano
w:cnfStyle
podmíněné formátování
částečně
w:color
barva písma
ano
w:contextualSpacing
odstranění mezery mezi odstavci stejného stylu
částečně
pokud má odstavec tuto vlastnost, odstraní se mezery bez ohledu na předchozí nebo následující styl
w:dstrike
dvojité přeškrtnutí
ano
nahradí se jednoduchým přeškrtnutím
w:effect
efekt písma
ano
nahradí se kurzívou
w:em
zvýraznění runu pomocí znaku
ne
w:fitText
daná šířka runu
ne
w:gridAfter
vynechání sloupce tabulky
ne
w:gridBefore
vynechání sloupce tabulky
ne
w:gridSpan
horizontální sloučení buněk
ano
74
uvažuje se pouze první a poslední řádek nebo sloupec
Element
Popis
Konvertor zpracovává
w:highlight
zvýraznění
ano
w:hMerge
horizontální sloučení buněk
ne
w:i
kurzíva
ano
w:ind
odsazení odstavce
ano
w:insideH
vnitřní horizontální čáry v tabulce
částečně
w:insideV
vnitřní vertikální čáry v tabulce
částečně
w:jc
zarovnání odstavce
ano
w:kern
automatický kerning
ne
w:left
levá čára rámečku
ano
w:numPr
vlastnosti seznamu
ano
w:outline
obrys písma
ano
w:pBdr
orámování odstavce
ano
w:position
pozice textu
ano
w:pStyle
styl odstavce
ano
w:rFonts
font runu
ano
w:right
pravá čára rámečku
ano
w:rtl
text zprava doleva
ne
w:shadow
stín písma
ano
w:shd
stínování
ano
w:smallCaps
kapitálky
ano
w:spacing
mezery v odstavci i v runu
ano
w:strike
přeškrtnutí
ano
w:sz
velikost písma
ano
w:tab
definice tabulátoru
částečně
w:tabs
definice tabulátorů
ano
w:tblBorders
rámeček tabulky
ano
w:tblCellMar
okraje v buňkách tabulky
částečně
w:tblCellSpacing
mezera mezi buňkami
ano
w:tblInd
odsazení tabulky
ano
75
Poznámka
MS Word používá w:gridSpan
pokud je nastaven w:insideH nebo w:insideV, tak se nastavuje celé tabulce border=“1“
nahradí se tučným písmem
význam elementu závisí na kontextu
uvažuje se, pouze pokud je na začátku řádku (před textem)
okraje v buňce (levý, pravý, horní, dolní) se nahradí jednou společnou hodnotou
Element
Popis
Konvertor zpracovává
w:tblLayout
layout tabulky
ano
w:tblLook
podmíněné formátování tabulky
ne
w:tblW
šířka tabulky
ano
w:tcBorders
rámeček kolem buňky
ano
w:tcFitText
upravení šířky textu, aby se vešel do buňky
ne
w:tcMar
okraje v buňce
ano
w:tcW
šířka buňky tabulky
ano
w:textAlignment
vertikální zarovnání textu odstavce
ne
w:textDirection
směr textu
ne
w:tl2br
diagonální čára v buňce
ne
w:top
horní čára rámečku
ano
w:tr2bl
diagonální čára v buňce
ne
w:trHeight
šířka řádku tabulky
ano
w:u
podtržení
ano
w:vAlign
vertikální zarovnání
ano
w:vanish
skrytý text
ano
w:vertAlign
vertikální zarovnání
ano
w:vMerge
vertikální sloučení buněk
ano
w:w
rozšíření / zúžení textu
ne
w:webHidden
skrytý text pro web
ano
76
Poznámka