<DTDの例>
<!ELEMENT report − − (front, body)>
<!ELEMENT front − − (title, author, date)>
<!ELEMENT body − − (chapter*)>
<!ELEMENT title − − (#PCDATA)>
<!ELEMENT author − − (name, position)>
<!ELEMENT name − − (#PCDATA)>
<!ELEMENT position − − (#PCDATA)>
<!ELEMENT date − − (year, month, day)>
<!ELEMENT year − − (#PCDATA)>
<!ELEMENT month − − (#PCDATA)>
<!ELEMENT day − − (#PCDATA)>
<!ELEMENT chapter − − (ctitle, section+)>
<!ELEMENT ctitle − − (#PCDATA)>
<!ELEMENT section − − (sectitle, (para | list | figure | table)*)>
<!ELEMENT sectitle − − (#PCDATA)>
<!ELEMENT para − − (#PCDATA)>
<!ELEMENT list − − (item+)>
<!ELEMENT item − − (#PCDATA)>
<!ELEMENT figure − − (ftitle)>
<!ATTLIST figure
file ENTITY #REQUIRED
width CDATA #REQUIRED
height CDATA #REQUIRED>
<!NOTATION EPS SYSTEM "eps">
<!ELEMENT ftitle − − (#PCDATA)>
<!ELEMENT table − − (ttitle?, column+, row+)>
<!ELEMENT ttitle − − (#PCDATA)>
<!ELEMENT column − o EMPTY>
<!ATTLIST column
width CDATA #REQUIRED>
<!ELEMENT row − − (cell+)>
<!ELEMENT cell − − (#PCDATA)>
<!ATTLIST cell
rowspan CDATA #IMPLIED
colspan CDATA #IMPLIED
colnum CDATA #IMPLIED>
<DSSSLスタイル指定の記述例>
<!DOCTYPE style−sheet PUBLIC "−//James Clark//DTD DSSSL Style Sheet//EN">
<style−sheet>
<style−specification>
<style−specification−body>
(define *a4−width* 210mm) ;A4のサイズを定義
(define *a4−height* 297mm)
(define *text−style* ;本文用スタイルを定義
(style font−family−name: "Ryumin Light"
font−size: 10pt
line−spacing: 15pt
quadding: ’justify))
(define *caption−style* ;キャプション用スタイルを定義
(style font−family−name: "GothicBBB Medium"
font−size: 8pt
line−spacing: 12pt
font−weight: ’bold
quadding: ’center))
(element report ;最上位の要素
(make sequence ;表紙部分と本文部分をまとめる
(process−matching−children "front")
(process−matching−children "body")))
(element front ;表紙部分のページレイアウト
(make simple−page−sequence
page−height: *a4−height*
page−width: *a4−width*
left−margin: 3cm
right−margin: 3cm
top−margin: 5cm
bottom−margin: 5cm
(make sequence
font−family−name: "Ryumin Light"
;表紙の内容を一括で指定するスタイル
quadding: ’center)))
(element title ;タイトル
(make paragraph
space−before: 5cm
font−size: 24pt
line−spacing: 36pt
font−weight: ’bold))
(element author ;著者
(make sequence
font−size: 16pt ;authorの子要素name,position
を一括で指定するスタイル
line−spacing: 24pt))
(element name ;著者名
(make paragraph
space−before: 2cm))
(element position ;所属
(make paragraph
space−before: 1cm))
(element date ;日付
(make paragraph
space−before: 1cm
font−size: 16pt
(process−matching−children "year") ;「year年month月day日」の順に並び替え
(literal "")
(process−matching−children "month")
(literal "")
(process−matching−children "day")
(literal "")))
(element body ;本文部分のページレイアウト
(make simple−page−sequence
page−height: *a4−height*
page−width: *a4−width*
left−margin: 3cm
right−margin: 3cm
bottom−margin: 3cm
top−margin: 3cm
footer−margin: 1cm
center−footer: (page−number−sosofo) ;フッタ中央部分にページ番号表示
(process−children)))
(element chapter ;章
(make sequence ;章の内容一括指定スタイル
font−family−name: "yumin Light"))
(element ctitle ;章のタイトル
(make paragraph
break−before: ’page ;章見出しの前で改ページ
space−before: 1cm
space−after: 1cm
font−size: 18pt
line−spacing: 27pt
font−weight: ’bold
quadding: ’start
(literal (number−>string (ancestor−child−number "chapter")) " ")
;章の通し番号
(process−children)))
(element sectitle ;節のタイトル
(make paragraph
space−before: 1cm
font−family−name: "GothicBBB Medium"
font−size: 12pt
line−spacing: 18pt
font−weight: ’bold
quadding: ’start
(literal (number−>string (ancestor−child−number "section")) " ")
;節の通し番号
(process−children)))
(element para ;段落
(if (first−sibling?> (current−node))
(make paragraph ;見出しの直後の段落
use: *text−style*) ;本文用スタイル使用
(make paragraph ;その他の段落
first−line−start−indent: 10pt ;第1行をインデント
use: *text−style*)))
(element item ;箇条書き
(make paragraph
use: *text−style* ;本文用スタイル使用
start−indent: 20pt ;2文字分インデント
(literal "・") ;行頭に"・"を付加
(process−children)))
(element figure ;画像
(make display−group ;画像と画像のタイトルをグループ化
keep: ’page ;同じページ内に配置
(let* ((entity−name (attribute−string "file"))
;属性fileの値(実体名)を文字列
にして変数entity−nameに代入
(notation−name (entity−notation entity−name))
;実体の表記法名を文字列にして
変数notation−nameに代入
(width (attribute−string "width"))
;属性widthの値を文字列にして
変数widthに代入
(height (attribute−string "height")))
;属性heightの値を文字列にして
変数heightに代入
(make external−graphic
display?: #t ;行外領域となる外部グラフィック
display−alignment: ’center ;中央揃えで配置
scale: ’max
max−width: (* 1cm (string−>number width))
;属性widthの値をcm単位の長さにして指定
max−height: (* 1cm (string−>number height))
;属性heightの値をcm単位の長さにして指定
entity−system−id: (entity−generated−system−id entity−name)
;画像のファイル名
notation−system−id: (notation−system−id notation−name)))
;画像の表記法名
(process−matching−children "ftitle")))
(element ftitle ;画像のタイトル
(make paragraph
use: *caption−style* ;キャプション用スタイルを使う
(literal "図"
(number−>string (element−number (parent (current−node))))
". ") ;通し番号を付加
(process−children)))
(element table ;表
(make display−group ;表のタイトルと表をグループ化
keep: ’page ;同じページ内に配置
(process−matching−children "ttitle")
(make table
display−alignment: ’center ;中央揃えで配置
table−border: #t
(process−matching−children "column") ;表の列を内容に
(process−matching−children "row")))) ;表の行を内容に
(element ttitle ;表のタイトル
(make paragraph
use: *caption−style* ;キャプション用スタイルを使用
(literal "表"
(number−>string (element−number (parent (current−node))))
". ") ;タイトルに通し番号を付加
(process−children)))
(element column ;表の列
(make table−column
width: (* 1cm (string−>number (attribute−string "width")))))
;属性widthの値から列の幅を求める
(element row ;表の行
(make table−row))
(define (col−number colnum) ;列番号を指定するための手続き定義
(if (or (not colnum) (string=? colnum ""))
(child−number)
(string−>number colnum)))
;属性colnumが指定されていないか、内容が空の場合セルの要素番号を返す。
;指定されている場合、colnumの内容を数値に変換する。
(define (n−spanned span) ;抜くセルの数を指定するための手続き定義
(if (or (not span) (string=? span ""))
1
(string−>number span)))
;属性rowspanまたはcolspanが指定されていないか、内容が空の場合、1を返す。
;指定されている場合、spanの内容を数値に変換する。
(element cell ;表セル
(let ((colnum (attribute−string "colnum"))
;属性colnumの値を文字列にして変数colnumに代入
(rowspan (attribute−tring "rowspan"))
;属性rowspanの値を文字列にして変数rowspanに代入
(colspan (attribute−string "colspan")))
;属性colspanの値を文字列にして変数colspanに代入
(make table−cell
column−number: (col−number colnum)
;col−numberを使って変数colnumから値を求める。
n−rows−spanned: (n−spanned rowspan)
;n−spannedを使って変数rowspanから値を求める。
n−columns−spanned: (n−spanned colspan)
;n−spannedを使って変数colspanから値を求める。
cell−before−row−border: #t ;行の境界線を指定
cell−before−column−border: #t ;列の境界線を指定
cell−before−row−margin: 0.1cm ;セル内の余白を上下左右それぞれに指定
cell−after−row−margin: 0.1cm
cell−before−column−margin: 0.1cm
cell−after−column−margin: 0.1cm
(make paragraph ;セル内容へのスタイル指定
font−size: 10pt
line−spacing: 15pt
quadding: ’center))))
</style−specification−body>
</style−specification>
</style−sheet>
<<prev next>>