タグ別アーカイブ: 構造化文書

XSLTを学ぶ (1) XMLのツリーモデルとXPath/XSLTのツリーモデルではルートの意味が違う

先月『スタイルシート開発の基礎』[1]という本を出版しました。この本は、副題に「XMLとFOで簡単な本を作ってみよう」とあるとおりXSLTの実践学習本です。現在、弊社の社内でも、初心者が集まって、この本を使ってXSLTの学習をはじめたところです[2]。私もメンバーの一人です。

『スタイルシート開発の基礎』のはじめにには「XSLT/XPathの知識はない」人が本書の対象とあります。私もXSLTを本格的に学ぶのは初めてですので、本書の想定読者にあてはまりそうです。

素直に読めば、この本だけで理解できるのかもしれませんが、折角ですので、他の参考資料や仕様書をにらみ合わせて楽しみながらお勉強。そこで、折角学んだことを整理して、紹介したいと思います。すでにご存知の方には、初歩的なお話と思いますが、『スタイルシート開発の基礎』の補足として役立てていただけるかもしれません。

資料としては次を見ています。

・『XSLTバイブル』(Michael Kay著、インプレス社、2002年1月発行)
・XSL Transformations (XSLT) Version 1.0(W3C Recommendation 16 November 1999)[3]
・XML Path Language (XPath) Version 1.0(W3C Recommendation 16 November 1999, revised 7 September 2015)[4]

さて、今回勉強し始めて知ったのですが、整形式XMLのツリーモデルとXSLT/XPathのツリーモデルはまったく違うんですね。

XML1.0では、整形式XML文書はルートが文書の実体ツリーの起点であり、XMLプロセサはルートから処理を始めます。さらに見ますと、ルートまたは文書要素と呼ばれる要素が唯一あるとされています。ルート要素は他の要素の内容になりません(つまり親を持ちません)が、他の要素は親を持ちます[5]。整形式XML文書はルート要素(文書要素)を起点とする要素のツリー構造になります。

しかし、XPathのデータモデルは、ノードという概念が中核です。ノードの種類として次の7つがあります。
・ルートノード(root nodes)
・要素ノード(element nodes)
・テキストノード(text nodes)
・属性ノード(attribute nodes)
・名前空間ノード(namespace nodes)
・処理命令ノード(processing instruction nodes)
・コメントノード(comment nodes)

原文でroot nodesと複数形になっているのが気になりますが、XPath仕様の5.1 ルートノード(Root Node)には、「ルートノードはツリーのルートであり」、「文書要素ノードはルートノードの子である」、「ルートノードの子供として、処理命令、処理命令のためのコメント、プロローグの中の文書要素の後のコメントノードがある。」とあります。

また、XSLT仕様の3 データモデル(Data Model)を見ますと、XSLTでは、ソース文書、スタイルシート、結果文書に同じデータモデルを使います。それらはXPathのデータモデルを基本として、少しだけ変更したものです。

・整形式のソースXML文書を読み込んでソースツリーを構築するときは、ルートノードの下にテキストノードはなく、唯一の要素ノードを子として持ちます。また、DOMなどの他の方法でソースツリーを作るときは、ソースツリーに対する制約は結果ツリー同様に緩められます。

・文書スタイルシートのツリーを構築するときは処理命令とコメントノードを無視します。

・結果ツリーでは、ルートノードへの制約が緩められており、子供として要素ノードを含む、任意のノードの系列をもつことができます。これにより、整形式XMLでない出力を作ることができます。

ですので、たぶん、XSLTでは整形式でないようなソースXMLでも処理できそうです[5]

[1] 『スタイルシート開発の基礎』
[2] アマゾンPODの便利な利用法
[3] XSL Transformations (XSLT) Version 1.0
[4] XML Path Language (XPath) Version 1.0
[5] Extensible Markup Language (XML) 1.0 (Fifth Edition) 2 Documents
[6] 余談です。『スタイルシート開発の基礎』の著者(神様)に、Michael Kayさんの本にそんなことが書いてある、と話しましたら、仕様書のどこに書いてあるかを示せ! と言われました。それは、3.1 Root Node Childrenの二つ目の段落の後半のセンテンスにあります。

次回:
XSLTを学ぶ(2)ノードツリーとノードの親子、子孫関係


構造化文書とは何か?

新年、明けましておめでとうございます。

弊社では、2016年の課題のひとつとして、構造化文書の普及促進に重点的に取り組む予定です。構造化文書とは、文書の構造をマークアップした文書のことです。

では、文書の構造とはなんでしょうか? どんな意義があるのでしょうか?

文書構造の一つに、階層構造があります。2015年の暮れにJEPAのebookpediaで「階層構造とは」という用語解説が発表されました。この用語解説は人気抜群なのだそうです。

ebookpedia「階層構造とは」

主に電子書籍の階層構造について説明したものですが、簡単に整理すると次のようになるでしょう。

1.階層構造とは、章・節・項のような、つまり、大見出し、中見出し、小見出しのような見出しをつけること

2.階層構造は、XHTMLの<section>, <h1>~<h6>のようなタグで付ける。

3.階層構造の見出しによって、文章の持つ意味や重要度を差別化でき、読み手に意味の重要度が伝わる。また、目次を作ることができる。

4.タグに対して、スタイルシート(CSS)で重み付けと視覚的表現を紐づける。CSSを書き換えることで、見出しの色やフォントを切り替えられる。

この用語説明で、階層構造とはなにか? どんな意義があるかが大雑把に分かります。電子書籍のような簡単な出版物では、この程度の理解で十分かもしれません。しかし、電子書籍についていえば、eboookpediaでも少し触れられていますが、階層構造のような簡単な概念さえ、様々な見解があって必ずしも完全に合意されているわけではないようです。

文書の著者・編集者・制作者は、何らかの構造を念頭に置いているでしょう。これを暗黙ではなくて、明示的なルールでマークアップしたときに、構造化文書となります。タグはマークアップ手段のひとつです。

ところで、階層化以外の構造もあります。例えば、DITA(Darwin Information Architecture)では、技術文書を対象にして、構造についてもっと高度に定義しています。高度な構造は作成に手間がかかりますが、それなりの効果もあります。DITAにおける構造については、後日別途検討する予定です。

続きは:
1. あらゆる文書には構造がある?
2. 多くの文書は目的に応じた構造を持つ。その構造を明示化したのが構造化文書

関連ブログ(CASブログ)
CAS記法のマークアップがなぜ必要なのかー図版とキャプションの例
コンテンツの構造化とは何か? 構造化の目的、手段は? Word文書のスタイル付けとマークアップの関係

[参考資料](用語解説)
1.マークアップとは
2.DITA


Pages: Prev 1 2