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>