XMLのエキスポート
XMLのエキスポート関数
Export
Export関数を使うと,Mathematica からXMLデータがエキスポートできる.
| Export[file,expr] | ファイルの拡張子が表す形式にエキスポートする |
| Export[file,expr,format] | 特定の形式にエキスポートする |
ファイルのエキスポート
関数の第1引数は,データをどのファイルにエキスポートするかを指定するものである.第2引数はエキスポートするデータを指定するもので,XMLデータのエキスポートの際は,これは記号的なXML式やその他の Mathematica 式になる.オプションの第3引数を出力形式の指定に使うこともできる.XMLデータのエキスポートに使用できるファイル形式には,"XML","ExpressionML","MathML","SVG"がある.
形式を
"XML"とすると,すべての式がExpressionMLとしてエキスポートされる.
| Out[1]= |  |
| Out[3]= |  |
引数が2つだけの場合,
Mathematica はファイル名の拡張子に従ってエキスポート形式を決定する..xmlはXMLに関連付けられている.
Export[filename.xml, expr]は
Export[filename.xml, expr, "XML"]と同じ動作をする.
| Out[5]= |  |
拡張子.mmlはMathMLに関連付けられている.
| Out[7]= |  |
Exportのオプションを使うとエキスポート処理に関するさまざまな詳細部分が制御できる.
このセクションのコマンドを評価して作られたテストファイルを削除する.
ExportString
ExportStringを使うと,Mathematica 式をXML文字列に変換することができる.
XMLとしてエキスポートするのに使用できる形式には,"XML","ExpressionML","MathML","SVG"がある.
| Out[11]= |  |
| Out[12]= |  |
第1引数が他のタイプの式の場合は,出力はExpressionMLになる.
| Out[13]= |  |
ExportStringのオプションを使うと,エキスポート処理に関するさまざまな詳細部分が制御できる.
Export オプション
はじめに
Export関数とExportString関数の標準オプションを使うと,エキスポート処理がより詳細に制御できる.
| Export[file,expr,format,option1->value1,option2->value2,...] |
| ファイルにエキスポートする |
| ExportString[expr,format,option1->value1,option2->value2,...] |
| 文字列にエキスポートする |
XMLデータのエキスポートに使用できるオプションには,以下のものがある.
"Annotations"
この変換オプションは,どの注釈を出力のXMLに加えるかを制御するものである.このオプションの値は,
,
,
の任意の要素の組合せのリストである.リスト中の要素はどのような順序でも構わない.
"XMLDeclaration"

が注釈に含まれている場合,XML宣言
<?xml version="1.0"?>はヘッダに含まれる.
| Out[14]= |  |
"DOCTYPEDeclaration"

が注釈に含まれる場合,
<!DOCTYPE ... >という形式のXML文書型宣言がヘッダに現れる.これは出力が書き出されるXMLアプリケーションのDTDを指定するものである.
| Out[15]= |  |
"DocumentHeader"

と設定すると,XML宣言とDTDの文書型宣言が自動的にヘッダに含まれる.
| Out[16]= |  |

が

を含まない場合は,出力にはヘッダが含まれない.これは

が

や

等の他の要素を含んでいても同じである.
| Out[17]= |  |
生成される記号的なXMLの形式を制御するには

を使うと便利である.出力の記号的なXMLに
XMLElement[Document]を加える.
| Out[18]= |  |
| Out[19]= |  |
"AttributeQuoting"
| | |
| "AttributeQuoting" | ' | 属性の値はシングルクォートで囲まれる (デフォルト) |
| \" | 属性の値はダブルクォートで囲まれる |
の値
デフォルトの設定

により,通常ダブルクォートで囲まれている
Mathematica 文字列との衝突を避けることができる.
| Out[20]= |  |
属性の値をダブルクォートで囲むには,

