出力ファイルのXMLファイル管理

実例

  • 辞書が持つデータの整理を考える。次の要素を持たせる。
    • 漢字でできた単語
    • 個々の漢字
    • 個々のひらがな
  • 各要素に持たせる情報
    • 単語の場合:単語ID、文字、構成漢字、構成ひらがな(読み)
      • 例:『時計』ID=1,文字=時計,構成漢字={時、計},構成ひらがな={と,け,い}
    • 漢字の場合:漢字ID、文字、構成ひらがな(読み)
      • 例:『計』ID=2,文字=計,構成ひらがな={は,か,る}
    • ひらがなの場合:ひらがなID、文字、行、段
      • 例:『と』ID=4_5,文字=と,行=T,段=O
  • 単語に登録する、「漢字要素」、「ひらがな要素」はそれぞれ、外部エンティティ参照する
<?xml version="1.0" encoding="Shift_JIS" ?>
<Word>
<id>1</id>
<Moji>時計</Moji>
<Kanjis>
&Kanji1;
&Kanji2;
</Kanjis>
<Yomi>とけい</Yomi>
<Hiraganas>
&Hiragana4_5;
&Hiragana2_4;
&Hiragana1_2;
</Hiraganas>
</Word>
<?xml version="1.0" encoding="Shift_JIS" ?>

<Kanji>
<id>2</id>
<Moji>計</Moji>
<Yomi>はかる</Yomi>
</Kanji>
<?xml version="1.0" encoding="Shift_JIS" ?>

<Hiragana>
<id>4-5</id>
<Moji>と</Moji>
<Gyou>T</Gyou>
<Dan>O</Dan>
</Hiragana>
  • このようにして作成された、「単語」「漢字」「ひらがな」を『辞書に登録する』
  • それぞれの「単語」「漢字」「ひらがな」を外部エンティティ参照で辞書登録するが、すでに外部参照記述をしてある「単語」のxmlファイルは、そのままでは参照登録できない
  • 外部参照フリーのXMLファイルを別途用意し、そのファイルをデータとして登録する必要がある。(このファイルとして登録したデータへURLリンクを張る形式で表示をすれば、出来上がり、ただし、未実装)
<?xml version="1.0" encoding="Shift_JIS" ?>
<Word>
<id>1</id>
<Moji>時計</Moji>
<Kanjis>
<Kanji>
<File>Kanji1.xml</File>
</Kanji>
<Kanji>
<File>Kanji2.xml</File>
</Kanji>
</Kanjis>
<Yomi>とけい</Yomi>
<Hiraganas>
<Hiragana>
<File>Hiragana4_5.xml</File>
</Hiragana>
<Hiragana>
<File>Hiragana2_4.xml</File>
</Hiragana>
<Hiragana>
<File>Hiragana1_2.xml</File>
</Hiragana>
</Hiraganas>
</Word>
                                                            • -

では、辞書ファイルと、それに登録された、「時計」「棚」(以上、単語)、「時」「計」「棚」(以上、漢字)、「い」「け」「た」「と」「な」(以上、ひらがな)の各、XMLファイル。単語の場合は、外部参照なしで、ファイル名登録をしたファイルも作成してあるので、それらも。これらを以下に掲載する。
これらのxmlファイルを1フォルダにいれ、Jisyo.xmlを開けば、登録単語・漢字・ひらがなが表示される。単語については、それを構成する漢字・ひらがな情報のfull sizeファイル名の情報が示される。
Jisyo.xml

<?xml version="1.0" encoding="Shift_JIS" ?>

<!DOCTYPE Jisyo [
<!ENTITY Word1_a SYSTEM "Word1_a.xml">
<!ENTITY Word2_a SYSTEM "Word2_a.xml">
<!ENTITY Kanji1 SYSTEM "Kanji1.xml">
<!ENTITY Kanji2 SYSTEM "Kanji2.xml">
<!ENTITY Kanji3 SYSTEM "Kanji3.xml">
<!ENTITY Hiragana1_2 SYSTEM "Hiragana1_2.xml">
<!ENTITY Hiragana2_4 SYSTEM "Hiragana2_4.xml">
<!ENTITY Hiragana4_1 SYSTEM "Hiragana4_1.xml">
<!ENTITY Hiragana4_5 SYSTEM "Hiragana4_5.xml">
<!ENTITY Hiragana5_1 SYSTEM "Hiragana5_1.xml">
]>

<Jisyo>

&Word1_a;
&Word2_a;
&Kanji1;
&Kanji2;
&Kanji3;
&Hiragana1_2;
&Hiragana2_4;
&Hiragana4_1;
&Hiragana4_5;
&Hiragana5_1;
</Jisyo>

