5.4. DTDとDSSSLスタイル指定の記述例

<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>>