ENGLISH | JAPANESE |
$Id: step5.sdoc 1.7 2000/04/14 12:40:02 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/xmlns/relaxCore"> <interface/> <elementRule role="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/xmlns/relaxCore"> <interface> <export label="foo"/> </interface> <elementRule role="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/xmlns/relaxCore"> <interface> <export label="foo"/> </interface> <elementRule role="foo"> <ref label="bar"/> </elementRule> <tag name="foo"/> <elementRule role="bar" type="emptyString"/> <tag name="bar"/> </module>
interface
が空でない場合前節の例では,参照される側のモジュールのinterface
要素は空でした.次のように,interface
要素に子要素を追加してみます.
<module moduleVersion="1.2" relaxCoreVersion="1.0" targetNamespace="" xmlns="http://www.xml.gr.jp/xmlns/relaxCore"> <interface> <export label="bar"/> </interface> <elementRule role="bar" type="emptyString"/> <tag name="bar"/> </module>
この場合には,インクルードされる側のモジュールにあるinterface
要素の内容が,インクルードする側のモジュールのinterface
要素に追加されます.この例では次のようになります.
<module moduleVersion="1.2" relaxCoreVersion="1.0" targetNamespace="" xmlns="http://www.xml.gr.jp/xmlns/relaxCore"> <interface> <export label="foo"/> <export label="bar"/> </interface> <elementRule role="foo"> <ref label="bar"/> </elementRule> <tag name="foo"/> <elementRule role="bar" type="emptyString"/> <tag name="bar"/> </module>
STEP 5で,大規模なモジュールも管理できるようになりました.RELAX!