出力ファイルのXMLファイル管理
実例
- 辞書が持つデータの整理を考える。次の要素を持たせる。
- 漢字でできた単語
- 個々の漢字
- 個々のひらがな
- 各要素に持たせる情報
- 単語の場合:単語ID、文字、構成漢字、構成ひらがな(読み)
- 例:『時計』ID=1,文字=時計,構成漢字={時、計},構成ひらがな={と,け,い}
- 漢字の場合:漢字ID、文字、構成ひらがな(読み)
- 例:『計』ID=2,文字=計,構成ひらがな={は,か,る}
- ひらがなの場合:ひらがなID、文字、行、段
- 例:『と』ID=4_5,文字=と,行=T,段=O
- 単語の場合:単語ID、文字、構成漢字、構成ひらがな(読み)
- 単語に登録する、「漢字要素」、「ひらがな要素」はそれぞれ、外部エンティティ参照する
<?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 ...