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

NewsItems の改版

ドキュメント内 新聞協会NewsMLレベル1.2解説書 (ページ 137-144)

129

[NSK解説]

 

◆Update要素◆

Update要 素 は 、 以 前 の 版 の NewsItem に 対 す る 変 更 を 示 す 。 こ の と き 、RevisionId要 素 の PreviousRevision属性値はその前の版のRevisionId要素値と同じ値とし、Update属性の値を「U」に 設定する。Update要素はNewsManagementやIdentificationに関する変更には使用しないことに注 意する。

変更指示の種類を

・ Delete(削除)

・ Replace(置き換え)

・ InsertBefore(前に挿入)

・ InsertAfter(後ろに挿入)

の下位要素で記述する。変更対象場所の指定は、各下位要素のDuidRef属性に前の版のNewsItem内 の変更対象要素のDuid値を設定することで行う。

<!ELEMENT Update (InsertBefore | InsertAfter | Replace | Delete )*>

<!ATTLIST Update %localid; >

<!ELEMENT InsertBefore ANY >

<!ATTLIST InsertBefore %localid;

DuidRef CDATA #REQUIRED >

<!ELEMENT InsertAfter ANY >

<!ATTLIST InsertAfter %localid;

DuidRef CDATA #REQUIRED >

<!ELEMENT Replace ANY >

<!ATTLIST Replace %localid;

DuidRef CDATA #REQUIRED >

<!ELEMENT Delete EMPTY >

<!ATTLIST Delete %localid;

DuidRef CDATA #REQUIRED >

131

コラム:Update要素の実装について

各下位要素についてDTDやSchemaの定義ではどのような形を取ることもできるが、変更 指示反映後に生成される新しい版の NewsItemが

NewsML

的にエラーとならない必要があ る。

Updateの情報を取り込み新しいNewsItemの完成版を作成するのは、受信社側のシステム

となる。一方でNewsItemのバージョン情報を設定するのは送信社側のシステムとなる。こ こで注意が必要なのは、以前のバージョンのNewsItemが受信社側にない場合、受信社側で

新しいNewsItemの完成版を作成するのが不可能であるということである。特に受信社が送

信社にアクセスして

NewsML

を取り出すようなシステムではこのような問題が起こりやす いだろう。

Updateの実装には送信側および受信側のシステム側で厳密なNewsItemのバージョン管理

がなされていること、Updateで関連するNewsItemについて、送受信双方のシステムで同じ ように存在していることが必要となる。また、データ交換を行う当事社のシステムの違いに より、完成版のNewsItemに差異が生じないか注意する必要がある。

なお、Update要素は

NskNewsML:1.2

では使用停止としている。

◆NewsItemの変更◆

NewsMLでは、発行済みのNewsItemを変更する手段を提供している。変更には次の3種類が

ある。

1) NewsItem全体を、すべて送りなおす場合(改版される)

2) NewsItem/NewsManagementの変更をする場合(改版されない)

3) NewsItem/Update要素を使ってNewsItem内の部分または全体の変更指示を送る場合(改版され

る)

  以下に詳細を説明する。

1) NewsItem全体を、すべて送りなおす場合(改版される)

これは、NewsComponentをはじめ、すべての内容を含めたNewsItemを、新しい版として送る ことである。

この場合、NewsItem/Identification/NewsIdentifier/RevisionId要素を次のように記述し、以下 の条件を満たさなければならない。

<RevisionId PreviousRevision="1" Update="N">2</RevisionId>

・ Update属性値は"N"でなければならない。

・ PreviousRevision属性値(上記の"1")は、NewsItemの前の版と同じでなければならない。

・ RevisionId要素の内容(上記の 2 )は、前の版よりも大きい数字にしなければならない。

上記に伴い、PublicIdentifierの値も変化するので注意する必要がある。具体的には、

urn:newsml:{ProviderId}:{DateId}:{NewsItemId}: {RevisionId}{RevisionId@Update}の {RevisionId}{RevisionId@Update}が変化する。

(例)

<PublicIdentifier>urn:newsml:provider.or.jp:20010503:T001:2</PublicIdentifier>

  (例1)

--発行済みの版--

<NewsIdentifier>

...

<RevisionId PreviousRevision="0" Update="N">1</RevisionId>

<PublicIdentifier>

urn:newsml:provider.or.jp:20010503:T001:1

</PublicIdentifier>

</NewsIdentifier>

...

--新しい版を送り、改版する--

<NewsItem>

<Identification>

  <NewsIdentifier>

...

<RevisionId PreviousRevision="1" Update="N">2</RevisionId>

<PublicIdentifier>

urn:newsml:provider.or.jp:20010503:T001:2

</PublicIdentifier>

</NewsIdentifier>

</Identification>

<NewsManagement>

...

</NewsManagement>

<NewsComponent>

<!-- 新しいニュースコンポーネント -->

...

</NewsComponent>

</NewsItem>

   

2) NewsItem/NewsManagementの変更をする場合(改版されない)

これは既に発行済みのNewsItemに対して、NewsItem/IdentificationやNewsItem/NewsManagement を変更し、NewsItemの他の部分に何の変更も行わない場合に使用する。

この場合、NewsItem/Identification/NewsIdentifier/RevisionId要素を次のように記述し、以下 の条件を満たさなければならない。

<RevisionId PreviousRevision="0" Update="A">1</RevisionId>

・ Update属性値は"A"でなければならない。

