同じ記述を繰り返す際に、一括にまとめて定義して記述をして再利用する場合に用います。
DTD&インスタンスの記述例
<?xml version="1.0" encoding="Shift_Jis"?>
<!DOCTYPE sample [
<!ELEMENT sample (title,p,p1,table)>
<!ELEMENT table (tr*)>
<!ELEMENT tr (th*|td*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT p (#PCDATA)>
<!ELEMENT p1 (#PCDATA)>
<!ELEMENT th (#PCDATA)>
<!ELEMENT td (#PCDATA)>
]>
<sample>
<title>タイトルです。</title>
<p>要素を一つにまとめにしておきます。</p>
<p1>このようにフォントが変わります。</p1>
<table>
<tr>
<th>テーブルヘッダ</th>
<th>セルごとに出力が変化します。</th>
</tr>
<tr>
<td>テーブルデータ</td>
<td>テーブルのセルを作成する際によく使います。</td>
</tr>
</table>
</sample>
DSSSLスタイルシート記述例
<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN">
<style-sheet>
<style-specification>
<style-specification-body>
;以下にDSSSLを記述してください。
;マクロを作成はdefineで定義して要素を一つにまとめる。
;フォントの指定
(define *font-title* ;「*font-title*」として定義する
(style font-size: 20pt
font-weight: 'bold
quadding: 'center))
(define *font-type1* ;「*font-type1*」として定義する
(style font-size: 16pt
quadding: 'center))
(define *font-type2* ;「*font-type2*」として定義する
(style font-size: 12pt
font-posture: 'italic
quadding: 'end))
;テーブルセルのラインを指定
;セルに線を引く
(define *cell-border-true* ;「*cell-border-true*」として定義する
(style cell-before-row-border: #t
cell-after-row-border: #t
cell-before-column-border: #t
cell-after-column-border: #t))
;セル内のマージン(余白)2mmの指定
(define *cell-margin-2* ;「*cell-margin-2*」として定義する
(style cell-before-row-margin: 2mm
cell-after-row-margin: 2mm
cell-before-column-margin: 2mm
cell-after-column-margin: 2mm))
(root ;全体を指定
(make simple-page-sequence ;シンプルなレイアウトを行う
page-width: 210mm ;用紙サイズの幅「A4」の大きさ
page-height: 297mm ;用紙サイズの縦「A4」の大きさ
left-margin: 20mm
right-margin: 30mm
top-margin: 30mm ;それぞれのマージン(余白)の指定
bottom-margin: 30mm
language: 'JA ;日本語の記述
)
)
(element title
(make paragraph
use: *font-title* ;define定義で「font-title」として定義した要素を用いる
space-after: 20pt))
(element p
(make paragraph
use: *font-type1* ;define定義で「font-type1」として定義した要素を用いる
space-after: 20pt))
(element p1
(make paragraph
use: *font-type2* ;define定義で「font-type2」として定義した要素を用いる
space-after: 20pt))
;テーブルの全体を指定する。
(element table ;テーブルのタグを指定
(make table ;テーブルの作成を指定
display-alignment: 'center ;出力の場所を指定 (左('start:デフォルト),中央('center),右('end))
table-border: #t ;テーブルの周りに線を引く(線を引く(#t),線を引かない(#f:デフォルト))
line-thickness: 0.5pt ;線の太さを指定
(make table-column ;テーブルカラム(縦の領域)の作成を指定
width: 80mm) ;テーブルカラムの幅を指定
(make table-column
width: 100mm)
(process-children))) ;出力を促す指定
;テーブルのロウ(テーブルの横の領域)を指定する
(element tr
(make table-row))
;テーブルのセルを指定
(element th
(make table-cell
;define定義された要素を連続して用いる。「merge-style」を用いると定義した要素を幾つも用いることが可能となる
;「*cell-border-true*」「*cell-margin-2*」「*font-type1*」の3つの定義を用いている。
use: (merge-style *cell-border-true* *cell-margin-2* *font-type1*)
)
)
(element td
(make table-cell
;define定義された要素を連続して用いる。「merge-style」を用いると定義した要素を幾つも用いることが可能となる
;「*cell-border-true*」「*cell-margin-2*」「*font-type2*」の3つの定義を用いている。
use: (merge-style *cell-border-true* *cell-margin-2* *font-type2*)
)
)
;以上にDSSSLを記述指定ください。
</style-specification-body>
</style-specification>
</style-sheet>
「define」で定義を行い、「use」で定義された要素を用います。「merge-style」を用いると定義した要素を幾つも用いることになります。
この際に「define」の中に定義可能な要素は継承特質と呼ばれる要素のみとなります。
