第7回 2007年6月8日 応用Java (Java/XML).

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

応用 Java(Java/XML) 第1回 2006 年4月 14 日. 講義内容 (4/14) なぜ Java が重要なのか? なぜ XML が重要なのか? Java と XML の関係 パーサの概念 XML 関連のパッケージについて ファクトリのデザインパターン.
応用 Java(Java/XML) 第 10 回 2006 年 7 月 14 日 植田龍男. 後半の内容の予定 XPath (6/9) 、 XSLT (6/16) 名前空間 (Namespace) (6/16) XML 文書の妥当性の検証 (6/23) DTD, W3C XML Schema SOAP.
WebサービスII (第12回)‏ 2007年12月19日 植田龍男.
シーケンス図の生成のための実行履歴圧縮手法
プログラミング演習3 李 亜民クラス 第2回 ラスタライズ.
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
第9回 2007年6月22日 応用Java (Java/XML).
2006年11月15日 植田龍男 Webサービス II (第8回) 年11月15日 植田龍男.
Java I 第2回 (4/18)
創造工学設計I 電子情報工学科4年(前期) 8回目 (04/6/2015) 担当 古山彰一 ac
事前準備 ttsshでのログイン フォルダ名 XML ファイルコピー  cp ~hurry-go-round/Java/XML/* .
Applet 岡部 祐典 鈴木 敬幸.
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
JSFによるWebアプリケーション開発 第11回
アルゴリズムとプログラミング (Algorithms and Programming)
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
第5回 2007年5月25日 応用Java (Java/XML).
第4回 2007年5月11日 応用Java (Java/XML).
卒研:データベースチーム 第4回 DOMを使った処理
クラス図(1) 後半 FM13010 村上 太一.
WebサービスII (第8回) 2007年11月14日 植田龍男.
WSDL と JAX-RPC 年10月20日 Webサービス II (第4回) WSDL と JAX-RPC 年10月20日.
第20章 Flyweight ~同じものを共有して無駄をなくす~
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
プログラミング演習3 第2回 GUIの復習.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
第12回 2007年7月13日 応用Java (Java/XML).
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
Cプログラミング演習 中間まとめ2.
第10回 2007年6月29日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習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).
第6回 2007年6月1日 応用Java (Java/XML).
EclipseでWekaのAPIを呼び出す
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
Jakarta Struts (2) ソフトウェア特論 第11回.
第2回 2007年4月20日 応用Java (Java/XML).
XMLゼミ 1.3 XML文書の表示 1.4 XMLの役割 1.5 XMLとプログラミング M2 正木 裕一.
独習XML ~第3章 文書と構造~ 3.3 スキーマ 3.3 XML Schema
Cプログラミング演習 第10回 二分探索木.
第13回 2007年7月20日 応用Java (Java/XML).
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
「XML技術者育成教材」 -XMLエンジニア育成のための実践テキスト-
応用Java(Java/XML) 第7回 2006年6月16日 植田龍男.
オブジェクト・プログラミング 第8回.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
大容量XML文書のデータ更新が 可能なXML編集ライブラリ
C#プログラミング実習 第3回.
独習XML ~第1章 XMLの基礎~ 1.1 XML文書の基礎 1.2 XMLとHTML
コレクション・フレームワーク J2EE I (データベース論) 第6回 /
コレクション・フレームワーク データベース論 第7回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
オープンソースソフトウェアに対する コーディングパターン分析の適用
アルゴリズムとデータ構造1 2009年6月15日
第5回 プログラミングⅡ 第5回
アルゴリズムとデータ構造 2010年6月17日
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
2006年10月18日 植田龍男 Webサービス II (第4回) 年10月18日 植田龍男.
応用Java(Java/XML) 第8回 2005年6月9日 植田龍男.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
応用Java(Java/XML) 第8回 2005年6月23日 植田龍男.
Presentation transcript:

第7回 2007年6月8日 応用Java (Java/XML)

前回までやったこと 「XMLパーサ」-- Java でXMLを処理 javax.xml.stream パッケージのパーサ SAX(Simple API for XML) のパーサ 応用(1) – テーブルの利用 「要素の出現回数を調べる」 応用(2) – フィルタ的な処理

本日(6/8)の講義内容 DOMによる処理 応用:ツリー構造の視覚化 javax.swing.JTree

(復習) パッケージとAPI(1) javax.xml.stream XMLEventReader インタフェース XMLInputFactory クラス javax.xml.stream.events XMLEvent インタフェース サブインタフェース群

(復習) パッケージとAPI(2) SAXParser, SAXParserFactory org.xml.sax javax.xml.parsers SAXParser, SAXParserFactory org.xml.sax XMLReader, InputStream 最も初期から利用可能だったパーサ

パーサを取得するパターン SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser parser = spf.newSAXParser(); XMLReader reader =    parser.getXMLReader();

SAXの処理の特徴 XML文書を読み込みながら処理 特定の「節目」でイベントが発生 (イベント駆動型の処理) イベントの処理はHandlerが担当 ContentHandler(のサブクラス) ErrorHandler(のサブクラス)

XMLReaderへのHandlerの登録 XMLReader reader = parser.getXMLReader(); reader.setContentHandler( new MyContentHandler() ); reader.setErrorHandler( new MyErrorHandler() );

その後で、パーシングを開始 XMLReader reader …. : InputSource source = new InputSource( “sample.xml” ); reader.parse( source );

SAXの処理の特徴 XML文書の読み込みと処理が並行に進行 要素(タグ)ごとに逐次処理 読み込みと処理は同時に終了 (後処理には別の機構が必要)

ContentHandler の主要な仕事 startDocument() – パーシングの開始時 endDocument() – パーシングの終了時 startElement() – 要素(タグ)の開始 endElement() – 要素(タグ)の終了 characters() – 平文テキストの読み込み

ErrorHandlerの仕事 3つのエラーレベル fatalError 文書名の間違い、不存在 XML文書として不適切(文法エラー) warning エラーではない不適切な記述

DOMによる処理 DOM(Document Object Model ) 文書の構造を記述(DOMツリー)

パーサの取得のパターン DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder();

DOMの処理の特徴 XML文書の一括読み込み (処理は読み込み完了後) XML文書の構造をツリーとしてメモリ上に記憶

DOM と SAXとの比較 処理の手順 SAX:文書の頭から逐次処理 DOM:一括読み込み後ランダムアクセス 適した用途 システムへの負荷 SAX:比較的低い DOM:メモリ必要

DOMツリーの表現 org.w3c.dom.Node インタフェース 主要な Node のサブインタフェース Document Element Attr Text

XML文書の構造の例 <document> <title>Java and XML</title> Let's begin, now! <image source="java.png" width="512" height="400"/> </document>

DOMツリーによる表現

ノードとしての性質 階層構造(親子関係) getParentNode() getChildNodes() 再帰的呼び出しによる処理

再帰的な呼び出しの例 public void printNode( Node node ) { NodeList list = node.getChildNodes(); if( list.getLength() == 0 ) return; for( int i=0; i<list.getLength(); i++ ) { printNode( list.item(i)); }

XMLにおける「属性(Attribute)」 要素の開始タグ内部に記述 個数は任意、出現順序は意味を持たない 「名前(name)」と「値(value)」のペアの集まり <image source=“java.png” width=“200” height=“300”></image>

属性(Attribute)の扱い 属性も Nodeのサブインタフェース Attr 属性の取り出しには Nodeの集合 NamedNodeMap 重複しない名前を指定 インデックス番号による管理

属性を扱う例(1) if( node.getNodeType() == Node.ELEMENT_NODE ) { NamedNodeMap nnp = node.getAttributes(); }

属性を扱う例(2) for( int i=0; i<nnp.getLength(); i++ ) { Node n = nnp.item( i ); if( n.getNodeType() == Node.ATTRIBUTE_NODE ) { Attr a = (Attr)n; System.out.print( "[" + a.getName() + "=" + a.getValue() + "]" ); }

補足 NamedNodeMap の要素は一般に Node (形式上は Attr のみが対象ではない) getAttributes()メソッドは Nodeで定義 (しかし、Element以外では無意味) 他の属性を扱うメソッドはElementで定義 getAttribute(), setAttribute()

ツリーの視覚化とSwing javax.swing.JTree クラス javax.swing.tree パッケージ DefaultMutableTreeNode クラス javax.swing.event パッケージ

DOMツリーの視覚化(1) dbf =DocumentBuilderFactory.newInstance(); db = dbf.newDocumentBuilder(); Document doc = db.parse( source ); Node rootTag = doc.getFirstChild(); root = newDefaultMutableTreeNode( rootTag.getNodeName() ); tree = new JTree( root ); addToTree( rootTag, root );

DOMツリーの視覚化(2) public void addToTree( Node node, DefaultMutableTreeNode branch ) { : DefaultMutableTreeNode tn = new DefaultMutableTreeNode( child.getNodeName() ); branch.add( tn ); addChildren( child, tn );