XJ: XML Enhancements to Java の紹介

Slides:



Advertisements
Similar presentations
内部ドメイン専用言語支援のため の 型に連動した字句・構文ルールの 変更機構 理学部 情報科学科 千葉研究室 07_02363 市川 和央 指導教員 千葉 滋 教授 1.
Advertisements

プログラミング第5回 1 while ループ 文字列の操作
応用 Java(Java/XML) 第 10 回 2006 年 7 月 14 日 植田龍男. 後半の内容の予定 XPath (6/9) 、 XSLT (6/16) 名前空間 (Namespace) (6/16) XML 文書の妥当性の検証 (6/23) DTD, W3C XML Schema SOAP.
本プレゼンテーション ( 以下、本書 ) で提供されている情報は、本書が 発表された時点における Microsoft の見解を述べたものです。市場 ニーズの変化に対応する必要があるため、本書は記載された内容の実 現に関する Microsoft の確約とはみなされないものとします。また本 書に記載された情報の正確さについて、保証するものではありません。
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
社会人学習講座 「Javaプログラミング概論」
.NET Framework 4.0 世代の Expression Trees
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
第9回 2007年6月22日 応用Java (Java/XML).
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
東京工科大学 コンピュータサイエンス学部 亀田弘之
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
2008/03/01 D-BOF k.inaba はじめての initial D 2008/03/01 D-BOF k.inaba
Ex8. Search for Vacuum Problem(2)
WebサービスII (第10回) 2007年11月28日 植田龍男.
Javaのための暗黙的に型定義される構造体
プログラミング基礎I(再) 山元進.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
haXeでオリジナルコンポーネント作り WCAN mini Vol 小笠原
卒研:データベースチーム 第4回 DOMを使った処理
WebサービスII (第8回) 2007年11月14日 植田龍男.
プログラミングIII演習 第1回目.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
第20章 Flyweight ~同じものを共有して無駄をなくす~
Bridge Pattern
入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会
第12回 2007年7月13日 応用Java (Java/XML).
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
プログラミング言語入門 手続き型言語としてのJava
第10回 2007年6月29日 応用Java (Java/XML).
XML Transformation Language Based On Monadic Second Order Logic
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第11回 2007年7月6日 応用Java (Java/XML).
第8回 2007年6月15日 応用Java (Java/XML).
暗黙的に型付けされる構造体の Java言語への導入
第3回 2007年4月27日 応用Java (Java/XML).
WebサービスII (第7回) 2007年11月7日 植田龍男.
第6回 2007年6月1日 応用Java (Java/XML).
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
プログラム解析情報のXMLデータベース化 ー 提案と実現 ー
Collection, Generics, Iterator
Macro Tree Transducer の 型検査アルゴリズム
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
第2回 2007年4月20日 応用Java (Java/XML).
依存型で型付けされた 副作用のある関数のための 型保存コンパイラ
独習XML ~第3章 文書と構造~ 3.3 スキーマ 3.3 XML Schema
第13回 2007年7月20日 応用Java (Java/XML).
~let's take fun when you can do it~
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
統合開発環境のための プログラミング言語拡張 フレームワーク
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
さまざまなプログラミング言語, オンライン開発環境
JAVA入門⑥ クラスとインスタンス.
コンパイラ 2012年10月11日
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
2006年10月18日 植田龍男 Webサービス II (第4回) 年10月18日 植田龍男.
応用Java(Java/XML) 第8回 2005年6月9日 植田龍男.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
応用Java(Java/XML) 第8回 2005年6月23日 植田龍男.
Presentation transcript:

XJ: XML Enhancements to Java の紹介 POPL Meeting 2005/11/30 細谷研究室 稲葉一浩 kinaba@is.s.u-tokyo.ac.jp

XJ とは? Java ベースのプログラミング言語 XMLに関する3つの拡張 Java 1.4 プログラムはそのまま通る 標準的なJavaのclassファイルを生成 XMLに関する3つの拡張 XML Schema を Javaの型として import XML リテラル XPath 式

