LOTUS DOMINO の XML


DTD を読む
文書型定義 (Document type Definition (DTD)) は、拡張可能マークアップ言語 (Extensible Markup Language (XML)) タグの内容と階層を記述します。組織は、この XML タグを使用してプラットフォーム全体で共有するデータを定義します。DTD は次の項目から構成されます。
DTD のさまざまな宣言の完全なリストと説明については XML Standard Recommendations の Web サイト (http://www.w3.org/TR/REC-xml) を参照してください。

どのテキストエディタを使用しても Lotus Domino DTD ファイルを表示できます。Lotus Notes をインストールする際にデフォルト値を変更していない場合、ファイルのパスは Lotus/Notes/domino_6_0.dtd です。

要素要素はタグで、次のように定義されます。
<!ELEMENT tagname ( content-model ) >

tagname はタグの名前です。タグの名前は大文字と小文字を区別します。content-model は要素内に表示できる内容を説明します。ネストされたタグを含めることもできます。要素は開始タグと終了タグの間で使われます。たとえば Lotus Domino DTD の viewentry 要素は、次のように定義されています。

<!ELEMENT viewentry ( entrydata* )>

この要素は XML の出力では次のように使用されます。

<viewentry children="3">

<entrydata columnnumber="1">

<text> Joe Smith </text>

</entrydata>

</viewentry>

内容モデルを構築するとき、次の演算子を使用します。


次の例は、内容モデルを構築するときの演算子の使い方を示しています。

<!ELEMENT acl ( role*, aclentry+, logentry* )>

この例では、<acl> 要素には、任意の数の <role> 要素、続いて 1 つ以上の <aclentry> 要素、続いて任意の数の <logentry> 要素の順に含まれます。

次は演算子の別の例です。

<!ELEMENT text ( #PCDATA | break )* >

このとき、<text> 要素には任意の数のプレーンテキストまたは <break> 要素が任意の順序で含まれます。 #PCDATA は解析済みの文字データです。つまり、この文字データは余分な空白を認識しない、アンパサンドなどの文字を &amp; のように文字エンティティで表す必要があるプレーンテキストです。次の表に、内部エンティティ文字を示します。これらの文字は XML で事前定義されており、解析済み文字データに使用するときは指定された XML 形式で表さなければなりません。
文字XML 表現
< (より小さい)&lt;
> (より大きい)&gt;
' (アポストロフィ)&apos;
" (引用符)&quot;
& (アンパーサンド)&amp;
#PCDATA は複数の選択肢の最初になければなりません。それぞれの選択肢には、その全体にアスタリスクが付けられています。詳しくは、「エンティティ」を参照してください。

属性要素の属性は、次の規則に従って宣言します。
<!ATTLIST tagname
attr1type1default_value1
attr2type2default_value2
...
>

tagname 要素に対する属性が、種類とデフォルト値とともに定義されています。

次の例では、タグ名が book である要素を定義します。

<!ATTLIST book
titleCDATA#REQUIRED
isbnCDATA#IMPLIED
cover(hard|paper)#IMPLIED
format( bound|looseleaf|scroll|parchment )"bound"
>

上の例では <book> に対して title、isbn、cover、format の 4 つの許可された属性が定義されています。<book> に対して他に ATTLIST 宣言がない場合は、これら 4 つのみが許可された属性になります。他はいずれも不正な属性です。title 属性には任意の値を設定できますが、default_value が #REQUIRED なので、必須の値です。title 属性のない <book> 要素は、この DTD によると無効です。isbn 属性には任意の値を設定できますが、省略可能です。cover 属性は、「hard」または「paper」の 2 つのうちいずれかの値を取ります。その他の値は不正ですが、属性を省略することもできます。format 属性は 4 つのうちいずれかの値を取ります。省略された場合は、妥当性を検証するパーサーによって "bound" が値として与えられます。これは format="bound" が XML の内容に実際に表示されたのと同じです。

すべての属性は、次の表にあるように、本来は文字列です。
属性値説明
CDATA未解析の文字データ。任意のテキスト文字列を意味します。
NMTOKEN英字、数字、ハイフン、アンダースコア、コロンから構成される単一の名前トークン。
NMTOKENS空白で区切られた名前トークンのリスト。
ID文書内の要素のインスタンス識別名。2 つの ID が同じ名前を共有することはできません。
( a | b | c )"a" または "b" または "c"。デフォルト値として次のいずれかを指定します。
  • "a" のように、列挙されている選択肢の中の 1 つ。
  • #REQUIRED。文書では列挙されている選択肢の中から 1 つを指定しなければならないことを意味します。
  • #IMPLIED。値を指定する必要がないことを意味します。
#IMPLIED省略可能。値を指定する必要はありません。アプリケーションによりデフォルト値が指定されます。
#REQUIRED文書では値を指定しなければなりません。デフォルト値はありません。
'literal'文書で値が指定されない場合に使用するデフォルト値。
#FIXED 'literal'使用するデフォルト値。文書で値が指定される場合、その値はこの固定値に等しくなければなりません。
属性値は文字列なので、XML では常に引用符で囲みます。ATTLIST 宣言の属性は順不同です。(これは XML データで順番がないのと同じです)。DTD を読みやすくするために空白が使われます。

EntitiesXML エンティティには 3 つの種類があります。


XML 文書では内部エンティティの参照が可能です。たとえば、DTD で次のような内部エンティティを宣言します。

<!ENTITY productName "2000 Calendar">

このとき、この内部エンティティを .xml ファイルで次のように参照します。

<response>Thank you for purchasing the &productName; from us.</response>

これは、2001 年 1 月に DTD を更新して &productName; の値を "2001 Calendar" に変更すれば、このエンティティを参照するすべての XML 文書にその変更が反映されることを意味します。

Lotus Domino DTD で定義されるエンティティは、パラメータエンティティです。パラメータエンティティは、DTD の内部だけで参照するために作成されるエンティティです。このエンティティを使用することでコードの再利用性が高まり、DTD のサイズが縮小されます。.xml ファイルではパラメータエンティティを参照できません。

Lotus Domino DTD エンティティは、次のように宣言されたマクロとして機能します。

<!ENTITY macroname "macrocontent" >

たとえば、
<!ENTITY% string"CDATA" >
<!ENTITY% book.formats"bound|looseleaf|scroll|parchment" >
<!ENTITY% book.covers"hard|paper" >
上記のエンティティは次のように使用されます。

<!ATTLIST book
title%string;#REQUIRED
isbn%string;#IMPLIED
cover( %book.covers; )#IMPLIED
format( %book.formats; )"bound"
>

%book.formats; エンティティはフォーマットオプションのリストとして定義されており、book 要素の属性リスト定義内のリストを置換します。エンティティの名前はパーセント記号とセミコロンで囲まれ、内容は C 言語のマクロのように挿入されます。エンティティを使用してフォーマットオプションのリストを表すと、このエンティティを複数回使用できるので、DTD の効率が向上します。たとえば、この DTD の中に book 要素のほかに manual 要素がある場合、マニュアルがソフトカバーでのみ提供される点だけが異なり、使用できるフォーマットオプションは同じであれば、manual 要素の属性リストを定義するときに %book.formats; エンティティを再利用できます。

コメントDTD 内のコメントは次のように記号で囲みます。
<!-- 2 つのダッシュ以外はコメントテキストです。 -->

関連項目