A Semantic Web Primer輪読 2章(担当:間瀬)

セマンティックWeb・
メタデータ勉強会
#2-1
電気通信大学大学院 電気通信学研究科
情報工学専攻 M2
間瀬哲也
2. Structured Web Documents
in XML
Contents
•
•
•
•
•
•
•
Introduction
The XML Language
Structuring
Namespaces
Addressing and Querying XML Documents
Processing
Summary
HTML & XML
• HTML (HyperText Markup Language)
– Webページ記述の標準
– SGML(Standard generalized ML)から派生
– デバイスやシステムに非依存
• XML (eXtensible Markup Language)
– HTMLの欠点を克服するために開発
HTML vs XML
• 共通点
– タグを使用
– 人間は理解しやすい
• 相違点
– 終了タグ
– 計算機可読性
– 拡張性
– 表示能力
XML applications
•
•
•
•
•
•
•
MathXML (mathmatics)
BSML (bioinformatics)
HRML (human resources)
AML (astronomy)
NewsML (news)
IRML (investment)
その他
– SVG (Scalable Vector Graphics),SMIL (Synchronized Multimedia
Integration Language),RDF (Resource Description Framework)
Prolog
• XML宣言
• 文書型宣言
<?xml version=“1.0” encoding=“UTF-8” ?>
← XML宣言
<!DOCTYPE event SYSTEM “event.dtd” >
← 文書型宣言
<event>
<fireworks1>
<name>足立の花火大会</name>
<place>荒川河川敷</place>
<date>2005.07.28</date>
</fireworks1>
</event>
Elements
• 要素 ::= 開始タグ 内容 終了タグ | 空要素
• 内容 ::= テキスト | 要素
• 空要素 ::= <name></name> | <name />
<?xml version=“1.0” encoding=“UTF-8” ?>
<!DOCTYPE event SYSTEM “event.dtd” >
<event>
<fireworks1>
<name>足立の花火大会</name>
<place>荒川河川敷</place>
<date>2005.07.28</date>
</fireworks1>
</event>
← 要素
Attributes
• 要素に情報を付加
– 一意に識別可能にする
– 空要素に意味を持たせる
• 名前と値の対
<?xml version=“1.0” encoding=“UTF-8” ?>
<!DOCTYPE event SYSTEM “event.dtd” >
<event>
<fireworks name=“足立の花火大会”
place=“荒川河川敷”
date=“2005.07.28” />
</event>
← 属性
Comments
• パーサに無視してくれと頼む
例)
<!-- コメントだから無視してちょーだい -->
• タグの中に記述してはいけない
• コメント中に「 -- 」は使えない
Processing Instructions (PIs)
• アプリケーションに対して処理をさせる
<?ターゲット 処理命令?>のように記述
例)
<?stylesheet type=“text/css”
href=“sample.css”?>
Well-Formed XML Documents
• 整形式XML文書
– 構文的に正しければよい
• 構文的に正しいとは?
– ルート要素はひとつだけ
– 開始タグとそれに対応する終了タグがある
– タグがオーバーラップしていない
<creature><animal>Dog</creature></animal>
– 属性名が一意である
– DTDに則しているかどうかは関係ない
Valid XML Documents
• 妥当なXML文書
– 整形式であり,かつ文書型定義に則している
• DTD, XML Schema
Well-Formed
Valid
The Tree Model of XML Documents
• 整形式のXMLは木構造で表現できる
– 要素の順番は重要
– 属性の順番は重要ではない
Root
event
fireworks1
fireworks2
name
place
date
足立の花火大会
荒川河川敷
2005.07.28
DTD
• 要素名や階層構造などを定義
• 内部DTD
– XML文書内に直接記述
• 外部DTD
– XML文書とは別のファイルに作成
– XML文書には参照情報を記述
The Structure of DTD
•
•
•
•
要素型宣言 (element type declaration)
属性リスト宣言 (attribute list declaration)
実体宣言 (entity declaration)
記法宣言 (notation declaration)
<!DOCTYPE menu [
<!ELEMENT menu (name, price, explanation)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT explanation (#PCDATA)>
<!ATTLIST name alias CDATA #REQUIRED>
<!ENTITY …>
<!NOTATION …>
]>
文書型宣言
要素型宣言
属性リスト宣言
実体宣言
記法宣言
Keywords of DTD
• #PCDATA
– その要素はテキストしか持たない(子要素なし)
cf. 子要素を持つときには子要素名にする
• <!ELEMENT parent (child1+, child2*)>
• #REQUIRED
– その属性は省略不可能
cf. #IMPLIED (省略可)
• CDATA
– その属性値は文字データ
cf. ID (一意識別子),IDREF (IDへの参照)
XML Schema
• DTDはXMLの文法に完全に従っていないからダ
メだ!!継承機能もないし…
• 新たなスキーマ言語が必要だ
• そこで登場,本命“XML Schema”
– 以下を定義
•
•
•
•
要素の階層構造
要素名
属性名,属性値
要素・属性のデータ型
The Structure of XML Schema
<?xml version=“1.0” encode=“UTF-8” ?>
<xsd:schema
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>
<xsd:element name=“NewMenu” type=“menu”>
<xsd:complexType name=“menu”>
<xsd:sequence>
<xsd:element name=“Name” type=“nameType” />
<xsd:element name=“Price” type=“xsd:int” />
<xsd:element name=“Explanation” type=“xsd:string” />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name=“nameType”>
<xsd:element name=“name” type=“xsd:string” />
<xsd:attribute name=“alias” type=“xsd:string”
use=“optional” />
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマ宣言
要素宣言
複合型宣言
出現順指定
属性宣言
etc of XML Schema
• name
– 要素・データ型・属性の名前を指定
• type
– 要素・属性のデータ型を指定
• 名前空間に依存(組み込みデータ型)
• complexType や simpleType によって定義も可能
• use
– 属性が省略可能か明記
Data Type Extension
• あるデータ型をもとにして拡張することも可能
• さっきの例を使うと…
<complexType
name=“extendedNameType”>
<complexType
<sequence>
name=“extendedNameType”>
<element name=“name”
<extension base=“nameType”>
type=“string” />
<sequence>
<element name=“id” type=“int” />
<element name=“id” type=“int” />
</sequence>
</sequence>
<attribute name=“alias”
<attribute name=“developer”
type=“string”
type=“string”
つまり
use=“optional” />
use=“optional” />
<attribute name=“developer”
</extension>
type=“string”
</complexType>
use=“optional” />
</complexType>
Data Type Restriction
• あるデータ型に制約をつける
• さっきの例を使うと
<complexType
name=“restrictedNameType”>
<restriction base=“nameType”>
<sequence>
<element name=“name” type=“string”
maxOccurs=“2” />
</sequence>
<attribute name=“alias”
type=“string”
use=“required” />
</restriction>
</complexType>
about Namespace
• 複数のスキーマを使ったときに名前の衝突が起
こるのを避ける
– 接頭辞をつけることで,どのスキーマの名前空間を使
うかを指定
prefix:name
• 名前空間の宣言
xmlns:prefix=“location” (locationはURI)
– 接頭辞を省略するとデフォルトの名前空間となる
(接頭辞の無い要素名はデフォルトNSを参照)
XPath
XML文書中のノードの位置を指定
– 軸・ノードテスト・述語で構成
• /a/b
– aという要素の下にあるbという要素
• //b
– 全要素のなかでbという要素ノードすべて
• /a/@attribute
– aという要素のattributeという属性ノード
• //c/@attr=“XXX”
– cという要素で属性attrがXXXな属性ノード
XPath(2)
• //c[@attr=“XXX”]
– 属性attrがXXXなcという要素
• //d[1]
– XML文書中で最初に出てくるdという要素
• //d[1]/e[last()]
– 最初のdという要素の中で最後のeという要素
• //e[not @attr]
– 属性attrを持たないすべてのeという要素
the Role of Stylesheet
• XMLには書式化の情報は含まれていない!
→ スタイルシートで出力形式を決める
→ 一度で何度もおいしい
• スタイルシート
– CSS2 (Cascading Style Sheet level 2)
– XSL (eXtensible Stylesheet Language)
• 変換(XSLT)と書式化(XSL-FO)
– XSLT (XSL Transformation)
• 異なるスキーマをもつXML文書とのやりとりにも役立つ
Summary
•
•
•
•
•
•
XMLはメタ言語
文書の構造はスキーマによって強化
XMLは内容や構造を出力書式から分離
XMLは構造化情報のデファクトスタンダード
XMLは異アプリ間の情報変換をサポート
XMLはQLにサポートされる