WELLFORMED XML DOCUMENT XML 10 xml version 1

  • Slides: 54
Download presentation

(WELL-FORMED XML DOCUMENT) XMLの構文の規則のすべてに準拠している 10 <? xml version=“ 1. 0” encoding=“Shift_JIS”? > <!-- かんたんなXML文書

(WELL-FORMED XML DOCUMENT) XMLの構文の規則のすべてに準拠している 10 <? xml version=“ 1. 0” encoding=“Shift_JIS”? > <!-- かんたんなXML文書 --> <cars> <car id=“ 1001”> <country>日本</ country > <name>乗用車</name> <price>150</price> </car> <car id=“ 1002”country=“アメリカ”> <name>トラック</name> <price>250</price> </cars> 階層構造 (木構造) cars ルート要 素 car 要素 name price 乗用車 150

XML宣言 XML宣言とはXML文書の先頭に付きその文書が XML文書であることを明確に示す文字列である <? xml version="1. 0" encoding="UTF-8" standalone="yes"? > <aisatsu> Hello world!! </aisatsu>

XML宣言 XML宣言とはXML文書の先頭に付きその文書が XML文書であることを明確に示す文字列である <? xml version="1. 0" encoding="UTF-8" standalone="yes"? > <aisatsu> Hello world!! </aisatsu> 12