と設定する.ダブルクォート文字は前にバックスラッシュを付けてエスケープしなければならない.
| Out[21]= |  |
"CheckXML"
この変換オプションは記号的なXML式をエキスポートする際に,まずエラーのチェックを行うかどうかを指定するものである.
| | |
| "CheckXML" | True | エキスポートされるファイルのエラーがチェックされる (デフォルト) |
| False | エキスポートされるファイルのエラーはチェックされない |
の値
記号的なXMLが正しいと確信がある場合は,このオプションをFalseに設定する.
XMLのエラーのチェックは処理遅延を伴う可能性がある.
| Out[23]= |  |
| Out[24]= |  |
エキスポートされた大きな記号的なXML式が,小さなエラーによって完全に破壊されてしまうこともあるため,
は非常に便利である.このオプションをオンにすると,小さなエラーの多くは修正される.
ここでは記号的なXML式には小さなエラーがあるが,修正されて妥当な結果が返される.
"CheckXML"->Falseとすると,ファイルには何も出力されない.
| Out[27]= |  |
"ElementFormatting"
この変換オプションは,XMLファイル中の要素をどのようにインデントするかを制御する.
| All | 要素の子ノードはすべてインデントされ,長い行は折り返される |
| None | インデントは加えられない |
| Automatic | 混在する内容はインデントされないが,内容が要素のみである要素はインデントされる(デフォルト) |
| fn | ユーザ定義の関数 |
の値
"ElementFormatting"->All
とした場合の例.
| Out[28]= |  |
| Out[29]= |  |
"ElementFormatting"->Noneとするとインデントは追加されない.
| Out[30]= |  |
"ElementFormatting"->Automaticとすると,混在する内容(内容としての文字列)を持つ要素はインデントされないが,要素だけの内容を持つ要素はインデントされる.
| Out[31]= |  |
"ElementFormatting"->Allとすると長い文字列は折り返される.これはHTMLに似た出力を生成するために使うことができる.一方
ElementFormatting->Automaticは1行の長いテキストを生成する.
| Out[32]= |  |
上級のユーザは,形式を決定する関数も指定できる.関数には2要素のリスト

が渡される.関数はインデントが必要な場合は
Trueを,インデントが必要でない場合は
Falseを,要素のみの内容はインデントし,混在する内容はインデントしない場合は
Automaticを返す.
| Out[36]= |  |
"Entities"
XMLドキュメントのエキスポートの際に,特殊文字を名前の付いた文字実体で表記することが望ましいことがある.
は,このような名前の付いた文字実体の出力をサポートしている.
| | |
| "Entities" | "HTML" | HTMLで定義された実体の名前を解決する |
| "MathML" | MathMLで定義されている実体の名前を解決する |
| list | 文字置換規則のリスト |
の値
このオプションの値をリストとして指定することもできる.例えば,HTMLとMathMLの実体の両方をエキスポートするためには,"Entities"->{"HTML", "MathML"}を使う. "HTML"と"MathML"のどちらにも設定されていない場合でも,すべての文字はXMLに正しく出力される.しかし,数値的な実体や文字コードUTF-8が使われる可能性がある.
"HTML"設定を使うと,

は名前付き文字実体
αに変換される.
| Out[37]= |  |
独自の文字置換規則リストを使用する場合は,次の例のように,XMLで必要となる基本的なエスケープ文字も含むようにしなければならない.
に何らかの値を指定したら,適切な実体の宣言が確実に含まれるようにする.例えば"HTML"と設定すると,HTMLの実体を持つXMLが簡単に生成できる.
アイスランド文字「thorn」が,対応する文字の実体参照としてエキスポートされる.
| Out[38]= |  |
ここでは実体が宣言されていないため,そのまま出力される.
| Out[39]= |  |
"NamespacePrefixes"
このオプションを使うと,特定の名前空間宣言と名前空間接頭辞を含むXMLマークアップが生成できる.オプションは
という形式で指定する.

を使って,各MathML要素がMathML名前空間に関連付けられた名前空間接頭辞
"mml"を持つ,表示マークアップを生成する.
| Out[40]= |  |
"PrefixCreation"
このオプションは,名前空間が関連付けられているけれども記号的なXMLに名前空間宣言が含まれていないタグのエキスポートの際に,自動的に名前空間宣言を生成するかどうかを指定するものである.
| | |
| "PrefixCreation" | True | 名前空間接頭辞を持つが,それに対応する名前空間宣言を持たない要素について,常に名前空間宣言を生成する |
| False | どの要素についても名前空間宣言を生成しない |
| Automatic | URLの形式で名前空間接頭辞を持つ要素について名前空間宣言を生成する |
の値
| Out[42]= |  |

という設定では,生成された名前空間接頭辞は

という形式を取る.ここで
i は0から始まって,他の名前空間が必要となるたびに1ずつ増加していく指数である.
| Out[43]= |  |
"PrefixCreation"->Automaticと設定すると,指定の名前空間がURLの形式を取る場合に限り,名前空間宣言が自動的に含まれる.
| Out[44]= |  |
| Out[45]= |  |
"PrefixCreation"->Falseと設定すると,名前空間が名前空間接頭辞としてそのまま使われる.
| Out[46]= |  |
xmlns:prefix = "http://www.mydoc.net/2001/XML"という形式の名前空間宣言がないため,ここで作られたXMLにはあまり意味がない.これは,名前空間が束縛されているXMLに,フラグメントとしてXMLを埋め込むためにエキスポートする場合には望ましい動作である.