• 検索結果がありません。

NewsML解説とNewsML-Toolkit紹介

N/A
N/A
Protected

Academic year: 2021

シェア "NewsML解説とNewsML-Toolkit紹介"

Copied!
52
0
0

読み込み中.... (全文を見る)

全文

(1)

NewsML

NewsML

解説と

解説と

NewsML

NewsML

-

-

Toolkit

Toolkit

紹介

紹介

XMLコンソーシアムWeek

2002年6月13日

XMLコンソーシアム

応用技術部会 NewsML-WG

日本電気株式会社 新田 一樹

(2)

NewsML

(3)

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を中心に解説

(4)

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

にて公開

にて公開

(5)

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

(6)

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

(7)

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 (

(8)

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

(9)

プログラミング概説

プログラミング概説

(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

();

(10)

プログラミング概説

プログラミング概説

(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> ...

このクラス図に表記したメソッド

名はホンの一部です

(11)

プログラミング概説

プログラミング概説

(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

(12)

プログラミング概説

プログラミング概説

(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 = 新潟スタジ アム

(13)

プログラミング概説

プログラミング概説

(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

以降

以降

)

)

地域コー

(14)

コンフォーマンスチェック

コンフォーマンスチェック

次のようなコンフォーマンスチェッククラスがある

次のようなコンフォーマンスチェッククラスがある

日付チェック

日付チェック

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

のチェックなど)

(15)

(参考)

(参考)

NewsML

NewsML

-

-

Checker

Checker

XSLT

XSLT

を使った

を使った

NewsML

NewsML

コンプライアンスチェッカー

コンプライアンスチェッカー

IPTC

IPTC

より提供

より提供

XML

XML

の妥当性検証だけでなく、

の妥当性検証だけでなく、

NewsML

NewsML

の仕様に適合しているかど

の仕様に適合しているかど

うかをチェックする

うかをチェックする

http://www.iptc.org/site/NewsML/NewsMLConformance.zip

(16)

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

(17)

NewsML

NewsML

-

-

Toolkit

Toolkit

の課題

の課題

処理速度

処理速度

DOM

DOM

ベースの処理なので処理速度に限界あり

ベースの処理なので処理速度に限界あり

大量のドキュメントのバッチ処理には向かない

大量のドキュメントのバッチ処理には向かない

ノードの更新処理

ノードの更新処理

ver1.1

ver1.1

では、更新処理は未実装

では、更新処理は未実装

ver2.0

ver2.0

では、ノードレベルでの更新・追加処理実

では、ノードレベルでの更新・追加処理実

装(コンフォーマンスは維持されるとは限らない)

装(コンフォーマンスは維持されるとは限らない)

DTD

DTD

の変更への対応

の変更への対応

NewsMLv1.0.dtd

NewsMLv1.0.dtd

に即したクラス設計になってい

に即したクラス設計になってい

るが、

るが、

DTD

DTD

が変更になった場合はクラスの構成

が変更になった場合はクラスの構成

が変わるため、変更に対応していく必要がある

が変わるため、変更に対応していく必要がある

(18)

Toolkit

Toolkit

デモンストレーション

デモンストレーション

NewsML-Toolkitを使ったデモンスト

レーション用プログラムを作成しました。

簡単なコンフォーマンスチェックも実装

してみました。

(19)

Web

(20)

Web

Web

サービス実験における

サービス実験における

NewsML

NewsML

-

-

WG

WG

の役割

の役割

新聞社

新聞社

/

/

通信社との

通信社との

NewsML

NewsML

データ借用交渉

データ借用交渉

XML

XML

コンソーシアムに参加している社と交渉

コンソーシアムに参加している社と交渉

Web

Web

サービスで利用できるように

サービスで利用できるように

NewsML

NewsML

の説明

の説明

Web

Web

サービス

サービス

WG

WG

に対して、実装方式の提案

に対して、実装方式の提案

実現するために

実現するために

NewsML

NewsML

を一部修正

を一部修正

その他

その他

画像借用のため、画像に透かしを入れる

画像借用のため、画像に透かしを入れる

NewsML-WG

応用技術部会

Webサービス-WG

新聞社・通信社

(21)

デモ用コンテンツと提供元紹介

デモ用コンテンツと提供元紹介

デモのためのニュースコンテンツを提供して

デモのためのニュースコンテンツを提供して

いただいた社(団体)

いただいた社(団体)

順不同

順不同

読売新聞社様

読売新聞社様

新幹線

新幹線

NewsML

NewsML

も提供

も提供

共同通信社様

共同通信社様

毎日新聞社様

毎日新聞社様

Java

Java

コンソーシアム様

コンソーシアム様

Java

Java

コンソーシアムで集めたニュース素材を

コンソーシアムで集めたニュース素材を

NewsML

NewsML

-

-

WG

WG

NewsML

NewsML

変換を行ったもの

変換を行ったもの

デモ用データのため正式な各社のサービス用フォー

マットとは必ずしも同じではありません

(22)

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

読売コンテンツ

(23)

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

素によるコンテンツ種別の判断

素によるコンテンツ種別の判断

(24)

XSLT

XSLT

スタイルシートの提供

スタイルシートの提供

提供したコンテンツの表示用スタイルシート

提供したコンテンツの表示用スタイルシート

新幹線NewsML表示例

読売コンテンツ表示例

(25)

検索モデルと対応する

検索モデルと対応する

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

要素によりさ

要素によりさ

らに細かい分類情報を付加可

らに細かい分類情報を付加可

(26)

検索モデルと対応する

検索モデルと対応する

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

対象にし やすい

(27)

検索モデルと対応する

検索モデルと対応する

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>

(28)

検索モデルと対応する

検索モデルと対応する

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

PDF

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作

成や日本新聞協会

が作成している)で

定義されているもの

の一部

(29)

検索モデルと対応する

検索モデルと対応する

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

(30)

Web

Web

サービス向け

サービス向け

NewsML

NewsML

とは?

とは?

標準的な表現方法で

標準的な表現方法で

NewsML

NewsML

には多種多様な要素が定義されており、その定義も仕様書

には多種多様な要素が定義されており、その定義も仕様書

に規定されている

に規定されている

要素の意味を正しく解釈して正しい

要素の意味を正しく解釈して正しい

NewsML

NewsML

にするべき

にするべき

複雑な構造はなるべく避けるべき

複雑な構造はなるべく避けるべき

メタ情報はなるべくつける

メタ情報はなるべくつける

公開した

公開した

NewsML

NewsML

データをなるべくサービスでヒットさせるには、多く

データをなるべくサービスでヒットさせるには、多く

の情報を格納しておくべき

の情報を格納しておくべき

権利情報は今後さらにシビアに!

権利情報は今後さらにシビアに!

データのメンテナンスも重要

データのメンテナンスも重要

コンテンツデータは標準的なものを

コンテンツデータは標準的なものを

あらゆる社の

あらゆる社の

NewsML

NewsML

をかき集めるサービスを考えた場合、そのコン

をかき集めるサービスを考えた場合、そのコン

テンツデータそのもののフォーマットも標準的なものを使うべき

テンツデータそのもののフォーマットも標準的なものを使うべき

PDF

PDF

XHTML

XHTML

NITF

NITF

(31)

NewsML

NewsML

の今後の課題

の今後の課題

セキュリティコントロール

セキュリティコントロール

公開情報の信頼性確保

公開情報の信頼性確保

コンテンツデータの標準化

コンテンツデータの標準化

NITF

NITF

IPTC

IPTC

推奨になっているが日本ではこれ

推奨になっているが日本ではこれ

から新聞協会で検討する方向

から新聞協会で検討する方向

外字、ルビ

外字、ルビ

漢字圏、特に日本の新聞では重要な課題

漢字圏、特に日本の新聞では重要な課題

(32)
(33)

NewsML

NewsML

-

-

Toolkit

Toolkit

プログラミング

プログラミング

DOM

DOM

プログラミングとの比較

プログラミングとの比較

(34)

目次

目次

ドキュメント・オブジェクトの生成

ドキュメント・オブジェクトの生成

DOM

DOM

プログラミングおよび

プログラミングおよび

NewsML

NewsML

プログラミングで必須となるドキュメント・

プログラミングで必須となるドキュメント・

オブジェクト(ツリー・オブジェクト)の生成方法について説明します。

オブジェクト(ツリー・オブジェクト)の生成方法について説明します。

要素の選択と属性値の取得

要素の選択と属性値の取得

要素について、その選択方法と要素値・属性値の取り出し方を説明します。

要素について、その選択方法と要素値・属性値の取り出し方を説明します。

Duid

Duid

による要素の取得

による要素の取得

Duid

Duid

を使った要素の取得について説明します。

を使った要素の取得について説明します。

複雑な問い合わせ

複雑な問い合わせ

複雑な入れ子構造になった

複雑な入れ子構造になった

Property

Property

エレメントを使って、データの取得方法

エレメントを使って、データの取得方法

を説明します。

を説明します。

ノードの文字列表現

ノードの文字列表現

DOM

DOM

ノードの文字列化方法および

ノードの文字列化方法および

Toolkit1.1

Toolkit1.1

での文字列化機能について紹

での文字列化機能について紹

介します。

介します。

コンフォーマンス

コンフォーマンス

NewsML

NewsML

-

-

Toolkit(ver1.1)

Toolkit(ver1.1)

のコンフォーマンス・チェックについて紹介します。

のコンフォーマンス・チェックについて紹介します。

紹介するコードはすべて抜粋です。実際のコードは別

紙をご覧ください。

(35)

ドキュメント・オブジェクトの生成

ドキュメント・オブジェクトの生成

(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 =

(36)

ドキュメント・オブジェクトの生成

ドキュメント・オブジェクトの生成

(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

(37)

目次

目次

ドキュメント・オブジェクトの生成

ドキュメント・オブジェクトの生成

DOM

DOM

プログラミングおよび

プログラミングおよび

NewsML

NewsML

プログラミングで必須となるドキュメント・

プログラミングで必須となるドキュメント・

オブジェクト(ツリー・オブジェクト)の生成方法について説明します。

オブジェクト(ツリー・オブジェクト)の生成方法について説明します。

要素の選択と属性値の取得

要素の選択と属性値の取得

要素について、その選択方法と要素値・属性値の取り出し方を説明します。

要素について、その選択方法と要素値・属性値の取り出し方を説明します。

Duid

Duid

による要素の取得

による要素の取得

Duid

Duid

を使った要素の取得について説明します。

を使った要素の取得について説明します。

複雑な問い合わせ

複雑な問い合わせ

複雑な入れ子構造になった

複雑な入れ子構造になった

Property

Property

エレメントを使って、データの取得方法

エレメントを使って、データの取得方法

を説明します。

を説明します。

ノードの文字列表現

ノードの文字列表現

DOM

DOM

ノードの文字列化方法および

ノードの文字列化方法および

Toolkit1.1

Toolkit1.1

での文字列化機能について紹

での文字列化機能について紹

介します。

介します。

コンフォーマンス

コンフォーマンス

NewsML

NewsML

-

-

Toolkit(ver1.1)

Toolkit(ver1.1)

のコンフォーマンス・チェックについて紹介します。

のコンフォーマンス・チェックについて紹介します。

紹介するコードはすべて抜粋です。実際のコードは別

紙をご覧ください。

(38)

要素と属性値の取得

要素と属性値の取得

(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 = 新潟スタジアム

(39)

要素と属性値の取得

要素と属性値の取得

(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 = 新潟スタジアム

(40)

要素と属性値の取得

要素と属性値の取得

(Toolkit1.0)

(Toolkit1.0)

// Toolkit1.0

// Toolkit1.0

の場合の処理例。

の場合の処理例。

//

//

エラー処理は無視しています

エラー処理は無視しています

//

//

NewsItem

NewsItem

オブジェクトを取得します

オブジェクトを取得します

NewsItem

NewsItem

newsItem

newsItem

= aoNewsML.getNewsItem(0);

= aoNewsML.getNewsItem(0);

//

//

NewsComponent

NewsComponent

オブジェクトを取得

オブジェクトを取得

NewsComponent

NewsComponent

newsComponent

newsComponent

= newsItem.getRootNewsComponent

=

newsItem.getRootNewsComponent();

();

//

//

Metadata

Metadata

オブジェクトを取得

オブジェクトを取得

Metadata[]

Metadata[] metas

metas

= newsComponent.getMetadata

=

newsComponent.getMetadata();

();

for (

for ( int

int

i = 0 ; i <

i = 0 ; i < metas.length

metas.length; i++ )

; i++ )

{

{

//

//

Property

Property

オブジェクトを取得

オブジェクトを取得

Property[] props =

Property[] props = metas[i].getProperty

metas[i].getProperty();

();

for (

for ( int

int

j = 0 ; j < props.length

j = 0 ; j <

props.length; j++ )

; j++ )

{

{

//

//

Property

Property

要素のうち

要素のうち

FormalName

FormalName

オブジェクトを取得し(

オブジェクトを取得し(

getName

getName

()

()

// FormalName

// FormalName

オブジェクトの値を取得します(2個目の

オブジェクトの値を取得します(2個目の

getName()

getName()

String

String formalName

formalName

=

= props[j].getName().getName

props[j].getName().getName();

();

String value =

String value = props[j].getValue

props[j].getValue();

();

System.out.println(

System.out.println(

"Property

"Property

["

["

+ i +

+ i +

"]:

"]:

FormalName

FormalName

= "

= "

+ formalName

+

formalName

+

+

" : Value = "

" : Value = "

+ value

+ value

);

);

}

}

}

}

<NewsItem> .... <NewsComponent> .... <Metadata> <MetadataType FormalName....> <Property> <Property> <Property> </Property> </Metadata> ....

(41)

目次

目次

ドキュメント・オブジェクトの生成

ドキュメント・オブジェクトの生成

DOM

DOM

プログラミングおよび

プログラミングおよび

NewsML

NewsML

プログラミングで必須となるドキュメント・

プログラミングで必須となるドキュメント・

オブジェクト(ツリー・オブジェクト)の生成方法について説明します。

オブジェクト(ツリー・オブジェクト)の生成方法について説明します。

要素の選択と属性値の取得

要素の選択と属性値の取得

要素について、その選択方法と要素値・属性値の取り出し方を説明します。

要素について、その選択方法と要素値・属性値の取り出し方を説明します。

Duid

Duid

による要素の取得

による要素の取得

Duid

Duid

を使った要素の取得について説明します。

を使った要素の取得について説明します。

複雑な問い合わせ

複雑な問い合わせ

複雑な入れ子構造になった

複雑な入れ子構造になった

Property

Property

エレメントを使って、データの取得方法

エレメントを使って、データの取得方法

を説明します。

を説明します。

ノードの文字列表現

ノードの文字列表現

DOM

DOM

ノードの文字列化方法および

ノードの文字列化方法および

Toolkit1.1

Toolkit1.1

での文字列化機能について紹

での文字列化機能について紹

介します。

介します。

コンフォーマンス

コンフォーマンス

NewsML

NewsML

-

-

Toolkit(ver1.1)

Toolkit(ver1.1)

のコンフォーマンス・チェックについて紹介します。

のコンフォーマンス・チェックについて紹介します。

紹介するコードはすべて抜粋です。実際のコードは別

紙をご覧ください。

参照

関連したドキュメント

LicenseManager, JobCenter MG/SV および JobCenter CL/Win のインストール方法を 説明します。次の手順に従って作業を行ってください。.. …

Scival Topic Prominence

北海道の来遊量について先ほどご説明がありましたが、今年も 2000 万尾を下回る見 込みとなっています。平成 16 年、2004

このアプリケーションノートは、降圧スイッチングレギュレータ IC 回路に必要なインダクタの選択と値の計算について説明し

続いて、環境影響評価項目について説明します。48

○杉田委員長 ありがとうございました。.

この点について結果︵法益︶標準説は一致した見解を示している︒

〇齋藤会長代理 ありがとうございました。.