NewsML
NewsML
解説と
解説と
NewsML
NewsML
-
-
Toolkit
Toolkit
紹介
紹介
XMLコンソーシアムWeek
2002年6月13日
XMLコンソーシアム
応用技術部会 NewsML-WG
日本電気株式会社 新田 一樹
NewsML
NewsML
NewsML
-
-
Toolkit
Toolkit
とは?
とは?
(1)
(1)
ロイター通信社が無償で提供している
ロイター通信社が無償で提供している
NewsML
NewsML
用ラ
用ラ
イブラリ
イブラリ
NewsML
NewsML
データを読み込む
データを読み込む
必要なデータを取得する
必要なデータを取得する
NewsML
NewsML
データを変更する
データを変更する
(ver2.0
(ver2.0
より
より
)
)
期待される効果
期待される効果
プログラマーの作業効率化
プログラマーの作業効率化
バグ作りこみの回避
バグ作りこみの回避
2種類の
2種類の
API
API
ライブラリ
ライブラリ
LLT (Low Level Toolkit)
LLT (Low Level Toolkit)
ALT(Application
ALT(Application
Level Toolkit)
Level Toolkit)
NewsMLを操作する
のに特化した、プロ
グラミングツール!
保証の問題、システ
ムの作り方などの要
件による
今回はLLTを中心に解説
NewsML
NewsML
-
-
Toolkit
Toolkit
とは?
とは?
(2)
(2)
NewsML
NewsML
用プログラミング
用プログラミング
API
API
DOM(Document
DOM(Document
Object Model)
Object Model)
をベースとする
をベースとする
API(Application
API(Application
Program Interface)
Program Interface)
DOM
DOM
プログラミングに比べて
プログラミングに比べて
NewsML
NewsML
アクセスが容易
アクセスが容易
NewsML
NewsML
の構造定義に則したデータアクセスを提供
の構造定義に則したデータアクセスを提供
プラットフォームは
プラットフォームは
Java
Java
サポートしている言語は
サポートしている言語は
Java
Java
のみ(
のみ(
2002
2002
年
年
5
5
月)
月)
バージョン
バージョン
ver
ver
0.1alpha
0.1alpha
: 2000
: 2000
年
年
12
12
月
月
1
1
日
日
Reuters
Reuters
のサイトにて公開
のサイトにて公開
ver
ver
1.0
1.0
: 2001
: 2001
年
年
5
5
月
月
30
30
日
日
SourceForge
SourceForge
にて公開
にて公開
ver
ver
1.1beta
1.1beta
: 2001
: 2001
年
年
11
11
月
月
25
25
日
日
SourceForge
SourceForge
にて公開
にて公開
ver
ver
1.1
1.1
: 2001
: 2001
年
年
12
12
月
月
12
12
日
日
SourceForge
SourceForge
にて公開
にて公開
(
(
ALT
ALT
ver
ver
1.0 beta
1.0 beta
: 2001
: 2001
年
年
12
12
月
月
20
20
日
日
SourceForge
SourceForge
にて公開)
にて公開)
ver
ver
2.0
2.0
: 2002
: 2002
年
年
4
4
月
月
21
21
日
日
SourceForge
SourceForge
にて公開
にて公開
(
NewsML
NewsML
-
-
Toolkit
Toolkit
の機能概要
の機能概要
NewsML
NewsML
-
-
DOM
DOM
ツリーの生成
ツリーの生成
NewsML
NewsML
ファイルをもとに、
ファイルをもとに、
NewsML
NewsML
ツリーを簡単に生成します
ツリーを簡単に生成します
デフォルトは
デフォルトは
Xerces
Xerces
パーサ
パーサ
(http://xml.apache.org/xerces2
(http://xml.apache.org/xerces2
-
-
j/)
j/)
別のパーサを利用することも可能です(独自の拡張が必要)
別のパーサを利用することも可能です(独自の拡張が必要)
データ取得処理のインターフェースと実装
データ取得処理のインターフェースと実装
N
N
ewsML
ewsML
の要素に対応したノードオブジェクト
の要素に対応したノードオブジェクト
外部リソースの
外部リソースの
DefaultVocabulary
DefaultVocabulary
の取得機能
の取得機能
要素の文字列表現を取得機能(
要素の文字列表現を取得機能(
ver1.1
ver1.1
)
)
コンフォーマンスチェック(
コンフォーマンスチェック(
Ver1.1)
Ver1.1
)
DateAndTime
DateAndTime
のフォーマットの妥当性
のフォーマットの妥当性
FormalName
FormalName
の妥当性
の妥当性
DefaultVocabularyFor
DefaultVocabularyFor
の評価
の評価
etc...
etc...
デモ・アプリケーション
デモ・アプリケーション
NewsML
NewsML
-
-
Explorer
Explorer
NewsML-Toolkit
NewsML
NewsML
-
-
Toolkit
Toolkit
の配布について
の配布について
提供社(者)
提供社(者)
Reuters (http://
Reuters (http://
www.reuters.co.uk
www.reuters.co.uk
/)
/)
通信社。
通信社。
NewsML
NewsML
発案社。
発案社。
WAVO (
WAVO (
http://
http://
www.wavo.com
www.wavo.com
/
/
)
)
ソフトウェア会社。
ソフトウェア会社。
XMLNews
XMLNews
関連の開発など。詳細不明。
関連の開発など。詳細不明。
David
David
Megginson
Megginson
(
(
http://
http://
www.megginson.com
www.megginson.com
/
/
)
)
SAX
SAX
を考案・開発
を考案・開発
NITF
NITF
の初期バージョンをもとに
の初期バージョンをもとに
XMLNews
XMLNews
を開発
を開発
W3C
W3C
の
の
"XML Information Set Working Group"
"XML Information Set Working Group"
の元議長
の元議長
入手先
入手先
SourceForge
SourceForge
http://newsml
NewsML
NewsML
-
-
Toolkit
Toolkit
に必要な環境
に必要な環境
for NewsML
for NewsML
-
-
Toolkit
Toolkit
Ver
Ver
1.0
1.0
JDK1.2
JDK1.2
以降
以降
NewsML
NewsML
-
-
Toolkit ver1.0 (
Toolkit ver1.0 (
http://newsml
http://newsml
-
-
toolkit.sourceforge.net
toolkit.sourceforge.net
/
/
)
)
DOM Level2
DOM Level2
対応の
対応の
XML
XML
パーサ
パーサ
(
(
Xerces(
Xerces(
http://xml.apache.org/xerces
http://xml.apache.org/xerces
-
-
j
j
/
/
))
))
for NewsML
for NewsML
-
-
Toolkit
Toolkit
Ver
Ver
1.1
1.1
-
-
Ver
Ver
2.0
2.0
JDK1.2
JDK1.2
以降
以降
NewsML
NewsML
-
-
Toolkit ver1.1 (
Toolkit ver1.1 (
http://newsml
http://newsml
-
-
toolkit.sourceforge.net
toolkit.sourceforge.net
/
/
)
)
DOM Level2
DOM Level2
対応の
対応の
XML
XML
パーサ
パーサ
(
(
Xerces(
Xerces(
http://xml.apache.org/xerces
http://xml.apache.org/xerces
-
-
j
j
/
/
))
))
SAXPath
SAXPath
(
(
http://
http://
saxpath.sourceforge.net
saxpath.sourceforge.net
/
/
)
)
–
–
event
event
-
-
based XPath
based XPath
parsing
parsing
Jaxen
Jaxen
(
(
http://
http://
jaxen.sourceforge.net
jaxen.sourceforge.net
/
/
)
)
-
-
Java XPath Engine based
Java XPath Engine based
on
on
SAXPath
SAXPath
Gnu Regular Expression library
Gnu Regular Expression library
(
(
http://
http://
www.cacas.org/~wes/java
www.cacas.org/~wes/java
/
/
)
)
for
for
unittest
unittest
:
:
JUnit
JUnit
(
(
http://
http://
www.junit.org
www.junit.org
/
/
)
)
for building: Ant (
NewsML
NewsML
-
-
Toolkit
Toolkit
インストール方法
インストール方法
共通
共通
必要なファイルをダウンロードする
必要なファイルをダウンロードする
環境変数
環境変数
CLASSPATH
CLASSPATH
に次に示す
に次に示す
Jar
Jar
ファイルを定義する
ファイルを定義する
Ver
Ver
1.0
1.0
xerces.jar
xerces.jar
newsml
newsml
-
-
toolkit.jar
toolkit.jar
Ver
Ver
1.1 or
1.1 or
Ver
Ver
2.0
2.0
xerces.jar
xerces.jar
newsml
newsml
-
-
toolkit.jar
toolkit.jar
,
,
newsml
newsml
-
-
conformance.jar
conformance.jar
,
,
newsml
newsml
-
-normalize.jar
normalize.jar
(only
(only
newsml
newsml
-
-
toolkit.jar
toolkit.jar
with ver2.0)
with ver2.0)
saxpath.jar
saxpath.jar
jaxen
jaxen
-
-
full.jar
full.jar
( don
( don
’
’
t use Final Version! not work... )
t use Final Version! not work... )
junit.jar
junit.jar
gnu
gnu
-
-
regexp
regexp
-
-
1.1.4.jar
1.1.4.jar
ant.jar
プログラミング概説
プログラミング概説
(1)
(1)
ドキュメントオブジェクトの生成
ドキュメントオブジェクトの生成
(NTK)
(NTK)
ドキュメントオブジェクトの生成
ドキュメントオブジェクトの生成
(DOM)
(DOM)
File
file = new
File
(
“kiji-sample.xml”
);
DocumentBuilderFactory
factory =
DocumentBuilderFactory
.newInstance();
DocumentBuilder
builder = factory.newDocumentBuilder();
Document
doc = builder.parse( file );
DOMNewsMLFactory
factory = new
DOMNewsMLFactory
();
プログラミング概説
プログラミング概説
(3)
(3)
NewsML
NewsML
の要素に対応したクラス
の要素に対応したクラス
<NewsComponentDuid="NC0001"
xml:lang="ja-JP" Essential="no" EquivalentsList="no"> <Comment>関連写真があります</Comment> <NewsLines> <HeadLine>鈴木2得点</HeadLine> <SubHeadLine>日本準決勝進出</SubHeadLine> <ByLine>新聞太郎</ByLine> <DateLine>2001年6月2日、新潟県、新潟スタジアム</DateLine> <CreditLine>Pressnet</CreditLine>
<CopyrightLinexml:lang="en">
NSK all rights reserved.</CopyrightLine> <RightsLine> 2次使用禁止、新聞紙面用メディア使用禁止</RightsLine> <SeriesLine>コンフェデ杯特集</SeriesLine> <KeywordLine>コンフェデ杯</KeywordLine> <KeywordLine>サッカー</KeywordLine> <NewsLine>
<NewsLineTypeFormalName="Karimidashi" /> <NewsLineText>○△サンプル</NewsLineText> </NewsLine> </NewsLines> ...
このクラス図に表記したメソッド
名はホンの一部です
プログラミング概説
プログラミング概説
(4)
(4)
要素の選択と要素値・属性値の取得
<
Metadata
>
<
MetadataType
FormalName
=
"NskAreaInformation"
/>
<
Property
FormalName
=
"NskRelevantArea"
>
<
Property
FormalName
=
"NskCountry"
Value
=
"JPN"
/>
<
Property
FormalName
=
"NskJpnAreaCode"
Value
=
"15201"
/>
<
/Property
>
<
Property
FormalName
=
"NskRelevantArea"
>
<
Property
FormalName
=
"NskCountry"
Value
=
"KOR"
/>
<
/Property
>
<
Property
FormalName
=
"NskRelevantArea"
>
<
Property
FormalName
=
"NskCountry"
Value
=
"CMR"
/>
<
/Property
>
<
Property
FormalName
=
"NskOriginatedArea"
>
<
Property
FormalName
=
"NskCountry"
Value
=
"JPN"
/>
<
Property
FormalName
=
"NskJpnAreaCode"
Value
=
"15201"
/>
<
Property
FormalName
=
"NskLocation"
Value
=
"新潟スタジアム"
/>
<
/Property
>
<
/Metadata
>
要素の選択と要素値・属性値の取得
新聞協会が定め
た地域情報表現
のための
Metadata
プログラミング概説
プログラミング概説
(5)
(5)
DOM
DOM
プログラミング
プログラミング
NTK
NTK
プ
プ
ログラミング
ログラミング
// エレメントのタグ名でノードリストを取得する
NodeList
loList
=
doc.
getElementsByTagName
("Property");
// 取得したノードリストは、階層を問わず、Property
要素すべてのリストを
// 持っている。一覧表示してみる。
for ( int i = 0 ; i <
loList
.getLength() ; i++ ) {
Element
loElm = (Element)(
loList
.item(i) );
System.out.println(
"Property["
+ i + "]:
FormalName = "
+
loElm.getAttribute("FormalName") + " :
Value = "
+
loElm.getAttribute("Value") );
}
NewsMLSession
session =
newsML.getSession();
// Property要素をXPath表現で取得します。
// ほしいのはすべてのProperty要素なので、//ではじ
めます。
BaseNode[]
baseNodes
=
session.
getNodesByXPath
( (BaseNode)aoNew
sML, "//Property"
);
// 取得したProperty要素を一覧表示してみます
Property
prop = null;
for ( int i = 0 ; i <
baseNodes
.length; i++ ) {
prop = (Property)
baseNodes
[i];
System.out.println("Property["
+ i + "]:
FormalName = "
+
prop.getName() + " : Value = "
+
prop.getValue() );
}
Property[0]: FormalName = NskRelevantArea: Value =Property[1]: FormalName = NskCountry: Value = JPN
Property[2]: FormalName = NskJpnAreaCode: Value = 15201
Property[3]: FormalName = NskRelevantArea: Value = Property[4]: FormalName = NskCountry: Value = KOR
Property[5]: FormalName = NskRelevantArea: Value = Property[6]: FormalName = NskCountry: Value = CMR
Property[7]: FormalName = NskOriginatedArea: Value = Property[8]: FormalName = NskCountry: Value = JPN
Property[9]: FormalName = NskJpnAreaCode: Value = 15201
Property[10]: FormalName = NskLocation: Value = 新潟スタジ アム
プログラミング概説
プログラミング概説
(2)
(2)
BaseNode
baseNode =
session.
getNodeByXPath
( newsML,
"//Property[@FormalName=¥"NskOriginatedArea¥"]/Property[@FormalNa
me=¥"NskJpnAreaCode¥"]“
);
<Metadata>
<MetadataTypeFormalName="NskAreaInformation"/> <PropertyFormalName="NskRelevantArea">
<PropertyFormalName="NskCountry"Value="JPN"/>
<PropertyFormalName="NskJpnAreaCode"Value="15201"/> </Property>
<PropertyFormalName="NskRelevantArea">
<PropertyFormalName="NskCountry"Value="KOR"/> </Property>
<PropertyFormalName="NskRelevantArea">
<PropertyFormalName="NskCountry"Value="CMR"/> </Property>
<PropertyFormalName="NskOriginatedArea">
<PropertyFormalName="NskCountry"Value="JPN"/>
<PropertyFormalName="NskJpnAreaCode"Value="15201"/> <PropertyFormalName="NskLocation"Value="新潟スタジアム"/> </Property> </Metadata>
地域コード
地域コード
意味:
関連場所
意味:
発生場所
同じ地域コードでも、
親Propertyの値で
意味が違う!
XPath
XPath
表現の対応
表現の対応
(ver1.1
(ver1.1
以降
以降
)
)
地域コー
ド
コンフォーマンスチェック
コンフォーマンスチェック
次のようなコンフォーマンスチェッククラスがある
次のようなコンフォーマンスチェッククラスがある
日付チェック
日付チェック
ISO
ISO-
-8601
8601形式に適合しているか?
形式に適合しているか?
日付として間違った日付で
日付として間違った日付で
はないか?
はないか?
NewsIdentifier
NewsIdentifier
PublicIdentifier
PublicIdentifier
が他のエレメント(
が他のエレメント(
NewsItemId
NewsItemId
など)をと
など)をと
整合しているか?
整合しているか?
NewsComponent
NewsComponent
Role
Role
があるか?
があるか?
/
/
BasisForChoice
BasisForChoice
にマッチするメン
にマッチするメン
バーがあるか?
バーがあるか?
CatalogTest
ContentItemTest
DateTimeTest
DefaultVocabularyForTest
EuidTest
FormalNameTest
NewsComponentTest
NewsIdentifierTest
NewsItemTest
NewsLineTest
PatternTest
PropertyTest
RefTest
ResourceTest
RevisionIdTest
RevisionStatusTest
TopicSetTest
TopicUseTest
XMLLangTest
コンフォーマンスチェックを管理するクラス
コンフォーマンスチェックを管理するクラス
NewsMLTestManager
NewsMLTestManager
クラスにより、複数のコンフォーマンス
クラスにより、複数のコンフォーマンス
チェックの実行、レポート機能を提供
チェックの実行、レポート機能を提供
NewsML
NewsML
としての仕様をチェックするクラス
としての仕様をチェックするクラス
NewsML
NewsMLの機能仕様書
の機能仕様書(ver1.0)
(ver1.0)に従ったノードのチェッククラス
に従ったノードのチェッククラス
クラスをインスタンス化して
クラスをインスタンス化して
run(...)メソッドにチェックしたいノードの
run(...)
メソッドにチェックしたいノードの
BaseNode
BaseNodeオブジェクトを渡して実行する。エラー時は例外をスロー。
オブジェクトを渡して実行する。エラー時は例外をスロー。
ただしバグもある(
ただしバグもある(
DefaultVocabularyForのチェック、
DefaultVocabularyFor
のチェック、
DateAndTime
DateAndTime
のチェックなど)
(参考)
(参考)
NewsML
NewsML
-
-
Checker
Checker
XSLT
XSLT
を使った
を使った
NewsML
NewsML
コンプライアンスチェッカー
コンプライアンスチェッカー
IPTC
IPTC
より提供
より提供
XML
XML
の妥当性検証だけでなく、
の妥当性検証だけでなく、
NewsML
NewsML
の仕様に適合しているかど
の仕様に適合しているかど
うかをチェックする
うかをチェックする
http://www.iptc.org/site/NewsML/NewsMLConformance.zip
NewsML
NewsML
-
-
Toolkit
Toolkit
を利用するメリット
を利用するメリット
オープンソース
オープンソース
フリー(
フリー(
GNU Lesser General Public License)
GNU Lesser General Public License
)
再配布可能
再配布可能
煩雑な
煩雑な
DOM
DOM
を隠蔽するラッパー
を隠蔽するラッパー
DOM
DOM
プログラミングをより簡単にするためのメ
プログラミングをより簡単にするためのメ
ソッドを実装
ソッドを実装
NewsML
NewsML
の思想に基づいたクラス設計
の思想に基づいたクラス設計
NewsML
NewsML
の構造と要素・属性の関係をクラス化
の構造と要素・属性の関係をクラス化
HeadLineGroup
HeadLineGroup
,
,
SubjectCodeItem
SubjectCodeItem
など、
など、
NewsML
NewsML
NewsML
-
-
Toolkit
Toolkit
の課題
の課題
処理速度
処理速度
DOM
DOM
ベースの処理なので処理速度に限界あり
ベースの処理なので処理速度に限界あり
大量のドキュメントのバッチ処理には向かない
大量のドキュメントのバッチ処理には向かない
ノードの更新処理
ノードの更新処理
ver1.1
ver1.1
では、更新処理は未実装
では、更新処理は未実装
ver2.0
ver2.0
では、ノードレベルでの更新・追加処理実
では、ノードレベルでの更新・追加処理実
装(コンフォーマンスは維持されるとは限らない)
装(コンフォーマンスは維持されるとは限らない)
DTD
DTD
の変更への対応
の変更への対応
NewsMLv1.0.dtd
NewsMLv1.0.dtd
に即したクラス設計になってい
に即したクラス設計になってい
るが、
るが、
DTD
DTD
が変更になった場合はクラスの構成
が変更になった場合はクラスの構成
が変わるため、変更に対応していく必要がある
が変わるため、変更に対応していく必要がある
Toolkit
Toolkit
デモンストレーション
デモンストレーション
NewsML-Toolkitを使ったデモンスト
レーション用プログラムを作成しました。
簡単なコンフォーマンスチェックも実装
してみました。
Web
Web
Web
サービス実験における
サービス実験における
NewsML
NewsML
-
-
WG
WG
の役割
の役割
新聞社
新聞社
/
/
通信社との
通信社との
NewsML
NewsML
データ借用交渉
データ借用交渉
XML
XML
コンソーシアムに参加している社と交渉
コンソーシアムに参加している社と交渉
Web
Web
サービスで利用できるように
サービスで利用できるように
NewsML
NewsML
の説明
の説明
Web
Web
サービス
サービス
WG
WG
に対して、実装方式の提案
に対して、実装方式の提案
実現するために
実現するために
NewsML
NewsML
を一部修正
を一部修正
その他
その他
画像借用のため、画像に透かしを入れる
画像借用のため、画像に透かしを入れる
NewsML-WG
応用技術部会
Webサービス-WG
新聞社・通信社
デモ用コンテンツと提供元紹介
デモ用コンテンツと提供元紹介
デモのためのニュースコンテンツを提供して
デモのためのニュースコンテンツを提供して
いただいた社(団体)
いただいた社(団体)
※
※
順不同
順不同
読売新聞社様
読売新聞社様
新幹線
新幹線
NewsML
NewsML
も提供
も提供
共同通信社様
共同通信社様
毎日新聞社様
毎日新聞社様
Java
Java
コンソーシアム様
コンソーシアム様
Java
Java
コンソーシアムで集めたニュース素材を
コンソーシアムで集めたニュース素材を
NewsML
NewsML
-
-
WG
WG
で
で
NewsML
NewsML
変換を行ったもの
変換を行ったもの
デモ用データのため正式な各社のサービス用フォー
マットとは必ずしも同じではありません
Web
Webサービスで利用しやすくするための工夫
サービスで利用しやすくするための工夫(1)
(1)
NewsService
NewsService
要素によるニュースの判別
要素によるニュースの判別
<NewsEnvelope>
<SentFrom>
<Party
Scheme
=
"NskTiffServiceId"
FormalName
=
"YOMIURI"
/>
</SentFrom>
<DateAndTime>20020329T033300+0900</DateAndTime>
<NewsService
Scheme
=
"XmlConsNewsService"
FormalName
=
"XMLConsYomiuri"
/>
<NewsProduct
Scheme
=
"NskNewsProduct"
FormalName
=
"NskNewsML:1"
/>
</NewsEnvelope>
MainichiJapanese
毎日コンテンツ
NewsService名
コンテンツ種別
XMLConsJavaCon
Javaコンソーシアム
XMLConsDenko
電光ニュース
NewsPack
共同ニュース
XMLConsYomiuri
読売コンテンツ
Web
Webサービスで利用しやすくするための工夫
サービスで利用しやすくするための工夫(2)
(2)
<NewsComponent
Duid
="NC-C-01">
<Role
FormalName
="Main"/>
<ContentItem>
<MediaType
Scheme
="IptcMediaTypes"
FormalName
="Text"/>
<Format
Scheme
="NskFormats"
FormalName
="NskBasicText"/>
<MimeType
Scheme
="IptcMimeTypes"
FormalName
="text/xml"/>
<DataContent>
<body>
<p> 東京大学の卒業式が....
</body>
</DataContent>
</ContentItem>
</NewsComponent>
<NewsComponent
Duid
="NC-C-02">
<Role
FormalName
="Supplementary"/>
<ContentItem
Href
="./20020329h14.jpg">
<MediaType
Scheme
="IptcMediaTypes"
FormalName
="Photo"/>
<MimeType
Scheme
="IptcMimeTypes"
FormalName
="image/jpeg"/>
</ContentItem>
</NewsComponent>
Graphic
Photo
Text
ComplexData
Video
Audio
Topicset.iptc-mediatype.xml
MediaType
MediaType
要
要
素によるコンテンツ種別の判断
素によるコンテンツ種別の判断
XSLT
XSLT
スタイルシートの提供
スタイルシートの提供
提供したコンテンツの表示用スタイルシート
提供したコンテンツの表示用スタイルシート
新幹線NewsML表示例
読売コンテンツ表示例
検索モデルと対応する
検索モデルと対応する
NewsML
NewsML
要素
要素
(1)
(1)
SubjectCode
SubjectCode
での検索
での検索
IPTC
IPTC
が定めたコンテンツの内容に関する分類コードで、
が定めたコンテンツの内容に関する分類コードで、
topicset.iptc
topicset.iptc
-
-subjectcode.xml
subjectcode.xml
というトピックセットで定義されている
というトピックセットで定義されている
SubjectCode
SubjectCode
は
は
8
8
桁の数字で表現
桁の数字で表現
04009
001
Subject(大分類) SubjectMatter(中分類) SubjectDetail(小分類)<
DescriptiveMetadata
>
<
SubjectCode
>
<!--スポーツ-->
<
Subject
FormalName
=
"15000000"
/>
<!-- サッカー -->
<
SubjectMatter
FormalName
=
"15054000"
/>
<!-- プロフェッショナル -->
<
SubjectQualifier
FormalName
=
"15000010"
/>
<
/SubjectCode
>
<
/DescriptiveMetadata
>
(例)
世界共通コード
世界共通コード
IPTC
IPTC
のみが定義することがで
のみが定義することがで
きる
きる
ユーザによる
ユーザによる
TopicSet
TopicSet
の拡張
の拡張
は許されていない
は許されていない
SubjectQualifier
SubjectQualifier
要素によりさ
要素によりさ
らに細かい分類情報を付加可
らに細かい分類情報を付加可
能
能
検索モデルと対応する
検索モデルと対応する
NewsML
NewsML
要素
要素
(2)
(2)
日付による検索
日付による検索
NewsML
NewsML
にはさまざまな日付情報を定義できる
にはさまざまな日付情報を定義できる
最初の版が作成された日時。ISO-8601形式。
NewsML/NewsItem/NewsManagement/
FirstCreated
著作権の期間を表す。自然言語記述
NewsML/NewsItem/NewsComponent/RightsMet
adata/UsageRights/
StartDate
NewsML/NewsItem/NewsComponent/RightsMet
adata/UsageRights/
EndDate
ニュースの作成日および場所の自然言語記述
NewsML/NewsItem/NewsComponent/
DateLine
著作権日付の自然言語記述
NewsML/NewsItem/NewsComponent/RightsMet
adata/
CopyrightDate
その版が作成された日時。ISO-8601形式。
NewsML/NewsItem/NewsManagement/
日付を表すラベル。ユーザ指向。形式は問わない
NewsML/NewsItem/Identification/
DateLabel
日付識別子( ProviderId要素で表すドメインネーム
が存在した日付けである必要がある)。その版が作
られた日付とは限らない。YYYYMMDD形式
NewsML/NewsItem/Identification/
DateId
NewsMLデータの配信日時。ISO-8601形式
NewsML/NewsEnvelope/
DateAndTime
対象にし やすい検索モデルと対応する
検索モデルと対応する
NewsML
NewsML
要素
要素
(3)
(3)
ニュースの提供元/作成者による検索
ニュースの提供元/作成者による検索
作成者名などによる部分一致検索
作成者名などによる部分一致検索
ByLine
ByLine
要素は作成者に関する情報を格納する要素。
要素は作成者に関する情報を格納する要素。
人間向けに自然言語記述形式。
人間向けに自然言語記述形式。
より厳密な検索
より厳密な検索
Provider
Provider
要素、
要素、
Creator
Creator
要素は
要素は
Party
Party
要素により提供社、作成者を指定
要素により提供社、作成者を指定
Party
Party
要素では
要素では
FormalName
FormalName
属性で
属性で
TopicSet
TopicSet
で定義されている値を使
で定義されている値を使
う必要があるので記述形式によらない厳密な検索が可能
う必要があるので記述形式によらない厳密な検索が可能
<AdministrativeMetadata>
<
Provider
>
<
Party
FormalName
=
"NSK"
/>
<
/Provider
>
<
Creator
>
<
Party
FormalName
=
"NSK"
/>
<
/Creator
>
</AdministrativeMetadata>
topicset.nsk-party.xml
topicset.iptc-provider.xml
<NewsLines>
<HeadLine>鈴木2得点
</HeadLine>
<SubHeadLine>日本準決勝進出
</SubHeadLine>
<ByLine>新聞太郎</ByLine>
<DateLine>2001年6月2日、新潟
県、新潟スタジアム</DateLine>
検索モデルと対応する
検索モデルと対応する
NewsML
NewsML
要素
要素
(4)
(4)
コンテンツ種別検索
コンテンツ種別検索
<ContentItem>
<MediaType
FormalName="Text"/>
<Format
Scheme="NskFormats"
FormalName="NskBasicTe
xt"/>
<MimeType
FormalName="text/xml"/>
...
NskBasicText
ComplexData
Video
Audio
Photo
Graphic
Text
MediaType
GIF89a interlaced
XHTML
SVG
EPS Adobe
Illustrator v9.0
Compatible
MPEG
IIM
Format
text/xml
text/html
image/bmp
audio/mp3
application/x-latex
application/x-binhex
text/vnd.IPTC.NITF
MimeType
TopicSet(IPTC作
成や日本新聞協会
が作成している)で
定義されているもの
の一部
検索モデルと対応する
検索モデルと対応する
NewsML
NewsML
要素
要素
(5)
(5)
DataContent
DataContent
内全文検索
内全文検索
DataContent
DataContent
要素は
要素は
DTD
DTD
で
で
ANY
ANY
と宣言されてい
と宣言されてい
る
る
<!ELEMENT
<!ELEMENT
DataContent
DataContent
ANY>
ANY>
プレーンテキスト
プレーンテキスト
or XML or CSV etc...
or XML or CSV etc...
全文検索対象とする
全文検索対象とする
今後、データの表現方法が標準化されればそのデー
今後、データの表現方法が標準化されればそのデー
タ用の検索方法を考える
タ用の検索方法を考える
…
…
–
–
NITF
NITF
Web
Web
サービス向け
サービス向け
NewsML
NewsML
とは?
とは?
標準的な表現方法で
標準的な表現方法で
NewsML
NewsML
には多種多様な要素が定義されており、その定義も仕様書
には多種多様な要素が定義されており、その定義も仕様書
に規定されている
に規定されている
要素の意味を正しく解釈して正しい
要素の意味を正しく解釈して正しい
NewsML
NewsML
にするべき
にするべき
複雑な構造はなるべく避けるべき
複雑な構造はなるべく避けるべき
メタ情報はなるべくつける
メタ情報はなるべくつける
公開した
公開した
NewsML
NewsML
データをなるべくサービスでヒットさせるには、多く
データをなるべくサービスでヒットさせるには、多く
の情報を格納しておくべき
の情報を格納しておくべき
権利情報は今後さらにシビアに!
権利情報は今後さらにシビアに!
データのメンテナンスも重要
データのメンテナンスも重要
コンテンツデータは標準的なものを
コンテンツデータは標準的なものを
あらゆる社の
あらゆる社の
NewsML
NewsML
をかき集めるサービスを考えた場合、そのコン
をかき集めるサービスを考えた場合、そのコン
テンツデータそのもののフォーマットも標準的なものを使うべき
テンツデータそのもののフォーマットも標準的なものを使うべき
、
、
XHTML
XHTML
、
、
NITF
NITF
、
、
…
…
NewsML
NewsML
の今後の課題
の今後の課題
セキュリティコントロール
セキュリティコントロール
公開情報の信頼性確保
公開情報の信頼性確保
コンテンツデータの標準化
コンテンツデータの標準化
NITF
NITF
が
が
IPTC
IPTC
推奨になっているが日本ではこれ
推奨になっているが日本ではこれ
から新聞協会で検討する方向
から新聞協会で検討する方向
外字、ルビ
外字、ルビ
漢字圏、特に日本の新聞では重要な課題
漢字圏、特に日本の新聞では重要な課題
NewsML
NewsML
-
-
Toolkit
Toolkit
プログラミング
プログラミング
DOM
DOM
プログラミングとの比較
プログラミングとの比較
目次
目次
ドキュメント・オブジェクトの生成
ドキュメント・オブジェクトの生成
DOM
DOM
プログラミングおよび
プログラミングおよび
NewsML
NewsML
プログラミングで必須となるドキュメント・
プログラミングで必須となるドキュメント・
オブジェクト(ツリー・オブジェクト)の生成方法について説明します。
オブジェクト(ツリー・オブジェクト)の生成方法について説明します。
要素の選択と属性値の取得
要素の選択と属性値の取得
要素について、その選択方法と要素値・属性値の取り出し方を説明します。
要素について、その選択方法と要素値・属性値の取り出し方を説明します。
Duid
Duid
による要素の取得
による要素の取得
Duid
Duid
を使った要素の取得について説明します。
を使った要素の取得について説明します。
複雑な問い合わせ
複雑な問い合わせ
複雑な入れ子構造になった
複雑な入れ子構造になった
Property
Property
エレメントを使って、データの取得方法
エレメントを使って、データの取得方法
を説明します。
を説明します。
ノードの文字列表現
ノードの文字列表現
DOM
DOM
ノードの文字列化方法および
ノードの文字列化方法および
Toolkit1.1
Toolkit1.1
での文字列化機能について紹
での文字列化機能について紹
介します。
介します。
コンフォーマンス
コンフォーマンス
NewsML
NewsML
-
-
Toolkit(ver1.1)
Toolkit(ver1.1)
のコンフォーマンス・チェックについて紹介します。
のコンフォーマンス・チェックについて紹介します。
紹介するコードはすべて抜粋です。実際のコードは別
紙をご覧ください。
ドキュメント・オブジェクトの生成
ドキュメント・オブジェクトの生成
(DOM)
(DOM)
//
//
クラスのインポート
クラスのインポート
import
import
java.io.File
java.io.File
;
;
import
import
javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.DocumentBuilderFactory
;
;
import
import
javax.xml.parsers.DocumentBuilder
javax.xml.parsers.DocumentBuilder
;
;
import org.w3c.dom.Document;
import org.w3c.dom.Document;
//
//
ファイルオブジェクトを作成する
ファイルオブジェクトを作成する
File
File
sourceFile
sourceFile
= new
= new
File(
File(
"some
"some
-
-
newsml
newsml
-
-
file.xml
file.xml
"
"
);
);
//
//
ファクトリの生成(バリデーションあり)
ファクトリの生成(バリデーションあり)
DocumentBuilderFactory
DocumentBuilderFactory
factory =
factory =
DocumentBuilderFactory.newInstance
DocumentBuilderFactory.newInstance
();
();
factory.setValidating
factory.setValidating
( true );
( true );
//
//
ドキュメント・ビルダーの生成
ドキュメント・ビルダーの生成
DocumentBuilder
DocumentBuilder
builder =
builder =
factory.newDocumentBuilder
factory.newDocumentBuilder
();
();
//
//
ファイルのパース
ファイルのパース
Document doc =
ドキュメント・オブジェクトの生成
ドキュメント・オブジェクトの生成
(Toolkit)
(Toolkit)
//
//
クラスのインポート
クラスのインポート
import
import
org.newsml.toolkit.dom.XercesDOMFactory
org.newsml.toolkit.dom.XercesDOMFactory
;
;
import
import
org.newsml.toolkit.dom.DOMNewsMLFactory
org.newsml.toolkit.dom.DOMNewsMLFactory
;
;
import
import
org.newsml.toolkit.NewsML
org.newsml.toolkit.NewsML
;
;
//
//
Xerces
Xerces
を使った
を使った
DOM
DOM
ファクトリの生成(バリデーションあり)
ファクトリの生成(バリデーションあり)
XercesDOMFactory
XercesDOMFactory
factory = new
factory = new
XercesDOMFactory
XercesDOMFactory
();
();
factory.setValidation
factory.setValidation
( true );
( true );
// NewsML
// NewsML
ファクトリの生成
ファクトリの生成
DOMNewsMLFactory
DOMNewsMLFactory
newsmlFactory
newsmlFactory
= new
= new
DOMNewsMLFactory
DOMNewsMLFactory
( factory );
( factory );
// NewsML
// NewsML
ツリーの生成
ツリーの生成
NewsML
NewsML
newsml
newsml
=
=
newsmlFactory.createNewsML
目次
目次
ドキュメント・オブジェクトの生成
ドキュメント・オブジェクトの生成
DOM
DOM
プログラミングおよび
プログラミングおよび
NewsML
NewsML
プログラミングで必須となるドキュメント・
プログラミングで必須となるドキュメント・
オブジェクト(ツリー・オブジェクト)の生成方法について説明します。
オブジェクト(ツリー・オブジェクト)の生成方法について説明します。
要素の選択と属性値の取得
要素の選択と属性値の取得
要素について、その選択方法と要素値・属性値の取り出し方を説明します。
要素について、その選択方法と要素値・属性値の取り出し方を説明します。
Duid
Duid
による要素の取得
による要素の取得
Duid
Duid
を使った要素の取得について説明します。
を使った要素の取得について説明します。
複雑な問い合わせ
複雑な問い合わせ
複雑な入れ子構造になった
複雑な入れ子構造になった
Property
Property
エレメントを使って、データの取得方法
エレメントを使って、データの取得方法
を説明します。
を説明します。
ノードの文字列表現
ノードの文字列表現
DOM
DOM
ノードの文字列化方法および
ノードの文字列化方法および
Toolkit1.1
Toolkit1.1
での文字列化機能について紹
での文字列化機能について紹
介します。
介します。
コンフォーマンス
コンフォーマンス
NewsML
NewsML
-
-
Toolkit(ver1.1)
Toolkit(ver1.1)
のコンフォーマンス・チェックについて紹介します。
のコンフォーマンス・チェックについて紹介します。
紹介するコードはすべて抜粋です。実際のコードは別
紙をご覧ください。
要素と属性値の取得
要素と属性値の取得
(DOM)
(DOM)
//
//
エレメントのタグ名でノードリストを取得する
エレメントのタグ名でノードリストを取得する
NodeList
NodeList
loList
loList
=
=
aoDoc.getElementsByTagName(
aoDoc.getElementsByTagName(
"Property
"Property
"
"
);
);
//
//
取得したノードリストは、階層を問わず、
取得したノードリストは、階層を問わず、
Property
Property
要素すべてのリストを
要素すべてのリストを
//
//
持っている。一覧表示してみる。
持っている。一覧表示してみる。
for (
for (
int
int
i = 0 ; i <
i = 0 ; i <
loList.getLength
loList.getLength
() ; i++ )
() ; i++ )
{
{
Element
Element
loElm
loElm
= (
= (
Element)(loList.item(i
Element)(loList.item(i
));
));
System.out.println(
System.out.println(
"Property
"Property
["
["
+ i +
+ i +
"]:
"]:
FormalName
FormalName
= "
= "
+
+
loElm.getAttribute(
loElm.getAttribute(
"FormalName
"FormalName
"
"
) +
) +
" : Value = "
" : Value = "
+
+
loElm.getAttribute(
loElm.getAttribute(
"Value
"Value
"
"
)
)
);
);
}
<Property FormalName="NskCountry" Value="JPN" />}
Property[0]: FormalName = NskRelevantArea : Value = Property[1]: FormalName = NskCountry : Value = JPN
Property[2]: FormalName = NskJpnAreaCode : Value = 15201 Property[3]: FormalName = NskRelevantArea : Value = Property[4]: FormalName = NskCountry : Value = KOR Property[5]: FormalName = NskRelevantArea : Value = Property[6]: FormalName = NskCountry : Value = CMR Property[7]: FormalName = NskOriginatedArea : Value = Property[8]: FormalName = NskCountry : Value = JPN
Property[9]: FormalName = NskJpnAreaCode : Value = 15201a Property[10]: FormalName = NskLocation : Value = 新潟スタジアム
要素と属性値の取得
要素と属性値の取得
(Toolkit1.1)
(Toolkit1.1)
// NewsML
// NewsML
セッションオブジェクトを取得します。
セッションオブジェクトを取得します。
NewsMLSession
NewsMLSession
session =
session = aoNewsML.getSession
aoNewsML.getSession();
();
// Property
// Property
要素を
要素を
XPath
XPath
表現で取得します。
表現で取得します。
//
//
ほしいのはすべての
ほしいのはすべての
Property
Property
要素なので、
要素なので、
//
//
ではじめます。
ではじめます。
BaseNode
BaseNode[]
[] baseNodes
baseNodes
=
=
session.getNodesByXPath
session.getNodesByXPath( (
( (BaseNode)aoNewsML
BaseNode)aoNewsML,
,
"//Property"
"//Property"
);
);
//
//
取得した
取得した
Property
Property
要素を一覧表示してみます
要素を一覧表示してみます
Property prop = null;
Property prop = null;
for (
for ( int
int
i = 0 ; i <
i = 0 ; i < baseNodes.length
baseNodes.length; i++ )
; i++ )
{
{
prop = (
prop = (Property)baseNodes[i
Property)baseNodes[i];
];
System.out.println(
System.out.println("Property
"Property
["
["
+ i +
+ i +
"]:
"]:
FormalName
FormalName
= "
= "
+ prop.getName
+
prop.getName() +
() +
" : Value = "
" : Value = "
+ prop.getValue
+
prop.getValue
()
()
);
);
}
}
Property[0]: FormalName = NskRelevantArea : Value = null Property[1]: FormalName = NskRelevantArea : Value = null Property[2]: FormalName = NskRelevantArea : Value = null Property[3]: FormalName = NskOriginatedArea : Value = null Property[4]: FormalName = NskCountry : Value = JPN
Property[5]: FormalName = NskJpnAreaCode : Value = 15201 Property[6]: FormalName = NskCountry : Value = KOR Property[7]: FormalName = NskCountry : Value = CMR Property[8]: FormalName = NskCountry : Value = JPN
Property[9]: FormalName = NskJpnAreaCode : Value = 15201a Property[10]: FormalName = NskLocation : Value = 新潟スタジアム