$Id: step5.html 1.6 2000/02/24 11:35:46 murata Exp $
大きすぎるモジュールは管理するのが大変です。STEP 5は、モジュールを いくつかのファイルに分割して管理するための機能を説明します。
200の要素型をもつDTDでRELAXで表現すると仮定します。なお、この程度の 大きさのDTDはいくつも存在します。RELAXでは、各要素型ごとにelementRule とtagがそれぞれ必要とします。一つが平均3行としても1200行になります。 文書化を積極的に行えば3000行ぐらいの長さになることも 考えられます。これは、一つのファイルに格納するにはいささか長すぎます。
DTDのときは、外部パラメタ実体を用いて、大規模なDTDを分割して管理し ていました。RELAXでも、大規模なモジュールを分割するための機構が必要に なります。
include
要素RELAXでは、他のモジュールをinclude
要素によって参照する
ことができます。include
要素は参照されたモジュールの本体に
よって置き換えられます。
include
要素の使用例を考えてみます。まず、インクルード
される側のモジュールをつぎに示します。
<module moduleVersion="1.2" relaxCoreVersion="1.0" targetNamespace="" xmlns="http://www.xml.gr.jp/2000/relaxCore"> <elementRule pred="bar" type="emptyString"/> <tag name="bar"/> </module>
このモジュールには、bar
に関する
elementRule
とtag
要素があります。
interface
要素は空要素です。このモジュールは
bar.rlx
に格納されているものとします。
次に、このモジュールを参照して取り込む側のモジュールを示します。
<module moduleVersion="1.2" relaxCoreVersion="1.0" targetNamespace="" xmlns="http://www.xml.gr.jp/2000/relaxCore"> <interface> <export labels="foo"/> </interface> <elementRule pred="foo"> <ref label="bar"/> </elementRule> <tag name="foo"/> <include moduleLocation="bar.rlx" /> </module>
このモジュールには,foo
に関する
elementRule
とtag
が記述されています.モジュー
ルの最後にあるinclude
要素は,moduleLocation
属性でbar.rlx
を指定しています。
include
要素は,参照されているモジュールの本体
(module
要素の内容のうち,interface
以降)に
よって置き換えられます.この例では,つぎのように置き換えられます.
<module moduleVersion="1.2" relaxCoreVersion="1.0" targetNamespace="" xmlns="http://www.xml.gr.jp/2000/relaxCore"> <interface> <export labels="foo"/> </interface> <elementRule pred="foo"> <ref label="bar"/> </elementRule> <tag name="foo"/> <elementRule pred="bar" type="emptyString"/> <tag name="bar"/> </module>
interface
が空でない場合前節の例では,参照される側のモジュールのinterface
要素は
空でした.次のように,interface
要素に子要素を追加してみま
す.
<module moduleVersion="1.2" relaxCoreVersion="1.0" targetNamespace="" xmlns="http://www.xml.gr.jp/2000/relaxCore"> <interface> <export labels="bar"/> </interface> <elementRule pred="bar" type="emptyString"/> <tag name="bar"/> </module>
この場合には,インクルードされる側のモジュールにある
interface
要素の内容が,インクルードする側のモジュールの
interface
要素に追加されます.この例では次のようになります.
<module moduleVersion="1.2" relaxCoreVersion="1.0" targetNamespace="" xmlns="http://www.xml.gr.jp/2000/relaxCore"> <interface> <export labels="foo"/> <export labels="bar"/> </interface> <elementRule pred="foo"> <ref label="bar"/> </elementRule> <tag name="foo"/> <elementRule pred="bar" type="emptyString"/> <tag name="bar"/> </module>
STEP 5で,大規模なモジュールも管理できるようになりました。RELAX!
mura034@attglobal.net