DTDの基本的な構成 <!DOCTYPE manual [ <!ELEMENT manual (title, preface, body, index) > 要素型宣言 <!ELEMENT title

DTDの基本的な構成 <!DOCTYPE manual [ <!ELEMENT manual (title, preface, body, index) > 要素型宣言 <!ELEMENT title (#PCDATA) > …… <!ATTLIST title id ID #REQUIRED > XML属性リスト宣言 …… …… <!ENTITY w 3 c "World Wide Web Consortium"> エンティティ宣言 …… …… <!NOTATION CGM PUBLIC "ISO 8632/4//NOTATION clear text encoding//EN" "http: //www. utj. co. jp/……"> 記法宣言 …… 14 >

DTDの例: 要素型宣言 <? xml version="1. 0" encoding="Shift_JIS" ? > 文書型宣言 <!DOCTYPE cars[ <!ELEMENT cars

DTDの例: 要素型宣言 <? xml version="1. 0" encoding="Shift_JIS" ? > 文書型宣言 <!DOCTYPE cars[ <!ELEMENT cars (car)> <!ELEMENT car (name, price)> 要素型宣言 <!ELEMENT name (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <cars> <car> <name>乗用車</name> <price>150</price> </cars> 15

<? xml version='1. 0' encoding='UTF-8' ? > <!ENTITY % unnamed "http: //www. xmlns. org/2002/Contact.

<? xml version='1. 0' encoding='UTF-8' ? > <!ENTITY % unnamed "http: //www. xmlns. org/2002/Contact. XML"> <!ELEMENT Contact. XML (Contact. XMLItem+)> <!ATTLIST Contact. XML version (1. 1 ) #REQUIRED creator CDATA #IMPLIED xmlns CDATA #FIXED 'http: //www. xmlns. org/2002/Contact. XML' > <!ELEMENT Contact. XMLItem (Person. Name , Person. ID? , Address? , Occupation? , Phone? , Email? , Instant. Messaging? , Web? , Image? , Extension? )> <!ATTLIST Contact. XMLItem last. Modified. Date CDATA #IMPLIED > <!ELEMENT Person. Name (Person. Name. Item+)> <!ELEMENT Person. Name. Item (Full. Name , First. Name? , Middle. Name? , Last. Name? )> <!ATTLIST Person. Name. Item xml: lang CDATA #REQUIRED > <!ELEMENT Full. Name (#PCDATA)> <!ATTLIST Full. Name pronunciation CDATA #IMPLIED > <!ELEMENT First. Name (#PCDATA)> <!ATTLIST First. Name pronunciation CDATA #IMPLIED > <!ELEMENT Middle. Name (#PCDATA)> <!ATTLIST Middle. Name pronunciation CDATA #IMPLIED > <!ELEMENT Last. Name (#PCDATA)> <!ATTLIST Last. Name pronunciation CDATA #IMPLIED > <!ELEMENT Person. ID (Person. IDItem+)> <!ELEMENT Person. IDItem (#PCDATA)> <!ATTLIST Person. IDItem code. Domain (Passport | Driving. License | Insurance. Certificate | User. Defined ) #REQUIRED > <!ELEMENT Address (Address. Item+)> <!ELEMENT Address. Item (Address. Code* , Full. Address? , Address. Line*)> <!ATTLIST Address. Item location. Type (Home | Office | Origin | Others | Unknown ) #REQUIRED preference (True | False ) #IMPLIED > Contact. XML スキーマ定義 17 ・・・ 77行

スキーマ定義の種類 XML Schema DTDの他には・ ・・ W 3 C Schema勧告 XML Schema Part 0 http:

スキーマ定義の種類 XML Schema DTDの他には・ ・・ W 3 C Schema勧告 XML Schema Part 0 http: //www. w 3. org/TR/xmlschema-0/ XML Schema Part 1: Structures http: //www. w 3. org/TR/xmlschema-1/ XML Schema Part 2: Datatypes http: //www. w 3. org/TR/xmlschema-2/ RELAX NG 18 RELAX NG: http: //www. relaxng. org/

XSL 1. XSL-Transformation : XSLT Ø XML文書をProcessingし、HTMLやTextの ような異なるFormatの文書、またはXML文書 に変換するLanguage 2. XPath 3. XSL-Formatting object

XSL 1. XSL-Transformation : XSLT Ø XML文書をProcessingし、HTMLやTextの ような異なるFormatの文書、またはXML文書 に変換するLanguage 2. XPath 3. XSL-Formatting object : xml-fo Ø XML文書の視覚的なプレゼンのためデザイ ンされたPage formatting language 22

CSSを使った簡単な例 <? xml version="1. 0" standalone="yes"? > <? xml-stylesheet type="text/css" href="FOO. css"? > <!DOCTYPE

CSSを使った簡単な例 <? xml version="1. 0" standalone="yes"? > <? xml-stylesheet type="text/css" href="FOO. css"? > <!DOCTYPE foo [ <!ELEMENT foo (#PCDATA)> ]> <foo> it`s sample of XML Hello world!!!!! </foo> foo{display: block; font-size: 50; font-whight: boild; } Helloworld. xml FOO. css 23

25

25

XPATHの例 XPath r/a r results a b d a c e b d c

XPATHの例 XPath r/a r results a b d a c e b d c e b b f f 28

XPATHの例 XPath r/a/b r results a b d b c d e b f

XPATHの例 XPath r/a/b r results a b d b c d e b f 29

XPATHの例 XPath r//b r results a b d b c d e b f

XPATHの例 XPath r//b r results a b d b c d e b f e b b f f 30

XPATHの例 XPath r//b[d] r results a b d b c d e b f

XPATHの例 XPath r//b[d] r results a b d b c d e b f 31

XPATHの例 XPath r//b[d]/e r results a b d c e e b b f

XPATHの例 XPath r//b[d]/e r results a b d c e e b b f f 32

クエリ言語 XQuery : XMLにおけるSQL Ø FLWOR bib. xml 文書を読んで → document(‘bib. xml’) 文書から位置に関係なく <

クエリ言語 XQuery : XMLにおけるSQL Ø FLWOR bib. xml 文書を読んで → document(‘bib. xml’) 文書から位置に関係なく < title > elementを探 { し → //title for $b in document("bib. xml")//book 探した値を変数 aに Assignし → for $a in where $b/publisher = "Addison-Wesley" 結果として変数aの値を返す → return $a order by $b/title return $b/title } 33

XMLハイブリッド型データベース XMLハイブリッド型DB RDB id 13 ・ ・ ・ name XML 格納 sex CREATE TABLE

XMLハイブリッド型データベース XMLハイブリッド型DB RDB id 13 ・ ・ ・ name XML 格納 sex CREATE TABLE employee( id int PRIMARY KEY, name varchar, sex varchar, work_history xml ); Postgre. SQL work_history 鈴木 紀男 Male <work-record><career><period><start>1965 -04 -01</start><end>199003 -31</end></period><content>研究開発契約書類作成 </content><role>サブリーダー </role></career><period><start>1990 -0401</start><end>2005 -03 -31</end></period><content>特許紛争担当 </content><role>マネージャー </role></career><period><start>2005 -0401</start><end/></period><content>本社戦略立案業務 </content><role>最高経営責任者</role></career></work-record> ・・・ ・・・ RDBの中にXML型のデータ(列)を定義可能 34

SQL/XML 関係データベースの既存データからXMLを生成 ISO のSQL: 2003標準で定義されているXML関連機能 Postgre. SQLにおいても実装済み SELECT SQL/XML質問文 XMLAGG( XMLELEMENT(NAME "社員", XMLATTRIBUTES(e. id

SQL/XML 関係データベースの既存データからXMLを生成 ISO のSQL: 2003標準で定義されているXML関連機能 Postgre. SQLにおいても実装済み SELECT SQL/XML質問文 XMLAGG( XMLELEMENT(NAME "社員", XMLATTRIBUTES(e. id AS "社員コード"), XMLELEMENT(NAME "氏名", XMLATTRIBUTES(e. ruby AS "フリガナ"), e. name), XMLFOREST( e. jobtitle AS "役職", XMLQUERY(‘$a/work-record/career/content’ PASSING e. work_history AS "a") AS "職歴一覧" ) ) ) FROM employee e RDB XML 36

DOM PROGRAMMING Document (data)をNodeの階層構造で認 識 DOM treeの作成 Root elementの取得 DOM treeのノードを巡回しながら処理 �DOM APIを利用 42

DOM PROGRAMMING Document (data)をNodeの階層構造で認 識 DOM treeの作成 Root elementの取得 DOM treeのノードを巡回しながら処理 �DOM APIを利用 42

DOM PROGRAMMINGの流れ Packageのインポート javax. xml. parser, org. w 3 c. dom Parserの生成と動作 Document. Builderのinstance生成(new.

DOM PROGRAMMINGの流れ Packageのインポート javax. xml. parser, org. w 3 c. dom Parserの生成と動作 Document. Builderのinstance生成(new. Document. Builder()) Document. Builder. Factoryのinstance生成(new. Instance()) パーザーの起動とDom treeの生成 Parse()がらDom tree(Documentの取得) DOM treeのノードを巡回しながらデータ処理(DOM APIを利用) Root element(Element)の取得: Documentのget. Document. Element()利 用 そのtag nameの取得:Elementのget. Tag. Name()利用 その子供(Node)の取得: Elementのget. First. Child()利用 子供のvalueの取得:Nodeのget. Node. Value()利用 43 get. Elements. By. Tag. Name、get. Sibling、get. Child. Nodes、…

import org. w 3 c. dom. *; import javax. xml. parsers. *; public class

import org. w 3 c. dom. *; import javax. xml. parsers. *; public class Hello. DOM { public static void main(String args[]) { try { Document. Builder. Factory factory = Document. Builder. Factory. new. Instance(); Document. Builder builder = factory. new. Document. Builder(); Document document = builder. parse("hello. xml"); Element root = document. get. Document. Element(); System. out. println("root element's name = [" + root. get. Tag. Name() + "]"); Element fchild = (Element)root. get. First. Child(); System. out. println("root's first child's name = [" + fchild. get. Tag. Name() + "]"); Node node = fchildget. First. Child(); System. out. println("root's first child's value = [" + node. get. Node. Value() + "]"); } catch (Exception e) { e. print. Stack. Trace(); } } } 44

root 例 XML file aisatsu fchild node message orei yoroshiku <? xml version=“ 1.

root 例 XML file aisatsu fchild node message orei yoroshiku <? xml version=“ 1. 0” ? > <aisetsu> <message>yoroshiku</message> <orei /> </aisetsu> Java program … Element root = document. get. Document. Element(); System. out. println("root element's name = [" + root. get. Tag. Name() + "]"); !! Element fchild = (Element)root. get. First. Child(); System. out. println("root's first child's name = [" + fchild. get. Tag. Name() + "]"); Node node = fchildget. First. Child(); System. out. println("root's first child's value = [" + node. get. Node. Value() + "]"); …. CAST Out put root element name = [aisatsu] root’s first child’s name = [message] root’s first child’s value = [yoroshiku] 45

SAX PARSERの動作メカニズム Default Handler 47

SAX PARSERの動作メカニズム Default Handler 47

SAX PROGRAMMINGの流れ Packageのインポート Javax. xml. parser, org. xml. sax. helpers Parserの生成と動作 SAXParserのインスタンス作成(new. SAXParser()) SAXParser.

SAX PROGRAMMINGの流れ Packageのインポート Javax. xml. parser, org. xml. sax. helpers Parserの生成と動作 SAXParserのインスタンス作成(new. SAXParser()) SAXParser. Factoryのインスタンス作成が必要(new. Instance()) parse()を用いてデータ分析開始 Event処理 start. Element(String uri, String local. Name, String q. Name, Attribute attribute) Characters(char[] ch, int start, int length) end. Element(String uri, String local. Name, String q. Name) … 48

SAX PROGRAMMINGについて public void start. Document () throws SAXException public void end. Document ()

SAX PROGRAMMINGについて public void start. Document () throws SAXException public void end. Document () throws SAXException Called when the Parser starts parsing the Current XML File. Called when the Parser Completes parsing the Current XML File. public void start. Element (String name, Attribute. List attrs) throws SAXException Called when the starting of the Element is reached. For Example if we have Tag called <Title>. . . </Title>, then this method is called when <Title> tag is Encountered while parsing the Current XML File. The Attribute. List Parameter has the list of all Attributes declared for the Current Element in the XML File. public void end. Element (String name) throws SAXException Called when the Ending of the current Element is reached. For example in the above explanation, this method is called when </Title> tag is reached 49

SAX PROGRAMMINGについて public void characters (char buf [], int offset, int len) throws SAXException

SAX PROGRAMMINGについて public void characters (char buf [], int offset, int len) throws SAXException While Parsing the XML file, if extra characters like space or enter Character are encountered then this method is called. If you don't want to do anything special with these characters, then you can normally leave this method blank. public void processing. Instruction (String target, String data) throws SAXException In the XML File if the parser encounters a Processing Instruction which is declared like this <? Program. Name: Books. Lib QUERY="author, isbn, price"? > Then this method is called where Target parameter will have "Program. Name: Books. Lib" and data parameter will have QUERY="author, isbn, price“. You can invoke a External Program from this Method if required. 50

import javax. xml. parsers. *; import org. xml. sax. helpers. *; public class Hello.

import javax. xml. parsers. *; import org. xml. sax. helpers. *; public class Hello. SAX extends Default. Handler { public static void main(String args[]) { try { SAXParser. Factory factory = SAXParser. Factory. new. Instance(); SAXParser parser = factory. new. SAXParser(); parser. parse ("hello_sax. xml", new Hello. SAX()); } catch (Exception e) { e. print. Stack. Trace(); } System. out. println("Done. "); } public void start. Element(String uri, String local. Name, String q. Name, Attributes attributes) throws SAXException { System. out. println("element start = [" + q. Name + "]"); } public void characters(char[] ch, int start, int length) throws SAXException { System. out. println("element content = [" + new String(ch, start, length) + "]"); } public void end. Element(String uri, String local. Name, String q. Name) throws SAXException { System. out. println("element end = [" + q. Name + "]"); } } 51

start. Document 例 XML file <? xml version=“ 1. 0” ? > <aisatsu> <message>yoroshiku</message>

start. Document 例 XML file <? xml version=“ 1. 0” ? > <aisatsu> <message>yoroshiku</message> <orei /> </aisatsu> processing. Instruction end. Document Output element start = [aisatsu] element start = [message] element content = [yoroshiku] element end = [message] element start = [orei] element end = [aisatsu] public void start. Element(String uri, String local. Name, String q. Name, Attributes attributes) throws SAXException { System. out. println("element start = [" + q. Name + "]"); } public void characters(char[] ch, int start, int length) throws SAXException { System. out. println("element content = [" + new String(ch, start, length) + "]"); } public void end. Element(String uri, String local. Name, String q. Name) throws SAXException { System. out. println("element end = [" + q. Name + "]"); } 52