XML 永続化

この節では、パステルステッチのインタープリターが XML (Extensible Markup Language) を読み書きする方法を規定する。まず、XML を読み取る方法として DOM (Document Object Model) API を規定する。この文書で規定される DOM は XML を読み取るが、XML を書き出すことはできない。また、読み取ることができるのは XML の限られたサブセットであり、フルスペックの XML 読み取りは提供しない。続いて、パステルステッチの値を XML に変換する方法と、書き出した XML からパステルステッチの値を復元する方法を規定する。前者を XML エンコード、後者を XML デコードという。また、XML エンコードと XML デコードを総称して XML 永続化という。

DOM API

パステルステッチの DOM API は xml element カプセルで提供される。make xml elementmain プリミティブ演算は空の xml element カプセルを返す。xml element カプセルは以下のメソッドを使用できる。

メソッドディスクリプター 引数 戻り値
typemain main (ベクトル) ブーリアン
readmain main (文字列) なし
readmain main (ファイルポインター) なし
namemain なし 文字列
attributemain main (文字列) 文字列
attributesmain なし ベクターコンテナ
elementsmain なし ベクターコンテナ
elementsmain 文字列 ベクターコンテナ
elementmain 文字列 xml element カプセル
stringmain なし 文字列

type メソッドは引数が xml elementmain 有名ベクトルであれば true を返す。

read メソッドは XML ドキュメントを読み取る。文字列またはファイルポインターを入力として受け取ることができる。

name メソッドは要素名を返す。

attribute メソッドは指定された属性の値を返す。

attributes メソッドは属性名の列をベクターコンテナで返す。ベクターコンテナの各要素は文字列である。

elements メソッドは子要素の列をベクターコンテナで返す。main 引数を省略すると、すべての子要素を返す。main 引数の値が文字列であるときは、指定された要素名を持つ子要素を返す。ベクターコンテナの各要素は xml element カプセルである。

element メソッドは、main 引数で指定された要素名を持つ子要素がちょうど 1 個あるとき、その子要素を返す。そうでない場合の動作は実装により異なる。

string メソッドは、要素が子要素を持たないとき、要素の内容を文字列として返す。

XML エンコード

パステルステッチの値を XML に変換することを XML エンコードという。XML エンコードには xml encoder カプセルを用いる。make xml encodermain プリミティブ演算は空の xml encoder カプセルを返す。xml encoder カプセルは、パステルステッチのインタープリターが内部で使用する無名ベクトルのコードと、XML に出力される無名ベクトルのコードの対応表を保持する。xml encoder カプセルは以下のメソッドを使用できる。

メソッドディスクリプター 引数 戻り値
typemain main (ベクトル) ブーリアン
encodemain main (後述) 文字列

type メソッドは main 引数が xml encodermain 有名ベクトルであれば true を返す。

encode メソッドは main 引数で指定された値を XML に変換する。

xml encoder カプセルの encode メソッドの main 引数に指定できる値は以下である。

他の値を XML に変換するには、xml encoder カプセルの encode メソッドを引数変換でカスタマイズする必要がある。

XML デコード

XML をパステルステッチの値に変換することを XML デコードという。XML デコードには xml decoder カプセルを用いる。make xml decodermain プリミティブ演算は空の xml decoder カプセルを返す。xml decoder カプセルは、XML に記述されている無名ベクトルのコードと、パステルステッチのインタープリターが内部で使用する無名ベクトルのコードの対応表を保持する。xml decoder カプセルは以下のメソッドを使用できる。

メソッドディスクリプター 引数 戻り値
typemain main (ベクトル) ブーリアン
decodemain element (xml element カプセル), identifier (無名ベクトル) 後述

type メソッドは main 引数が xml decodermain 有名ベクトルであれば true を返す。

decode メソッドは element 引数で指定された XML 要素をパステルステッチの値に変換する。変換された値が無名ベクトルを含むとき、その無名ベクトルは identifier 引数で指定された無名ベクトルに保持される。

xml decoder カプセルの decode メソッドでデコードできる値は以下である。

他の値をデコードするには、xml decoder カプセルの decode メソッドを引数変換でカスタマイズする必要がある。