XML

解析結果をきちんとエスケープしてXMLで出力する

C XML

前回のコードには、正当な入力にも関わらず、例えば不等号記号などが入っていると、 誤った形式のXMLを出力してしまうバグがあることに気が付いた。 入力に含まれている文字のうち事前定義された実体がある5種類の文字については、 それが出力すべき文字列に…

解析結果をXMLで出力する

C XML

解析結果の出力をもう少し実用的(?)なものにしてみる。 とりあえずマークアップ言語界の雄XMLで出力してみよう。 translator.y ...snip %% xmltext : { fputs("<text>", stdout); } text { fputs("</text>", stdout); } text : string_headed | marked_string_headed ;…

くりすますかんぱがきてくれたよ!なので

XML

<svg version="1.1" width="140" height="230" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Tree crowned with Star </title> <defs> <radialGradient id="back_grad" cx="70" cy="40" r="60" gradientTransform="scale(1 2)" gradientUnits="userSpaceOnUse"> </radialgradient></defs></svg>

簡単な入れ子構造を扱う #16

SchoolBuilderはスキーマschool.rncにinvalidなXMLデータの一部も受け入れる。 一つは、要素内にテキストが含まれているようなもの。 これは単にそのテキストを無視する。 もう一つは、school、grade、group要素が子要素を持たないもの。 schoolの場合は子デ…

簡単な入れ子構造を扱う #15

XMLで書かれたものからSchoolオブジェクトツリーを構築できるようにしてみた。 SchoolBuilder.java import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import javax.xml.parse…

簡単な入れ子構造を扱う #6

RELAX NGの短縮記法からJAXBでXMLデータを扱うということならわざわざxjcを介するまでもない。 Relaxer自身にJAXBのやり方で利用できるようにソースを生成してくれるオプションがある。 relaxer -dir.package -java.package:school -java.jaxb school.rnc利…

簡単な入れ子構造を扱う #5

スキーマ言語からxjcを介してJAXBを使うなら結局XML Schemaの利用が王道であるわけで。 でも生のXMLなんてできれば扱いたくない。ということで再びRelaxerの出番。 relaxer -xsd school.rnc xjc -p school school.xsd生成されたschool.xsdのルート要素のtarg…

簡単な入れ子構造を扱う #4

せっかくだから純正のJAXBでバインディングを行ってみる。 JDK付属のxjcにはスキーマ言語としてRELAX NGを受け付ける(はずの)オプションがある。短縮記法用もある。 $ xjc -relaxng-compact -p school school.rnc parsing a schema... [ERROR] syntax erro…

簡単な入れ子構造を扱う #3

バインディングにはとりあえず今は亡きRelaxerを使用してみる。手元のRelaxerは1.1ベータ(20070814)版だ。 relaxer -dir.package -java.package:school school.rnc生成されたクラス群を使用してみる。 SchoolUser.java import java.io.IOException; import…

簡単な入れ子構造を扱う #2

見た目通りに木構造として扱うならXMLスキーマ言語で構造を表現し、対応するJavaクラスを自動生成するのが手軽だろう。 使用するスキーマ言語としては、寂寥感漂うRELAX NG界だが短縮記法は書くのも理解するのも楽だ。 school.rnc element school { element …