Word1.xml(時計)

<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE Word1 [
<!ENTITY Kanji1 SYSTEM "Kanji1.xml">
<!ENTITY Kanji2 SYSTEM "Kanji2.xml">
<!ENTITY Hiragana1_2 SYSTEM "Hiragana1_2.xml">
<!ENTITY Hiragana2_4 SYSTEM "Hiragana2_4.xml">
<!ENTITY Hiragana4_5 SYSTEM "Hiragana4_5.xml">
]>

<Word>
<id>1</id>
<Moji>時計</Moji>
<Kanjis>
&Kanji1;
&Kanji2;
</Kanjis>
<Yomi>とけい</Yomi>
<Hiraganas>
&Hiragana4_5;
&Hiragana2_4;
&Hiragana1_2;
</Hiraganas>
</Word>

Word1_a.xml(時計,外部参照フリー)

<?xml version="1.0" encoding="Shift_JIS" ?>
<Word>
<id>1</id>
<Moji>時計</Moji>
<Kanjis>
<Kanji>
<File>Kanji1.xml</File>
</Kanji>
<Kanji>
<File>Kanji2.xml</File>
</Kanji>
</Kanjis>
<Yomi>とけい</Yomi>
<Hiraganas>
<Hiragana>
<File>Hiragana4_5.xml</File>
</Hiragana>
<Hiragana>
<File>Hiragana2_4.xml</File>
</Hiragana>
<Hiragana>
<File>Hiragana1_2.xml</File>
</Hiragana>
</Hiraganas>
</Word>

Word2.xml(棚)

<Word>
<id>2</id>
<Moji>棚</Moji>
<Yomi>たな</Yomi>
<Kanjis>
&Kanji3;
</Kanjis>
<Hiraganas>
&Hiragana4_1;
&Hiragana5_1;
</Hiraganas>
</Word>

Word2_a.xml(棚、外部参照フリー)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Word>
<id>2</id>
<Moji>棚</Moji>
<Kanjis>
<Kanji>
<File>Kanji1.xml</File>
</Kanji>
</Kanjis>
<Yomi>たな</Yomi>
<Hiraganas>
<Hiragana>
<File>Hiragana4_1.xml</File>
</Hiragana>
<Hiragana>
<File>Hiragana5_1.xml</File>
</Hiragana>
</Hiraganas>
</Word>

Kanji1.xml(時)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Kanji>
<id>1</id>
<Moji>時</Moji>
<Yomi>とき</Yomi>
</Kanji>

Kanji2.xml(計)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Kanji>
<id>2</id>
<Moji>計</Moji>
<Yomi>はかる</Yomi>
</Kanji>

Kanji3.xml(棚)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Kanji>
<id>3</id>
<Moji>棚</Moji>
<Yomi>たな</Yomi>
</Kanji>

Hiragana1_2.xml(い)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Hiragana>
<id>1_2</id>
<Moji>い</Moji>
<Gyou>A</Gyou>
<Dan>I</Dan>
</Hiragana>

Hiragana2_4.xml(け)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Hiragana>
<id>2_4</id>
<Moji>け</Moji>
<Gyou>K</Gyou>
<Dan>E</Dan>
</Hiragana>

Hiragana4_1.xml(た)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Hiragana>
<id>4_1</id>
<Moji>た</Moji>
<Gyou>T</Gyou>
<Dan>A</Dan>
</Hiragana>

Hiragana4_5.xml(と)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Hiragana>
<id>4_5</id>
<Moji>と</Moji>
<Gyou>T</Gyou>
<Dan>O</Dan>
</Hiragana>

Hiragana5_1.xml(な)

<?xml version="1.0" encoding="Shift_JIS" ?>

<Hiragana>
<id>5_1</id>
<Moji>な</Moji>
<Gyou>N</Gyou>
<Dan>A</Dan>
</Hiragana>
                                                      • -
  • 理論
XML書式にて、比較的大量の、構造化したデータを管理・表示するための一般化方法案

□XMLで扱うデータの構造
 木構造であるとはどういうことか

