数値地図25000DTD



 データーの規則性は処理プログラムには重要です。文書の規則、 構造(スキーム)を定義しているのがDTDです。

 XML文書をIEで閲覧した時、エラーメッセージが出ませんでした。IEは Ver5からXMLに対応しています。規格チェックをする機能も あります。でもそれは基本機能だけ。DTDに定義してある文法は チェックできません。DTDには基本ルール以外の細かな仕様が 書けます。確かにそうなのか、確認してみましょう。このデーター を作った人の考えどうりの構造になっているか見てみましょう。
<?xml version='1.0' encoding='Shift_JIS' ?> <!-- 数値地図25000(空間データ基盤)用DTD --> <!ENTITY % standard.declarations SYSTEM 'Standard.dtd' > %standard.declarations; <!ENTITY % spatial.declarations SYSTEM 'Spatial.dtd' > %spatial.declarations; <!ENTITY % temporal.declarations SYSTEM 'Temporal.dtd' > %temporal.declarations; <!ENTITY % directPositioning.declarations SYSTEM 'DirectPositioning.dtd' > %directPositioning.declarations; <!ENTITY % indirectPositioning.declarations SYSTEM 'IndirectPositioning.dtd' > %indirectPositioning.declarations; <!ENTITY % standard_post.declarations SYSTEM 'Standard_post.dtd' > %standard_post.declarations; <!-- 共通要素の定義 --> <!ELEMENT Namae %CharacterString; > <!ELEMENT KokudoBango %Integer; > <!ELEMENT Hyoko %CharacterString; > <!ELEMENT Jusho %CharacterString; > <!ELEMENT Jotai %CharacterString; > <!ELEMENT Yuryo %CharacterString; > <!ELEMENT Fukuin %CharacterString; > <!ELEMENT Shubetsu %CharacterString; > <!ELEMENT Shurui %CharacterString; > <!-- 基準点 --> <!ENTITY % KijunTen_Shurui 'Shurui' > <!ENTITY % KijunTenElements 'Namae*, Hyoko, point, period?' > <!ENTITY % KijunTenAttributes '' > <!ELEMENT KijunTen (%KijunTen_Shurui; ,%KijunTenElements;) > <!ATTLIST KijunTen %IM_ObjectAttributes; %KijunTenAttributes; > <!-- メッシュ標高 --> <!ENTITY % MeshHyokoElements '(Hyoko, point)' > <!ENTITY % MeshHyokoAttributes ' ' > <!ELEMENT MeshuHyoko %MeshHyokoElements; > <!ATTLIST MeshuHyoko %IM_ObjectAttributes; %MeshHyokoAttributes; > <!-- 公共施設 --> <!ENTITY % KokyoShisetsu_Shurui 'Shurui ' > <!ENTITY % KokyoElements 'Namae*, Jusho, point, period?' > <!ENTITY % KokyoAttributes ' ' > <!ELEMENT KokyoShisetsu (%KokyoShisetsu_Shurui;,%KokyoElements;) > <!ATTLIST KokyoShisetsu %IM_ObjectAttributes; %KokyoAttributes; > <!-- 地名 --> <!ENTITY % Chimei_Shurui 'Shurui ' > <!ENTITY % ChimeiElements 'Namae*, point' > <!ENTITY % ChimeiAttributes ' ' > <!ELEMENT Chimei (%Chimei_Shurui;,%ChimeiElements;) > <!ATTLIST Chimei %IM_ObjectAttributes; %ChimeiAttributes; > <!-- 水系 --> <!ENTITY % Suikei_Shubetsu 'Shubetsu ' > <!ENTITY % SuikeiElements 'period?'> <!ENTITY % SuikeiAttributes ' ' > <!ELEMENT Suikei (%SuikeiElements;)> <!ATTLIST Suikei %IM_ObjectAttributes; %SuikeiAttributes; > <!-- 河川区間 --> <!ENTITY % KasenKukanElements 'Namae*,HashiRef*,TonneruRef*, curve,edge' > <!ENTITY % KasenKukanAttributes ' ' > <!ELEMENT KasenKukan (%Suikei_Shubetsu;,%KasenKukanElements;,%SuikeiElements;) > <!ATTLIST KasenKukan %IM_ObjectAttributes;%KasenKukanAttributes; > <!-- 河川節点 --> <!ENTITY % KasenSettenElements 'point,node' > <!ENTITY % KasenSettenAttributes ' ' > <!ELEMENT KasenSetten (%KasenSettenElements;,%SuikeiElements;) > <!ATTLIST KasenSetten %IM_ObjectAttributes; %KasenSettenAttributes; > <!-- 橋 --> <!ELEMENT DoroHashi EMPTY> <!ATTLIST DoroHashi %IM_ObjectReferenceAttributes; > <!ELEMENT TetsudoHashi EMPTY> <!ATTLIST TetsudoHashi %IM_ObjectReferenceAttributes; > <!ELEMENT KasenHashi EMPTY> <!ATTLIST KasenHashi %IM_ObjectReferenceAttributes; > <!ENTITY % HashiElements 'Namae*, DoroHashi*,TetsudoHashi*,KasenHashi*, period?' > <!ENTITY % HashiAttributes ' ' > <!ELEMENT Hashi (%HashiElements;) > <!ATTLIST Hashi %IM_ObjectAttributes; %HashiAttributes; > <!-- トンネル --> <!ELEMENT DoroTonneru EMPTY> <!ATTLIST DoroTonneru %IM_ObjectReferenceAttributes; > <!ELEMENT TetsudoTonneru EMPTY> <!ATTLIST TetsudoTonneru %IM_ObjectReferenceAttributes; > <!ELEMENT KasenTonneru EMPTY> <!ATTLIST KasenTonneru %IM_ObjectReferenceAttributes; > <!ENTITY % TonneruElements 'Namae*, DoroTonneru*, TetsudoTonneru*,KasenTonneru*, period?' > <!ENTITY % TonneruAttributes ' ' > <!ELEMENT Tonneru (%TonneruElements;) > <!ATTLIST Tonneru %IM_ObjectAttributes; %TonneruAttributes; > <!-- 雪覆い --> <!ELEMENT DoroYukiooi EMPTY> <!ATTLIST DoroYukiooi %IM_ObjectReferenceAttributes; > <!ELEMENT TetsudoYukiooi EMPTY> <!ATTLIST TetsudoYukiooi %IM_ObjectReferenceAttributes; > <!ENTITY % YukiooiElements 'Namae*, DoroYukiooi*,TetsudoYukiooi*, period?' > <!ENTITY % YukiooiAttributes ' ' > <!ELEMENT Yukiooi (%YukiooiElements;) > <!ATTLIST Yukiooi %IM_ObjectAttributes; %YukiooiAttributes; > <!-- 鉄道 --> <!ENTITY % TetsudoElements 'Namae*,period?' > <!ENTITY % TetsudoAttributes '' > <!ELEMENT Tetsudo (%TetsudoElements;) > <!ATTLIST Tetsudo %IM_ObjectAttributes;%TetsudoAttributes; > <!-- 駅 --> <!ELEMENT Kankei EMPTY> <!ATTLIST Kankei %IM_ObjectReferenceAttributes; > <!ENTITY % EkiElements 'Kankei*' > <!ENTITY % EkiAttributes '' > <!ELEMENT Eki (%TetsudoElements;,%EkiElements;) > <!ATTLIST Eki %IM_ObjectAttributes;%TetsudoAttributes; %EkiAttributes;> <!-- 鉄道区間 --> <!ENTITY % Tetsudo_Jotai 'Jotai ' > <!ENTITY % Tetsudo_Shubetsu 'Shubetsu ' > <!ELEMENT HashiRef EMPTY> <!ATTLIST HashiRef %IM_ObjectReferenceAttributes; > <!ELEMENT TonneruRef EMPTY> <!ATTLIST TonneruRef %IM_ObjectReferenceAttributes; > <!ELEMENT YukiooiRef EMPTY> <!ATTLIST YukiooiRef %IM_ObjectReferenceAttributes; > <!ELEMENT EkiRef EMPTY> <!ATTLIST EkiRef %IM_ObjectReferenceAttributes; > <!ENTITY % TetsudoKukanElements 'HashiRef*, TonneruRef*,YukiooiRef*,EkiRef*,curve,edge'> <!ENTITY % TetsudoKukanAttributes '' > <!ELEMENT TetsudoKukan (%Tetsudo_Jotai;,%Tetsudo_Shubetsu; ,%TetsudoElements;,%TetsudoKukanElements;) > <!ATTLIST TetsudoKukan %IM_ObjectAttributes; %TetsudoKukanAttributes;> <!-- 鉄道節点 --> <!ENTITY % TetsudoSettenElements 'point,node' > <!ENTITY % TetsudoSettenAttributes ' ' > <!ELEMENT TetsudoSetten (%TetsudoElements;,%TetsudoSettenElements;) > <!ATTLIST TetsudoSetten %IM_ObjectAttributes; %TetsudoSettenAttributes; > <!-- 道路 --> <!ENTITY % Doro_Yuryo 'Yuryo ' > <!ENTITY % Doro_Jotai 'Jotai ' > <!ENTITY % Doro_Shubetsu 'Shubetsu ' > <!ENTITY % Doro_Fukuin 'Fukuin ' > <!ENTITY % DoroElements 'Namae*,period?' > <!ENTITY % DoroAttributes ' ' > <!ELEMENT Doro (%DoroElements;) > <!ATTLIST Doro %IM_ObjectAttributes; %DoroAttributes; > <!-- 道路区間 --> <!ENTITY % DoroKukanElements 'KokudoBango*,HashiRef*, TonneruRef*,YukiooiRef*,curve,edge'> <!ENTITY % DoroKukanAttributes ''> <!ELEMENT DoroKukan (%Doro_Jotai;,%Doro_Yuryo;,%Doro_Shubetsu; ,%Doro_Fukuin;,%DoroElements;,%DoroKukanElements;) > <!ATTLIST DoroKukan %IM_ObjectAttributes; %DoroKukanAttributes;> <!-- 道路節点 --> <!ENTITY % DoroSettenElements 'point,node' > <!ENTITY % DoroSettenAttributes ' ' > <!ELEMENT DoroSetten (%DoroElements;,%DoroSettenElements;) > <!ATTLIST DoroSetten %IM_ObjectAttributes; %DoroSettenAttributes; > <!-- 行政代表点 --> <!ENTITY % Gyosei_Shubetsu 'Shubetsu ' > <!ENTITY % Gyosei_Jotai 'Jotai ' > <!ELEMENT Kai EMPTY> <!ATTLIST Kai %IM_ObjectReferenceAttributes; > <!ENTITY % GyoseiDaihyotenElements 'Namae*,point,period?,Kai*'> <!ENTITY % GyoseiDaihyotenAttributes '' > <!ELEMENT GyoseiDaihyoten (%Gyosei_Shubetsu;,%GyoseiDaihyotenElements;) > <!ATTLIST GyoseiDaihyoten %IM_ObjectAttributes; %GyoseiDaihyotenAttributes; > <!-- 界 --> <!ENTITY % Sakai_Shurui 'Shurui' > <!ENTITY % KaiElements ' curve' > <!-- 行政界 --> <!ENTITY % GyoseiKaiElements 'period?' > <!ENTITY % GyoseiKaiAttributes '' > <!ELEMENT GyoseiKai (%Gyosei_Jotai;,%Sakai_Shurui; ,%KaiElements;,%GyoseiKaiElements;) > <!ATTLIST GyoseiKai %IM_ObjectAttributes; %GyoseiKaiAttributes; > <!-- 水域界 --> <!ENTITY % SuiikiKaiAttributes '' > <!ELEMENT SuiikiKai (%Sakai_Shurui;,%KaiElements;,%SuikeiElements;) > <!ATTLIST SuiikiKai %IM_ObjectAttributes ;%SuikeiAttributes; %SuiikiKaiAttributes; >

 DTDの最初には実体定義があります。
<!ENTITY % standard.declarations SYSTEM 'Standard.dtd' >
これはパラメトリック実体宣言といって、DTDの中だけで使うものです。直ぐ下で使っています。文字置換に相当します。 Standard.dtdをここに差込印刷しているようなものです。 この方式でSpatial.dtd'ほか5個のDTDを合成しています。
結局、exchangeMetadataとdataset25000の要素を作るタグでしょう。 膨大な枚数の空間基盤データーに対して図面番号部分だけを変えて データー作成するためのマクロと考えればいいでしょう。

 次ぎに、共通要素の形式を定義して、各項目固有の要素形式を 記述しています。「行政界」を見てみましょう。

 行政界は、その下に4個の要素が定義されるとしています。属性は一個あって、 データーのない場合は空白と記述しています。ここもパラメトリック実体を 使っているので、さかのぼらないと分りませんが、構造としては間違いがありません。 以上のように、XML文書を受け取った場合、データーが途中で破損していない か、概略チエックできます。


2003.10.15
by Kon