印刷メディア上で文書を表現する際には, ユーザのナビゲーションに課題がある. 通常,印刷メディア上での文書は, コンテンツの構造化を行うこと,構造に序数を付与することで, ユーザのナビゲーションを支援しようとする. たとえば,「章」という構造を作成したり, メディアにもともと備わっている「ページ」という構造を利用して, そこに番号を付与する. こうした方法により, 「ページ番号」の引用による目次・索引・本文中でのナビゲーション, 「章見出し」の引用による目次・本文中でのナビゲーションなどが行われる.
こうした印刷メディア上での文書が,アンケート調査を目的とした 調査票である場合には,「ページ番号」「章見出し」よりも, さらに細粒度のナビゲーション機能が必要となる.たとえば:
このステップでは,印刷メディア特有の概念である「ページ番号」は後回しとし, 他メディアでも一般的に必要であると言える「番号つき章見出し」「設問番号」を 付与する処理を行う.
XForms1.0のフォームコントロール要素にはxforms:label要素が 必須であるが,SQSではラベルを単純な通し番号 として割り振る形をデフォルトとするので, このxforms:label要素の記述を省略できるものとする.
すなわち,このxslスクリプトは, XForms1.0のフォームコントロール要素 (xforms:input, xforms:textarea, xforms:select, xforms:select1)に xforms:label要素が存在しない場合に, <xforms:label><sqs:counter/></xforms:label> を挿入する機能を持つ.xforms:label要素が存在する場合には, そのフォームコントロール要素については何もしない.
なお,後述のembd-link.xslにより,xforms:labelの内容を相互参照をしたい場合には, <xforms:label sqs:id="ほげほげ"><sqs:counter/></xforms:label> というように,xforms:label要素を省略せずに書き,sqs:id属性の指定をすること. なお,このように,xforms:label要素を省略して書いた部分と省略せずに書いた部分とが混在しても, cmpl-label.xsl,embd-link.xslの動作に支障はない.
XForms1.0のフォームコントロールにはref属性が必須であるが, SQSでは単純な通し番号をもとに自動生成したXPath式を 付与することにする. このとき,XPathが指し示すXForms Modelは, 設問の意味構造を反映するものではないことに注意 (意味構造は,別途にフォームコントロールなどから 生成されるRDFで付与する予定).
フォームのパターン | XPath | XPathの例 |
---|---|---|
input, textarea, select1 | a[設問通し番号] | a[12] |
select | a[設問通し番号]/v値 | a[23]/v2 |
matrix-forms > (input, textarea, select1) | a[設問通し番号]/r[設問内行番号]/c[設問内列番号] | a[33]/r[4]/c[2] |
matrix-forms > select | a[設問通し番号]/r[設問内行番号]/c[設問内列番号]/v値 | a[38]/r[5]/c[3]/v1 |
XHTML2.0/XForms1.0文書に加えられたSQS要素を, 文書構造に応じた「通し番号」の文字列表現に置き換える機能を 持つスタイルシート.
XSLでは,XSL-FO仕様にはない機能・FOプロセッサで未実装な機能は, XSLTなどを用いたプリプロセスで,直接的に文字列表現や表現構造を 生成してやる必要がある.その一例として,ここでは, CSSのcontentプロパティを用いた機能を模したものを 便宜的に提供するためのXSLTを提供する.
このスタイルシートは,cmpl-label.xslスタイルシートの後, embed-link.xslスタイルシートの前に使うことを意図している.
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
xhtml:h |
sqs:prefix(CDATA), sqs:format(CDATA), sqs:suffix(CDATA) |
PCDATA | 文書の中で,xhtml:sectionについての通し番号nを得て, 「<prefix><n><suffix><内容モデル>」という表記を作る. |
sqs:counter |
sqs:prefix(CDATA), sqs:format(CDATA), sqs:suffix(CDATA) |
EMPTY | 文書の中で,FormControls についての通し番号nを得て,「<prefix><n><suffix>」という表記を作る. |
XSLTパラメータ名 | 型 | デフォルト値 |
---|---|---|
xhtml.h-attribute..sqs.prefix | CDATA | 問 |
xhtml.h-attribute..sqs.format | CDATA | 1 |
xhtml.h-attribute..sqs.suffix | CDATA | . |
sqs.counter-attribute..sqs.prefix | CDATA | ( |
sqs.counter-attribute..sqs.format | CDATA | 1 |
sqs.counter-attribute..sqs.suffix | CDATA | ) |
SQS要素を置き換えて,相互参照関係を作成する機能を持つスタイルシート.
このスタイルシートは,LaTeXにおける\labelと\refに対応して, sqs:id属性と,sqs:ref/@sqs:idref による相互参照を実現する. 参照先の内容が参照元に埋め込まれることになる. そのため,このスタイルシートを使う前に, embed-counter.xslなどの内容埋め込み系のスタイルシートを 実行しておくといったように,使う順番に注意する必要がある.
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
* | sqs:id*(ID) | PCDATA | この要素の内容を参照用に登録する |
sqs:ref | sqs:idref*(IDREFS) | EMPTY | sqs:labelで登録しておいた参照内容を表示する |
XForms1.0の要素のうち,label, hint, help, alart 要素を, 視覚的に区別できるような形で表記するために, XHTML2.0のtableを用いることで, それぞれの要素をレイアウトする機能を持つスタイルシート.
変換後には,xforms:label要素の内容などを, xformsフォームコントロールの外側に抽出して,表記することを行う (XML文書としては冗長な内容になる).
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
sqs:pageset | PCDATA | まとめて表示すべきページをグループ化(このタグの境界で改ページが起こる) |
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
xhtml:div | class("warning") | PCDATA | 記入上の注意など,回答者への伝達事項を指定(枠線で囲まれたテキストブロック表示) |
xhtml:strong | PCDATA | 強調表示(太字) | |
xhtml:span | class("underline" | "bold"| "small") | PCDATA | underlineでアンダーライン表示,boldで太字表示,smallで小さなフォントで表示 |
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
xforms:label | PCDATA | 設問を表す短い名前(ex.設問の通し番号).SQSの利用においては, cmpl-label.xslによって補完される部分なので,ユーザが直接に 入力する必要はあまりない. | |
xforms:hint | sqs:prefix(CDATA), sqs:display("inline" | "none"), sqs:suffix(CDATA) | PCDATA | 回答者のための質問文 |
xforms:help | sqs:prefix(CDATA), sqs:display("inline" | "none"), sqs:suffix(CDATA) | PCDATA | 回答者のための補助的な情報. 「〜すべし」の提示(複数選択か,単一選択かetc.) |
xforms:alart | sqs:prefix(CDATA), sqs:display("inline" | "none"), sqs:suffix(CDATA) | PCDATA | 回答者のための注意事項. 「〜べからず」の提示(回答がinvalidにならないための注意) |
XSLTパラメータ名 | 型 | デフォルト値 |
---|---|---|
xforms.hint-attribute..sqs.prefix | CDATA | |
xforms.hint-attribute..sqs.display | ("inline" | "none") | inline |
xforms.hint-attribute..sqs.suffix | CDATA | |
xforms.help-attribute..sqs.prefix | CDATA | ( |
xforms.help-attribute..sqs.display | ("inline" | "none") | inline |
xforms.help-attribute..sqs.suffix | CDATA | ) |
xforms.alart-attribute..sqs.prefix | CDATA | ※ |
xforms.alart-attribute..sqs.display | ("inline" | "none") | inline |
xforms.alart-attribute..sqs.suffix | CDATA |
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
xforms:input | xforms:textarea | xforms:ref(XPathExpression), sqs:width(Number), sqs:height(Number), sqs:prefix(CDATA), sqs:suffix(CDATA) |
UI Common | 自由記述欄.widthとheightで紙面上でのサイズをpxで指定, prefixとsuffixで自由記述欄の前後にCDATAを表示 |
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
xforms:select | xforms:select1 | xforms:ref(XPathExpression), sqs:cols(Number) |
UI Common, (xforms:item)* | 単一選択肢または複数選択肢. colsにより選択肢欄の紙面上での表示カラム数を指定 |
xforms:item | sqs:colspan(Number), sqs:input(Boolean) | xforms:label, xforms:value | 選択肢. colspanにより選択肢の紙面上での占有カラム数を指定. input="true"のとき, 選択肢を自由記述欄として読み取り(「その他」など) |
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
xforms:range | xforms:start*(Number),xforms:end*(Number), xforms:step*(Number), sqs:width*(Number), sqs:tick*(Number) |
UI Common, (xforms:indicator)* |
startでフォームの開始値, endでフォームの終端値, stepでフォームの間隔, widthでフォーム要素の表示領域の横幅, tickで目盛の間隔 |
sqs:indicator | sqs:value*(Number) | PCDATA | valueで目盛の値, 内容で目盛のラベル |
XFormsへの拡張として, 複数の設問ラベルと,複数のXForms1.0要素を表形式でレイアウトする ためのsqs:matrixforms要素に対応する.
sqs:matrix-forms要素内での回答の値は, "表ref/行ref/列ref"の形式のXPathに バインドされる.
要素 | 属性 | 最小内容モデル | 説明 |
---|---|---|---|
sqs:matrix-forms | xforms:ref(XPathExpression) | xforms:label*, sqs:row-array, sqs:column-array | 質問を表形式でレイアウトする部分のルート要素. レイアウトされた全体についてのラベル等を付与することができる. |
sqs:row-array | (xforms:group)* | 質問を表形式でレイアウトするときの行要素.
フォームコントロールを行方向に配置する要素. フォームコントロールの行グループにラベル等を付与することができる. 行要素であるxforms:group要素を子に持つ. | |
sqs:column-array | (xforms:label|UI Common)* |
フォームコントロールを列方向に配置する要素. フォームコントロールの列グループにラベル等を付与することができる. 列要素であるフォームコントロール要素を子に持つ. |
入力されるTable Layouted XForms Documentには, メディア非依存な表現サイズ指定のための, sqs:width, sqs:height, sqs:cols, sqs:colspan属性が 指定されているものとする.
一般に普及しているWebブラウザでフォームに回答できるようなXHTML1.0を変換生成する. XHTML2.0要素のうち互換性のある要素は同じlocalnameのままXHTML1.0要素に置換する. 互換性のない要素は,対応するXHTLM1.0要素に置換する. また,XForms1.0のうち具体的なフォームコントロール要素は, XHTML1.0のform要素セットに変換される.
PXForms.xslは,XForms1.0 のフォームコントロール要素を,印刷メディア対応のXForms1.0サブセット 仕様である PXForms に変換する機能を持つスタイルシートである.
PXForms とは Print Media Aware XForms の略である. PXFormsは,各種のXFormsフォームコントロール要素を, XFormsのサブセットに xforms:metadata要素を追加することで拡張したものとして定義される. Print Media Aware XFormsに変換後のxforms:metadata には, 変換前のxforms構造が保持される.
SQSソースファイルを入力として,中間的に XHTML2.0 / Print Media Aware XForms を生成し,さらに FOX + XSL-FOに変換し,最終的なPDFを出力するためのスタイルシート. 出力内には,設問と解答欄が混載された調査票原稿として表現される. また,スキャン画像からマークを認識するためのメタデータが, PDFしおりとして付与される.
SVGにより,解答欄にはマーク欄が, ページ上下にはスキャン時に位置合わせをするための 基準マークが表現される.
SQSソースファイルを入力として, PXFormsToFO.xslの出力結果の見た目をブラウザ上でプレビューするための XHTML1.0を出力するスタイルシート.
SQSソースファイルを入力として, ブラウザ上のFormとして回答を記入するための XHTML1.0を出力するスタイルシート.
EMPTY | 空要素 |
---|---|
PCDATA | Parsed Charactor Data |
CDATA | Charactor Data |
ID | ID |
IDREFS | IDREFS |
Boolean | 真偽値("true" | "false") |
Number | 数値 |
XPathExpression | XPath表現 |
UI Common | xforms:hint | xforms:help | xforms:alart |