■1 管理されるデータの中に含まれる、すべてのデータは、自身以外のデータを自身に帰属するデータとして持つか、もしくは、自身以外のデータに帰属する。自身に帰属するデータを持ち、かつ、自身以外のデータに帰属するデータもある。
■2 ■1を満足しているデータ構造は、木構造をとる。
■3 データの帰属関係は、一意であるか、非一意であるかのいずれかに分類できる。
■4 非一意な帰属データとは、同一の内部構造を有する複数のデータが存在するようなそれを言う。一意な帰属データとは、同一の内部構造を有するデータが、ただひとつ存在するようなそれを言う。
■5 非一意な帰属データは、同一内部構造を有するデータ数が可変でありうるので、そのデータ数が0、1、2以上のいずれもとりうる。言い換えると、データの性質上、非一意な帰属データであるデータは、そのデータ個数によらず、非一意な帰属データである。逆に、一意な帰属データは、かならず、そのデータ数が1であり、値を持たない場合には、"null"値を与えることで、その一意性を確保することが可能である。
■6 すべてのデータは、0個以上の一意データと、0個以上の非一意データを帰属データとして持つ。
■7 自身を帰属データとして有するデータがないようなデータは、全データ中に唯一存在し、それはルート要素となる。


□XML文書による木構造のデータの管理

■1 すべてのデータはXML文書内に記載されている
■2 大量のデータ・分岐深度の深いデータの場合には、すべてのデータを1文書にまとめることは可能であるが次の2点で現実的ではない
 (1)データ量が多く、表示時のメモリ負荷が高い
 (2)分岐深度が深いと、文書の書式が複雑となり、管理が煩雑
■3 次のようにすることで、一般的に取り扱うことが可能
 (1)すべてのデータは、自身と自身の帰属データを記載したXMLファイルとして管理される。
 (2)帰属データのうち、データ構造となっている要素は、外部エンティティにて、XMLファイルを参照する。
 (3)ただし、外部エンティティにて参照するXMLファイルがさらに外部エンティティ参照をしていると、分岐深度が深くなり、結果として重くなるので、帰属データは、
   (A)データ構造を有するデータも含めて、すべての帰属データを記載したXMLファイル(データ構造は外部エンティティ参照とする)
   (B)データ構造を有するデータは記載しないXMLファイル
  の2種類を作成する。
 (4)以上により、木構造のすべての分岐深度において、直上・直下のデータ構造との間が外部エンティティ参照により連携がとれた。



例
すべてのデータ要素Epは、1,2,...,x種類の一意データを持ち、1,2,...,y種類の非一意データを有する。
非一意データはkは、zk個の要素を持ち、1,2,...wk種類の一意データを持ち、1,2,..,vk種類の非一意データを有する。
ここで、x,y,zi,wi,viは0以上の整数とすると、一般性を失わない。
このとき、Epは、x + Sum(1->y)(zi*(wi+vi)種類の帰属データを有している。
この帰属データは、データ構造である場合と、そうでない場合とに分けられる。
データ構造でない場合には、値をEpのXMLファイルに記載する。データ構造の場合には、そのデータ構造を書き表したXMLファイルを外部エンティティ参照する。

今、EpのXML文書は2つ作成する。データ構造を有するデータを記載するものと、記載しないものである。

この操作をRootエンティティから再帰的に実行することで、すべてのデータが記載され、かつ、連結された。

Ep-----S_1
     |-S_2
     ...
     |-S_x
     |-M_1---M_1_1----M_1_S_1
     |     |        |-M_1_S_2
     |     |       ...
     |     |        |-M_1_S_w1
     |     |        |-M_1_M_1
     |     |        |-M_1_M_2
    ...    |       ...
     |     |        |-M_1_M_v1
     |     --M_1_2----M_1_S_1
     |     |        |-M_1_S_2
     |     |       ...
     |     |        |-M_1_S_w1
     |     |        |-M_1_M_1
     |     |        |-M_1_M_2
    ...    |       ...
     |     |        |-M_1_M_v1
    ...   ...      ...
     |     --M_1_z1---M_1_S_1
     |              |-M_1_S_2
     |             ...
     |              |-M_1_S_w1
     |              |-M_1_M_1
     |              |-M_1_M_2
    ...            ...
     |              |-M_1_M_v1
    ...
     |-M_y---M_y_1----M_y_S_1
           |        |-M_1_S_2
           |       ...
           |        |-M_1_S_wyz
           |        |-M_1_M_1
           |        |-M_1_M_2
           |       ...
           |        |-M_1_M_vy
           --M_1_2----M_1_S_1
           |        |-M_1_S_2
           |       ...
           |        |-M_1_S_wy
           |        |-M_1_M_1
           |        |-M_1_M_2
           |       ...
           |        |-M_1_M_vy
          ...      ...
           --M_1_zy---M_1_S_1
                    |-M_1_S_2
                   ...
                    |-M_1_S_wy
                    |-M_1_M_1
                    |-M_1_M_2
                   ...