1
2
3
XML 4
XML XML XML ( ) XML ( ) XML DB- API (CORBA, ) 5
XML 6
XML 7
XML 操 作 :DOM パーサ XML 文 書 <?xml version= 1.0?> <book> <section> <title>タイトル</title> <p> 本 文 1</p> <p> 本 文 2 </p> </section> </book> DOM 表 現 Document book section title p p タイトル 本 文 1 本 文 2 Elementオブジェクト Textオブジェクト 8
パーサの 準 備 とXMLのパース DocumentBuilderFactory docbuilderfactory = DocumentBuilderFactory.newInstace(); DocumentBuilder documentbuilder = docbuilderfactory.newdocumentbuilder(); Document document = documentbuilder.parse( 商 品.xml ); 商 品.xml factory Document Builder Document 9
DOMへのアクセス DOM API Node#getChildNodes() Node#getParentNode() Document#getDocumentElement() Document#getElementsByTagName(String 要 素 名 ) Element#getElementsByTagName(String 要 素 名 ) Element#getTagName() Element#getAttribute(String 属 性 名 ) Node#getNodeValue() 10
DOM DOM API Node#appendChild(Node 子 ノード) Node#insertBefore(Node 追 加 ノード,Node 対 象 ノード) Node#removeChild(Node 子 ノード) Element#setAttribute(String 属 性 名,String 値 ) Element#removeAttribute(String 属 性 名 ) Node#setValueNode(String 値 ) 11
DOMアクセス 例 NodeList nl = document.getelementsbytagname( p ); for (int i = 0; i < nl.getlength(); i++){ Element elem = (Element)nl.item(i); NodeList textlist = elem.getchildnodes(); Node text = textlist.item(0); String s = text.getnodevalue(); text.setnodevalue(s+. ); } Document book section title p p タイトル 本 文 1 本 文 2 12
DOM 生 成 例 Document doc = documentbuilder.newdocument(); Element product = doc.createelement( 商 品 ); doc.appendchild(product ); Element name = doc.createelement( 製 品 名 ); product.appendchild( name); Text txt = doc.createtext( PC ); name.appendchild( txt); Document 商 品 製 品 名 PC 13
XML 解 析 :SAX ハンドラインタフェースを 実 装 したクラス(ハンドラ)を 作 りパーサにセット. XMLをパースするとハンドラのメソッドが 呼 び 出 される. ハンドラ( 派 生 クラス) XML ファイル ハンドラ( 基 本 クラス) 要 文 文 素 字 書 を 列 の 発 発 終 見 見 了 パーサ 14
SAXによるパージング parse( Book.xml ) パ ー ス Book.xml <?xml version= 1.0?> <book> <title> タイトル </title>. 呼 び 出 される 関 数 startdocument(); startelement( book ); startelement( title ); characters( タイトル ); endelement( title ); 15
SAXパーサのAPI SAX API XMLReaderFactory#createXMLReader() SAXパーサ(XMLReaderインスタンス)の 生 成 XMLReader#setContentHandler(Handler ハンドラ) SAXイベントを 受 け 取 るハンドラを 設 定 XMLReader#parse(InputSource xml) XMLのパースを 実 行 16
SAXイベント(ハンドラメソッド) 17
SAX // パーサを 生 成 XMLReader reader = XMLReaderFactory.createXMLReader ("org.apache.xerces.parsers.saxparser"); //ハンドラを 設 定 reader.setcontenthandler(new MyContentHandler()); //XML 文 書 をパース reader.parse("book.xml"); parse( Book.xml ) パ ー ス パーサ 18
SAX (1/2) /** title */ public class MyContentHandler extends DefaultHandler { /** title */ private StringBuffer title = null; /** */ public void startelement(string namespaceuri, String localname, String qname, Attributes atts) { <?xml version="1.0"?> <book> <title> </title> <chapter> <title></title> </chapter>... </book> if (localname.equals("title")) { title = new StringBuffer(); } else if (localname.equals(...)) {... } } パーサ Title: Title: 19
SAX (2/2) /** */ public void characters(char[] ch, int start, int length) { if (title!= null) { title.append(ch, start, length); } } /** */ public void endelement(string namespaceuri, String localname, String qname) { if (localname.equals("title")) { System.out.println("Title: " + title.tostring()); title = null; } } } <?xml version="1.0"?> <book> <title> </title> <chapter> <title></title> </chapter>... </book> パーサ Title: Title: 20
1 <?xml version="1.0"?> <book> <title> <sub>xx </sub></title> <chapter> <title><sup><b>1</b></sup></title> </chapter>... </book> Title: Title: 21
<?xml version="1.0"?> <book> <title> </title> <chapter/> </book> DOM ( : JAXB) Element nodename="book" book Element nodename="title" Element nodename="chapter" title chapter Text nodevalue=" " java.lang.string value=" " 22
バインディン グ 定 義 XML Schema スキーマコンパイラ JAXB Obj Javaソース API Call ユーザアプリ Javaソース javac XML Read/Write/ Update/ 新 規 作 成 JAXB Obj Javaクラス API Call ユーザアプリ Javaクラス 23
XML XSLT 入 力 XML <schedules> <name> 山 本 </name> <schedule> <date>3/15</date> <action> 会 議 </action> </schedule> <schedule> </schedule> </schedules> スタイル シート XSLTプロ セッサ 構 造 を 変 換 せよ 出 力 XML <html> <u> 山 本 </u><br/> <table> <tr> <th> 日 付 </th><th> 予 定 </th> </tr> <tr> <td>3/15</td><td> 会 議 </td> </tr> <tr>...</tr> </table> </html> 24
XML XSLT 入 力 XML <schedules> <name> 山 本 </name> <schedule> <date>3/15</date> <action> 会 議 </action> </schedule> <schedule> </schedule> </schedules> スタイル シート XSLTプロ セッサ 出 力 XML <html> <u> 山 本 </u><br/> <table> <tr> <th> 日 付 </th><th> 予 定 </th> </tr> <tr> <td>3/15</td><td> 会 議 </td> </tr> <tr>...</tr> </table> </html> 25
XSLの 命 令 要 素 schedule のための テンプレート ( 変 換 ルール) 要 素 name のための テンプレート ( 変 換 ルール) <xsl:template match="schedules"> <html> <xsl:apply-templates/> </html> </xsl:tempalte> <xsl:template match="name"> <u> <xsl:value-of select="."/> </u> </xsl:template> 対 象 要 素 名 を 指 定 html タグを 生 成 対 象 要 素 名 を 指 定 u タグを 生 成 26
JAXP XML API 変 換 TransformerFactory#newTransformer(Source スタイルシート) 指 定 されたスタイルシートで 変 換 するTransformerを 作 る. Transformer#transform(Source 入 力 XML, Result 出 力 XML) 入 力 XMLを 変 換 して 出 力 する. Transformer#setOutputProperty(String 名 前, String 値 ) 出 力 プロパティを 設 定 する. 例 : setoutputproperty(outputkeys.encoding, "Shift_JIS") シフトJISで 出 力 する. 入 力 出 力 (DOM, SAX, Stream が 指 定 可 能 ) StreamSource#StreamSource(String ファイル 名 ) 入 力 ( 指 定 されたファイルから 読 み 込 むタイプ)を 作 る. StreamSource#StreamSource(InputStream 入 力 ストリーム) 入 力 (ストリームから 読 み 込 むタイプ)を 作 る. StreamResult#StreamResult(OutputStream 出 力 ストリーム) 出 力 (ストリームへ 書 き 出 すタイプ)を 作 る. 27
XML 28
XML XMLを 用 いることで 開 発 の 効 率 化 が 図 れる 疎 結 合 なシステムの 連 携 には 大 変 適 している 一 方 でXMLはあくまでデータ 次 のような 場 合 XMLではないほうがよいことも 密 結 合 なシステム 間 で 処 理 速 度 が 求 められる 場 合 データとしてではなく, 業 務 知 識 について 責 任 を 持 つクラスとして 扱 っ たほうがよい 場 合 なお,JAXBなどで 出 来 るクラスは 単 なるデータ 型 で 一 人 前 のク ラス ではない 29
XML DB 30
RDB XML 文 書 <?xml version= 1.0?> <order> <item id="1"> <name> 鉛 筆 </name> <count>12</count> </item> <item id="2"> <name>ペン</name> <count>25</count> </item> </order> RDB RDB XML 31
RDB XML 文 書 RDB <?xml version= 1.0?> <application> <date>20021028</date> <type> 新 規 </type> <person> <name> 山 本 </name> <tel>03-4567-8910</tel> <gender>m</gender> <addr> 目 黒 区 大 岡 山 2-12-1</addr> </person> </application> XML 32
: RDB ( ) 33
XMLDB 34
(1) 35
(2) 36
XML 37
38
XML <?xml version= 1.0?> <application> <type> 新 規 </type> <date>20021028</date> <name> 山 本 </name> <contactinfo> <tel>03-4567-8910</tel> <addr> 目 黒 区 大 岡 山 2-12-1</addr> </contactinfo> </application> <?xml version= 1.0?> <application> <Signature> </Signature> <type> 新 規 </type> <date>20021028</date> <name> 山 本 </name> <EncryptedData> </EncryptedData> </application> 39
40
41
XML web 42
XML-Web Web Web HTTP Web Web サービス ( aggregator) SOAP Web Web B2C B2B 43
XML Web 44
SOAP on HTTP HTTP SOAP メッセージ 45
SOAP SOAP Web SOAP Servlet SOAP DB- API (CORBA, ) SOAP HTTP 46
/ SOAP SOAP SOAP HTTP SOAP SOAP SOAP SOAP HTTP 47
HTTP Web Web JSP/ Servlet SOAP SOAP SOAP Servlet SOAP SOAP SOAP HTTP 48
/ 49
(,,, ) WSDL / SOAP SOAP-RPC 50
51
2 52
Web 53
Web 54
Web 55
web 1 56
57
web 58
UDDI 59
3 60
UDDI 61
UDDI 62
UDDI 63
() 64
65
66
67