Hello World import com.ibm.xj.io.*; public class XJSample { public static void main( String[] args ) { XMLElement e = new XMLElement( <messagelist> <msg>Hello</msg> <msg>World</msg> </messagelist> ); Sequence<XMLElement> ms = e[| .//msg |]; XMLOutputStream out = new XMLOutputStream(System.out); out.println( ms.get(0) ); out.println( ms.get(1) ); }

参考資料 IBM Research – XJ http://www.research.ibm.com/xj/ M.Harren et al., “XJ: Facilitating XML Processing in Java”, WWW2005 M.Raghavachari et al., “Efficient Schema-based Revalidation of XML”, EDBT2004 C.Barton et al., “Streaming XPath with Forward and Backward Axes”, ICDE2003

本日の発表内容 動機 XJの機能紹介 静的解析 In-place updates 従来のXML処理の欠点 XJのアプローチ 関連研究との比較 XML Schemaのimport XMLリテラル XPath式 静的解析 In-place updates

従来のXML処理 (1) SAX, DOM 等の低レベルAPI (特にXML出力に関して)記述が非常に面倒 静的な型検査ができない root = doc.createElement(“messagelist”); m1 = doc.createElement(“msg”); m2 = doc.createElement(“msg”); m1.appendChild( doc.createTextNode(“Hello”) ); m2.appendChild( doc.createTextNode(“World”) ); root.appendChild(m1); root.appendChild(m2); seq = doc.getElementsByTagName(“msg”); seq.item(0);

従来のXML処理 (2) XSLT, XQuery 等のXML専用システム 全体のアプリケーション開発言語(Java等) とXML処理部(XSLT等)との橋渡しに難 XPath式やXQuery式を文字列で渡すので、実行時に構文解析から始める必要 XMLの内部表現の互換性が規定されていないので、無駄な変換が発生 アプリケーション中でのXMLの使われ方に基づく処理の最適化も不可能

XJのアプローチ XMLをJava言語の第一級の要素とする XMLを扱うプログラムの記述が簡単 コンパイラによる(XMLやXPathの) 型検査 コンパイラによる、型情報に基づく最適化

関連研究 (1) E4X ECMAScript(JavaScript) + XML XPath風のアクセス式 静的型検査はない Mozilla, Macromedia Flash 等に実装

関連研究(1) E4Xの例 var x = <addressbook> <person> <name>太郎</name> <address>どこか</address> <age>ひみつ</age> </person> ... </addressbook> print( x.person.(name.find(“郎”)!=-1).address )

関連研究 (2) Xtatic C# + XML XMLリテラル Regular Expression Types Regular Expression Patterns

関連研究(2) Xtaticの例 regtype Name [[<name>PCDATA</>]] regtype Person [[<person> Name Tel </>]] regtype AddrBook [[<addressbook> Person* </>]] [[Person*]] ps = [[ <person> <name>ABC</name> <address>DEF</address> </person> ... ]] match(ps) { case[[ <person> <name>any</> n, any </> ]]: ... }

関連研究 (3) Cω C# + XML + SQL XMLリテラル Regular Expression ぽい型システム XPath風,SQL風のアクセス 独自のXML型システムとアクセス方式に基づいており、 XML Schema や XPath と言った existing standard を直接扱えない

関連研究(3) Cωの例 struct addressbook { struct { string name; string address; int? age; }* person; } addressbook ad = <addressbook>...</addressbook>; name* ns = ad.person[it.age < 20].name;

XJの機能 : スキーマのimport 復習 : スキーマ言語 XML文書の木構造を定義する言語 DTD XML Schema RelaxNG ...

XJの機能 : スキーマのimport 復習 : XML Schema <schema ...> <complexType name=“record”> <sequence> <element name=“name” type=“string”/> <element name=“address” type=“string”/> <element name=“age” type=“integer”/> </sequence> </complexType> <element name=“addressbook”> <complexType><sequence> <element name=“person” type=“record” minOccurs=“0” maxOccurs=“unbounded”/> </sequence></complexType> </element> </schema>

XJの機能 :スキーマのimport Addr.class や Addr.java が存在しなければ、Addr.xsd から型を読み込み import Addr.addressbook.person; import Addr.addressbook.person.*; Addr.class や Addr.java が存在しなければ、Addr.xsd から型を読み込み

XJの機能 :スキーマのimport person p = new person( <person> <name>Inaba</name> <address>Tokyo</address> <age>23</age> </person> ); person p = new person( <person> <name>Inaba</name> <age>23</age> </person> ); ERROR: Invalid particle content for element 'Addr.addressbook.person'

XJの機能 :スキーマのimport

XJの機能 : XMLリテラル XMLElementのコンストラクタ引数に、 XMLをそのまま書き下すことが可能 Javaの値を埋め込みたいときは { ... } ※ 試したらコンパイラからNullPointerExceptionが… int a = 10; person p = new person( <person> <name>Inaba</name> <address>Tokyo</address> <age>{a*a}</age> </person> ); addressbook adr = new addressbook(<addressbook>{p}</addressbook>);

XJの機能 : XPath式 XJでは、ノードから関連する別のノードへのアクセスは、全て XPath で行う addressbook a = new addressbook( ... ); Sequence<person> children = a[| * |]; Sequence<name> tw = a[| person[age<20]/name |]; String name = “Inaba”; address ad = a[| person[name=$n]/address |];

XJの機能 : XPath式の空判定 スキーマと照合すると結果が必ず空列となるXPathについては、コンパイル時にエラーとする Rationale: XPathの意味論では、間違ったクエリは実行時エラーにならず単に空列を返すのみ。コンパイル時検出が無いと非常にバグを見つけにくい address ad = a[| person[name=$n]/adress |]; ERROR: XPath expression returns no results

XJの機能 : XPathの静的解析 型付け 空判定 正規化・最適化 XPath式の型をできるだけconcreteにしたい XAEL Library : abstract interpretation (unpublished) 空判定 空列を返すXPathをエラーにしたい 正規化・最適化 探索なしで簡単にたどれるXPathは、XPathエンジンに投げず直接木をなぞりたい

XDAG表現 //Y[/U]//W[ancestor::Z/V]

XJの機能(予定) : Updates Javaは破壊的代入を持つ言語なので、XJでも代入によるXMLの更新が可能なほうが、Javaプログラマにとって直感的 代入によるUpdateの際の注意点 DagやCycleが発生してはならない 型チェック

XJの機能(予定) : Updates Dag, Cycle の回避 型の保証 Runtimeにチェック Simple Update XPath式を左辺値とする代入 XPath式の型は静的解析されている Structural Update XMLElement.insertAfter, insertBefore, detach 基本的にRuntimeに型チェック a[| person/age |] +:= 1;

まとめ XJ: XML Enhancements to Java XML Schema の import XMLリテラル XPath式 静的解析 In-place updates