・ PreviousRevision属性値(上記の"0")とRevisionId要素の内容(上記の 1 )は、変更されるNewsItem の版と同じでなければならない。

・ NewsItemには変更部分を含む完全な形のIdentificationとNewsManagement要素のみを記述し、

NewsItemの他の要素を記述してはならない。

上記に伴い、PublicIdentifierの値も変化するので注意する必要がある。具体的には、

urn:newsml:{ProviderId}:{DateId}:{NewsItemId}:{RevisionId}{RevisionId@Update}の {RevisionId@Update}が 省略されず、Aになり、{RevisionId}Aの記述になる。

受信側は、修正の反映時にもとのNewsIdentifierを変更してはならない。

133 (例2) 発行済みのNewsItemのステータスを変更する場合

--発行済みの版--

<NewsIdentifier>

...

<RevisionId PreviousRevision="0" Update="N">1</RevisionId>

<PublicIdentifier>

urn:newsml:provider.or.jp:20010503:T001:1

</PublicIdentifier>

</NewsIdentifier>

...

--上記の版を公開待機にする場合--

<NewsItem>

<Identification>

<NewsIdentifier>

...

<RevisionId PreviousRevision ="0" Update="A">1</RevisionId>

<PublicIdentifier>

urn:newsml:provider.or.jp:20010503:T001:1A

</PublicIdentifier>

</NewsIdentifier>

</Identification>

<NewsManagement>

...<!--すべて置き換えられるので、省略せずに記述する。-->

<Status FormalName="Embargoed"/>

...

</NewsManagement>

<!-- NewsComponentは記述してはいけない -->

</NewsItem>

上記を受けた以降、urn:newsml:provider.or.jp:20010503:T001:1で指定されるNewsItemの内 容は、ステータスが公開待機(Embargoed)になっていなければならない。

(例3)発行済みのNewsItemへ関連情報(NewsManagement/AssociatedWith)を追加する場合 --発行済みの版--

<NewsIdentifier>

...

<RevisionId PreviousRevision="0" Update="N">1</RevisionId>

<PublicIdentifier>

urn:newsml:provider.or.jp:20010503:T001:1

</PublicIdentifier>

</NewsIdentifier>

...

--上記の版へ関連情報(NewsManagement/AssociatedWith)を追加する場合—

<NewsItem>

<Identification>

<NewsIdentifier>

...

<RevisionId PreviousRevision ="0" Update="A">1</RevisionId>

<PublicIdentifier>

urn:newsml:provider.or.jp:20010503:T001:1A

</PublicIdentifier>

</NewsIdentifier >

</Identification>

<NewsManagement>

...<!--すべて置き換えられるので、省略せずに記述する。-->

<AssociatedWith NewsItem="urn:newsml:provider.or.jp:20010503:T029">

<Comment>解説記事</Comment>

</AssociatedWith>

...

</NewsManagement>

<!-- NewsComponentは記述してはいけない -->

</NewsItem>

3) NewsItem/Update要素を使ってNewsItem内の部分または全体の変更指示を送る場合(改版され

る)

これはUpdate要素を使用して、主にNewsComponent以下の変更を指示する。

Update要素を使用して、主にNewsComponent以下の内容の一部または全部の変更を指示する。

この場合、NewsItem/Identification/NewsIdentifier/RevisionId要素を次のように記述し、以下 の条件を満たさなければならない。

<RevisionId PreviousRevision="1" Update="U">2</RevisionId>

・ Update属性値は"U"でなければならない。

・ PreviousRevision属性値(上記の"1")は、NewsItemの前の版と同じでなければならない。

・ RevisionId要素の内容(上記の 2 )は、前の版よりも大きい数字にしなければならない。

上記に伴い、PublicIdentifierの値も変化するので注意する必要がある。具体的には、

urn:newsml:{ProviderId}:{DateId}:{NewsItemId}:{RevisionId}{RevisionId@Update}の {RevisionId@Update}が 省略されず、Uになり、{RevisionId}Uの記述になる。

(例4)発行済みのNewsItemの一部を、Updateを用いて置き換える場合

--発行済みの版--

<NewsItem>

<Identification>

<NewsIdentifier>

. . .

<RevisionId PreviousRevision="0" Update="N">1</RevisionId>

<PublicIdentifier>

urn:newsml:provider.or.jp:20010503:T001:1

</PublicIdentifier>

</NewsIdentifier>

</Identification>

<NewsManagement>

. . .

</NewsManagement>

<NewsComponent>

. . .

< ! -- NewsComponentの二階層記述… -->

<NewsComponent Duid=”Component -1”>

. . .

</NewsComponent>

<NewsComponent Duid=”Component-2”>

. . .

</NewsComponent>

. . .

</NewsComponent>

</NewsItem>

135 --新しい版を送り、改版する--

<NewsItem>

<Identification>

  <NewsIdentifier>

...

<RevisionId PreviousRevision="1" Update="U">2</RevisionId>

<PublicIdentifier>

urn:newsml:provider.or.jp:20010503:T001:2U

</PublicIdentifier>

</NewsIdentifier>

</Identification>

<NewsManagement>

...

</NewsManagement>

<!-- ニュースコンポーネントの一部を置き換え -->

<Update>

<Replace DuidRef="Component -1">

<NewsComponent Duid="Component-1U">

</NewsComponent>

</Replace>

</Update>

...

</NewsItem>

ドキュメント内 新聞協会NewsMLレベル1.2解説書 (ページ 137-144)