公衆に対する重要な警告を Web に公開する

標準に基づき、Atom 出版プロトコルを使って CAP (Common Alerting Protocol) アラートを公開する

最近完成された Atom 出版プロトコルは、Web 上でコンテンツを公開し、管理するための、単純な HTTP ベースの機構を提供します。Atom 出版プロトコルを Common Alerting Protocol 標準と組み合わせて使うことで、重要で命にかかわる情報を配布するための強力で柔軟な手段を提供することができます。危険を知らせるアラートを Atom を使って作成し、公開し、そして利用する方法を学びましょう。

James Snell, Software Engineer, IBM

James SnellJames Snell 氏はIBM Emerging Technologies Toolkit チームの一員であり、過去数年間にわたり新興のWebサービスの技術そして標準に焦点を合わせてきました。developerWorks にて、新興の技術に焦点を定めるウェブログ(http://www.ibm.com/developerworks/blogs/snell)を管理しています。


developerWorks 貢献著者レベル

2007年 8月 14日

CAP (Common Alerting Protocol) は単純で標準化された XML データ・フォーマットであり、アメリカ国土安全保障省 (United States Department of Homeland Security) やアメリカ地質調査所 (USGS: United States Geological Survey)、カナダ政府、その他多くの組織が広範な種類の警告や緊急警報の情報を交換するために使われています (CAP を使用している企業や組織のリストは「参考文献」を参照してください)。

CAP 標準は、アラート (alert) と呼ばれるタイプの文書を定義しています。この文書は、地理や気象、公衆衛生と安全、救助、法の執行、環境、運輸、インフラ、そしてテロリストなどに関する警告やイベントなどの情報を交換するために使われています。こうしたアラートは、インシデント対応要員によって手動で生成されるか、あるいは監視機器や感知機器によって自動的に生成され、そしてさまざまな手段を使って配布されます。Atom や RSS などの配信フォーマットは CAP アラートの 1 配布チャネルを構成しており、この配布チャネルは一般的になりつつあります。

Atom 出版プロトコル (Atompub プロトコルと呼ばれることもあります) は、HTTP の GET や POST、PUT、DELETE などの基本操作を使ってさまざまなリソースのコレクションを公開、管理するための機構です。Atompub プロトコルは、元々はブログ・ソフトウェアに新しいエントリーをポストするための方法として設計されたものですが、ほぼあらゆる種類の Web ベースのコンテンツを処理するための方法としても非常に適しています。この記事では、Atom 出版プロトコルを使って CAP アラートを公開し、配布するための、Java™ による Web アプリケーションの例を紹介します。

Common Alerting Protocol を紹介する

CAP アラート文書は 1 つの <alert /> 要素から成る構造をしており、<alert /> 要素は状況に関する詳細を提供する 1 つ以上の <info /> 要素を含みます。各 <info /> 要素の中には、単純なメタデータ要素のコレクションと、追加の情報 (写真や文書へのリンクや、そのアラートによって影響される地域の地図座標など) を提供する、いくつかの <resource /> 要素と <area /> 要素があります。1 つのインシデントによって、緊急事態の変化を追跡する多くのアラート文書が作成されることは珍しくありません。リスト 1 は CAP アラートの一例を示しています。

リスト 1. CAP V1.1 仕様による、子供の誘拐に関するアラートの例
<?xml version = "1.0" encoding = "UTF-8"?> 
<alert xmlns = "urn:oasis:names:tc:emergency:cap:1.1"> 
  <identifier>KAR0-0306112239-SW</identifier> 
  <sender>KARO@CLETS.DOJ.CA.GOV</sender> 
  <sent>2003-06-11T22:39:00-07:00</sent> 
  <status>Actual</status> 
  <msgType>Alert</msgType> 
  <source>SW</source> 
  <scope>Public</scope> 
  <info> 
    <category>Rescue</category> 
    <event>Child Abduction</event> 
    <urgency>Immediate</urgency> 
    <severity>Severe</severity> 
    <certainty>Likely</certainty> 
    <eventCode> 
      <valueName>SAME</valueName> 
      <value>CAE</value> 
    </eventCode> 
    <senderName>LOS ANGELES POLICE DEPT - LAPD</senderName> 
    <headline>AMBER ALERT</headline> 
    <description>DATE/TIME: 06/11/03, 1915 HRS. VICTIM(S): KHAYRI DOE JR. 
    M/B BLK/BRO 3'0", 40 LBS. LIGHT COMPLEXION. DOB 06/24/01. WEARING RED 
    SHORTS, WHITE T-SHIRT, W/BLUE COLLAR. LOCATION: 5721 DOE ST., 
    LOS ANGELES, CA. SUSPECT(S): KHAYRI DOE SR. DOB 04/18/71 M/B, BLK HAIR, 
    BRO EYE. VEHICLE: 81' BUICK 2-DR, BLUE (4XXX000).</description> 
    <contact>DET. SMITH, 77TH DIV, LOS ANGELES POLICE 
    DEPT-LAPD AT 213 485-2389</contact> 
    <area> 
      <areaDesc>Los Angeles County</areaDesc> 
      <geocode> 
        <valueName>SAME</valueName> 
        <value>006037</value> 
      </geocode> 
    </area> 
  </info> 
</alert>

この例では、典型的な CAP アラートの基本的なコンポーネントの大部分を見ることができます。下記は典型的なアラート要素のリストです。

  • 固有の <identifier /><sender />: これらの要素を一緒に使うことで、すべてのアラートを一意に識別することができます。現在の CAP 標準は、<identifier> がグローバルに一意でなければならないのか、あるいは特定の <sender /> のコンテキスト内でのみ一意であるのかに関して、少し曖昧です。しかし、<sender /> の値がグローバルに一意でなければならないことは非常に明確です。
  • sent タイムスタンプ: この、ISO 8601 フォーマットでの日付と時刻は、いつアラート文書が送信されたのかを指定します。
  • 性質 (disposition): <status /> 要素と <msgType /> 要素、そして<scope /> 要素は、アラート文書の具体的な性質を表します。
    • status: アラート文書は、実際の出来事や、演習、システム間の通信、テスト、あるいはドラフトを指定することができます。
    • メッセージ・タイプ: アラート文書は、初期通知のこともあれば、あるいは更新、前回のアラートのキャンセル、前回のアラートが受信されたことへの確認応答、あるいは前回受信されたアラートがなぜ拒否されたかを記述するエラー通知であることもあります。
    • スコープ: アラート文書は、一般公衆への配布を目的とすることもでき、あるいはそのアラートを知る必要のある限定された利用者への配布を目的とすることも、限定された特定のプライベート・グループのみへの配布を目的とすることもできます。

下記は典型的な info 要素のリストです。

  • Category: すべてのアラートは、いくつかある一般カテゴリーの中の 1 つに入ります (一般カテゴリーには、地理 (geological)、気象 (meteorological)、公衆衛生と安全 (public health or safety)、救助 (rescue)、法の執行 (law enforcement) などがあります)。
  • description: info 要素は、イベントや、推奨される反応、命令、連絡先情報、他の情報へのリンクなどを記述するテキスト情報を含みます。
  • 性質 (disposition): <urgency /> 要素と <severity /> 要素、そして<certainty /> 要素は、状況の重要性と影響に関する情報を提供します。
    • Urgency (緊急度): 状況の緊急度は、immediate (即刻対応)、expected (対応が望まれる)、past (対応済み)、in the future (将来対応)、あるいは unknown (未確認) です。
    • severity (重大性): 状況の重大性は、extreme (極めて重大)、severe (重大)、moderate (中程度)、minor (軽微)、あるいは unknown (未確認) です。
    • certainty (確実性): 状況の確実性は、observed (確認済み)、likely (可能性が高い)、possible (可能性がある)、unlikely (可能性がない)、あるいは unknown (未確認) です。
  • タイムスタンプ: アラートによって記述される状況は、状況の開始や、その情報が有効になる日付と時刻、またその情報が失効する日付と時刻を示すタイムスタンプを持つことができます。

リソース要素は、状況レポートに付随する写真や文書、測定結果などのリソースを記述します。例えば、法の執行についてのアラートは、容疑者あるいは犠牲者の写真や容疑者の車の写真などを含むかもしれません。リソースは、URL でリンクされるか、あるいは Base64 エンコードのテキストとして直接アラートの中に含まれます。

エリア要素は、そのアラートによって影響される地理的な範囲を記述します。これらの要素は、正確な地図座標を持つ円あるいは多角形で記述される詳細な地理座標を含むこともあれば、単純で一般化されたテキスト記述のこともあります。

セキュリティーを高めるために、CAP アラートは XML デジタル署名を含むことができ、また XML 暗号化を使って暗号化することができます。


CAP アラートを作成し、利用する

CAP ベースのアプリケーションを実装するための最初のステップは、アラート文書の作成方法と構文解析方法を提供することです。このためには任意の XML ライブラリーを使うことができ、また現在、CAP アラートを処理するための Java ライブラリーがいくつかあります。ここで紹介する例では Apache Abdera プロジェクトを使うことにし、Abdera に組み込みの、デジタル署名され暗号化された文書のサポートを利用します。Abdera を使うことで、Atom 出版プロトコルのエンドポイントの実装が容易になります。後ほど、このエンドポイントを使ってアラートを公開し、管理する方法を説明します。Abdera に関する詳細は、Abdera の Web サイト (「参考文献」を参照) を訪れてください。

この例は、アラート文書の内容に完全にアクセスするための一連のインターフェースとクラスを提供します。この CAP 実装の完全なソースは、この記事に付属のダウンロード用 zip ファイルに含まれています。ソースコードのダウンロード方法は、この記事の最後にある「ダウンロード」セクションを見てください。

リスト 2 は、1つの <info /> 要素を使ってアラート文書を作成する方法を示しています。

リスト 2. Apache Abdera で CAP アラートを作成する
Abdera abdera = new Abdera();
Factory factory = abdera.getFactory();

Alert alert = (Alert) factory.newElement(CAP_ALERT);
alert.setIdentifier("ABC123DEF456");
alert.setSender("jasnell@example.org");
alert.setSent(new Date());
alert.setStatus(Alert.Status.Actual);
//...
Info info = alert.addInfo();
info.setCategories(Info.Category.Geo);
info.setEvent("Something happened");
info.setUrgency(Info.Urgency.Past);
info.setSeverity(Info.Severity.Extreme);
//...

リスト 3 は、CAP アラート文書を構文解析し、その文書に含まれる情報にアクセスする方法を示しています。

リスト 3. Apache Abdera で CAP アラートを構文解析する
Abdera abdera = new Abdera();
Parser parser = abdera.getParser();
InputStream in = ... // get the input stream

Document<Alert> doc = parser.parse(in);
Alert alert = doc.getRoot();

System.out.println(alert.getIdentifier());
System.out.println(alert.getSender());
System.out.println(alert.getSent());
System.out.println(alert.getStatus());
//...
for (Info info : alert.getInfo()) {
  System.out.println(info.getEvent());
  //...
}

この CAP 実装は Abdera をベースにしているため、多くの便利な機能を継承しています。例えば toString() メソッドと writeTo(...) メソッドを使って直接 XML にシリアライズすることができ、さらにはもっと重要な点として、アラート文書に署名するための XML デジタル署名をサポートすることができます。


CAP アラートにデジタル署名する

デジタル署名された CAP アラートによって、受信者はそのアラートの真偽のほどを確認することができます。公衆の安全に関わる状況を処理する場合には、アラート配布システムが乱用されるのを防ぐために、こうした保護手段は重要です。

サンプル実装を使ってアラートに署名するためには、Abdera がオプションとして持つセキュリティー・モジュールと、デジタル署名を作成するために適切な秘密鍵、そして署名の検証に使用する公開鍵を含む X.509 証明書が必要です。リスト 4 は、このプロセスを説明しています。getSignatureOptions(...) をコールすることによって、署名プロセス用の秘密鍵と X.509 証明書が準備されます。

リスト 4. CAP アラートにデジタル署名する
Abdera abdera = new Abdera(); 
//... create the Alert document
AbderaSecurity absec = new AbderaSecurity(abdera); 
Signature sig = absec.getSignature(); 
SignatureOptions sigoptions = getSignatureOptions(sig); 

doc = sig.sign(doc.getRoot(), sigoptions).getDocument();

署名した後のアラート文書には Enveloped Signature 形式の署名が含まれ、さらにこの署名は X.509 証明書を含んでいます (リスト 5)。

リスト 5. デジタル署名された CAP アラート
<alert xmlns="urn:oasis:names:tc:emergency:cap:1.1"> 
  <identifier>ABC123DEF456</identifier> 
  <sender>jasnell@example.org</sender> 
  <sent>2007-06-30T19:15:32.468Z</sent> 
  <status>Actual</status> 
  <info>...</info> 
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
    <ds:SignedInfo> 
      <ds:CanonicalizationMethod 
        Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
      <ds:SignatureMethod 
        Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1" /> 
      <ds:Reference URI=""> 
        <ds:Transforms> 
          <ds:Transform 
            Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
          <ds:Transform 
            Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
        </ds:Transforms> 
        <ds:DigestMethod 
          Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
        <ds:DigestValue>...</ds:DigestValue> 
      </ds:Reference> 
    </ds:SignedInfo> 
    <ds:SignatureValue>...</ds:SignatureValue> 
    <ds:KeyInfo> 
      <ds:X509Data> 
        <ds:X509Certificate> 
          ...
        </ds:X509Certificate> 
      </ds:X509Data> 
    </ds:KeyInfo> 
  </ds:Signature>
</alert>

このデジタル署名によって、署名が生成された後にアラートが一部でも変更されると署名が無効になることが保証されます。もし署名が有効であり、署名に含まれる X.509 証明書が信頼できるものだとすると、受信者は通常、そのアラートが信頼できるものであるか、あるいは少なくとも第三者によって変更されていないものとみなすことができます。

X.509 証明書を含む、署名されたアラートは、その署名を検証するために必要なすべての情報を含んでいます (リスト 6)。

リスト 6. デジタル署名された CAP アラートを検証する。
Abdera abdera = new Abdera();
//... parse the Alert document
AbderaSecurity absec = new AbderaSecurity(abdera);
Signature sig = absec.getSignature();

boolean isValid = sig.verify(doc.getRoot(),null);

このサンプル・アプリケーションでは、Atom 出版プロトコルで公開されたすべての CAP アラートが有効なデジタル署名を含む必要があります。さらにこのアプリケーションは、これらのアラートを、公開後も署名が有効なままに保持される方法で再配布します。


CAP アラートを暗号化する

アラートは、適切な権限を持つ特定の人のみがアクセスできる機密情報を含むことがよくあります。アラートの機密性を保証する方法は数多くありますが、CAP 仕様では XML 暗号化のサポートが明示的に要求されています。ここで紹介するサンプル・アプリケーションは暗号化された文書を利用しませんが、Abdera をベースにした実装は、このような暗号化を容易に処理することができます (リスト 7)。

リスト 7. CAP アラートを暗号化する
Alert alert = //... create the CAP Alert

String jceAlgorithmName = "AES"; 
KeyGenerator keyGenerator = 
    KeyGenerator.getInstance(jceAlgorithmName); 
keyGenerator.init(128); 
SecretKey key = keyGenerator.generateKey(); 

AbderaSecurity absec = new AbderaSecurity(abdera); 

Encryption enc = absec.getEncryption(); 
EncryptionOptions options = enc.getDefaultEncryptionOptions(); 
options.setDataEncryptionKey(key); 

// Encrypt the document using the generated key 
Document enc_doc = enc.encrypt(alert.getDocument(), options);

この例では、アラート文書は対称鍵を使って暗号化されています (この文書を暗号化解除するためには、受信側はこの鍵を知っている必要があります)。このようにしている理由は例を単純化するためにすぎません。公開鍵と秘密鍵のペアを使った、あるいは Diffie-Hellman などの鍵交換方式を使った非対称鍵暗号化も可能であり、場合によると、そうした方法が推奨されます。リスト 7 に示すコードの結果として、リスト 8 に (省略された形式で) 示す、暗号化された XML 文書が作成されます。

リスト 8. 暗号化された CAP アラート
<?xml version='1.0' encoding='utf-8'?> 
<xenc:EncryptedData 
  xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" 
  Type="http://www.w3.org/2001/04/xmlenc#Element"> 
  <xenc:EncryptionMethod 
    Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" /> 
  <xenc:CipherData> 
    <xenc:CipherValue>...</xenc:CipherValue> 
  </xenc:CipherData> 
</xenc:EncryptedData>

アラート文書を暗号化する前にデジタル署名するように、強くお勧めします。そうすることによって、攻撃者が暗号を破らずに暗号化データを変更できてしまう、いくつかの潜在的な攻撃を防ぐことができます。


CAP アラートを公開する

これでアラート文書の作成方法と構文解析方法は用意できたので、それらを公開し、管理する手段が必要です。このためには Atom 出版プロトコルを利用します。

Atompub は個々のリソースのコレクションに基づいています。CAP サービスの場合には、CAP アラート文書を追加するためのコレクションは 1 つです。Atom フィードで表現されるアラートのコレクションを取得するためには、そのコレクションの URI に対して HTTP GET リクエストを発行します。各アラートは、Atom エントリー文書と CAP アラート文書の両方で表現されます。

表 1 は CAP 公開サービスがサポートする URI とメソッドのリストと説明です。

表 1 CAP サービス TEST FOR PRINT がサポートする URI と操作
URI とタイプメソッド操作説明

URI: /capservice

タイプ: application/atomsvc+xml

GET取得Atom サービス文書を取得する

URI: /capservice/alerts

タイプ: application/atom+xml;type=feed

GETリスト作成このコレクションに対する Atom フィードを取得する

URI: /capserver/alerts

タイプ: application/alert+xml

POST作成Atom のコレクションに CAP アラートを追加する

URI: /capserver/alerts/{identifier}.atom

タイプ: application/atom+xml;type=entry

GET取得CAP アラートを表す Atom エントリーを取得する

URI: /capserver/alerts/{identifier}.atom

タイプ: なし

DELETE削除CAP アラートを削除する

URI: /capserver/alerts/{identifier}.cap

タイプ: application/alert+xml

GET取得公開された CAP アラートを取得する

URI: /capserver/alerts/{identifier}.cap

タイプ: application/alert+xml

PUT更新公開された CAP アラートを更新する

URI: /capserver/alerts/{identifier}.cap

タイプ: なし

DELETE削除CAP アラートを削除する

この記事に付属のダウンロード用 zip ファイルは、この CAP サービスを完全に実装しています (詳細は「ダウンロード」セクションを参照)。サンプルを実行するためには、Apache Tomcat や IBM WebSphere® Application Server などの Java Web アプリケーション・サーバーが必要です。アーカイブには完全な説明が含まれています。

注意事項として、CAP 標準はアラート文書に対する MIME メディア・タイプを定義していません。application/xml メディア・タイプを使うことはできますが、アラートのような特別な文書フォーマットにこのような汎用のメディア・タイプを使うことは望ましくありません。私はサンプル・アプリケーション用に application/alert+xml というメディア・タイプを作り、これを使ってアラート文書を識別することにしました。


アラートをポストする

コレクションにアラート文書を公開するために必要なステップは 2 つか 3 つしかありません (リスト 9)。まず、リスト 2リスト 4 に示したようにアラート文書を作成し、それに署名します。次に Abdera クライアントを作成し、アラートに対して該当するメディア・タイプを指定します。そして最後に、HTTP POST を使ってコレクションにアラートを送信します。

リスト 9. コレクションにアラートをポストする
Alert alert = // create and sign the alert
RequestOptions options = client.getDefaultRequestOptions(); 
options.setContentType("application/alert+xml"); 
resp = client.post(
  "http://localhost:9080/capserver/alerts", 
  alert.getDocument(), options);

switch(resp.getType()) { 
  case SUCCESS: 
    // posting succeeded
  default: 
    // something else happened
    System.out.println(resp.getStatus()); 
    System.out.println(resp.getStatusText()); 
}

POST 操作が成功すると、HTTP レスポンスには、公開されたアラートを表す Atom エントリー文書の場所を指定する Location ヘッダーが含まれることになります。このエントリーには、コレクションに送信された CAP アラート文書へのリンクが含まれています。サーバーは、このエントリー文書にデジタル署名します。リスト 10 はサーバーが作成したエントリー文書を示しています。

リスト 10. ポストされた CAP アラートを表す Atom エントリー文書
<?xml version="1.0" encoding="utf-8"?> 
<entry> 
  <id>http://localhost:9080/capserver/alerts/KAR0-0306112239-SW</id> 
  <updated>2003-06-12T05:39:00.000Z</updated> 
  <published>2003-06-12T05:39:00.000Z</published> 
  <app:edited xmlns:app=
      "http://www.w3.org/2007/app">2007-06-27T05:12:05.448Z</app:edited> 
  <title type="text">AMBER ALERT</title> 
  <author><name>LOS ANGELES POLICE DEPT - LAPD</name></author> 
  <summary type="text">...</summary> 
  <link href="http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.cap" />
  <link href="http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.cap" 
      rel="edit-media" />
  <link href="http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.cap" 
      rel="enclosure" />
  <link href="http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.atom" 
      rel="self" />
  <content type="application/alert+xml"
      src="http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.cap" /> 
  <category scheme="urn:oasis:names:tc:emergency:cap:1.1:status" term="Actual" /> 
  <category scheme="urn:oasis:names:tc:emergency:cap:1.1:msgtype" term="Alert" />
  <category scheme="urn:oasis:names:tc:emergency:cap:1.1" term="Rescue" />
  <category scheme="urn:oasis:names:tc:emergency:cap:1.1:urgency" term="Immediate" />
  <category scheme="urn:oasis:names:tc:emergency:cap:1.1:severity" term="Severe" /> 
  <category scheme="urn:oasis:names:tc:emergency:cap:1.1:certainty" term="Likely" /> 
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
    ...
  </ds:Signature>
</entry>

この例では、CAP アラートに含まれるデータ要素のうちのいくつかが Atom エントリー文書の中で atom:category 要素に変換されています。こうすることによって、Atom クライアントの実装は、事前に CAP 仕様を知らなくてもアラートに関する追加の情報を表示することができます。Atom エントリー文書内のアラートのメタデータを表現する標準的な方法はないため、この情報が実装ごとにさまざまな方法で表示される可能性があります。

クライアント・アプリケーションは、エントリーの中にあるさまざまな atom:link 要素の中で提供される URL を使って、Atom エントリー文書あるいは CAP アラート文書のいずれかにアクセスすることができます。リスト 11 に示す CAP アラート文書は http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.cap で取得することができます。

リスト 11. CAP アラートを取得する
Entry entry = // get the entry
ClientResponse resp = client.get(
    "http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.cap");
Document<Alert> doc = resp.getDocument();
Alert alert = doc.getRoot();

リスト 12 に示す Atom エントリー文書は http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.atom で取得することができます。

リスト 12. アラート用の Atom エントリー文書を取得する
ClientResponse resp = client.get(
  "http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.atom");
Document<Entry> doc = resp.getDocument();
Entry entry = doc.getRoot();

ポストされたアラートをリストする

ポストされたアラートは、そのコレクションが提供する Atom フィード文書の中にリストされ、一番新しく作成された、あるいは変更されたアラートが先頭にリストされます。リスト 13 に示すように、各エントリーは厳密に 1 つのアラート文書のみを表し、またそのアラートを取得したり変更したりするために必要なリンクを提供します。

リスト 13. Atom のコレクションのカタログ
<?xml version="1.0" encoding="utf-8"?> 
<feed xml:base="http://localhost:9080/capserver/alerts" 
      xml:lang="en-US" 
      xmlns="http://www.w3.org/2005/Atom"> 
   <id>http://localhost:9080/capserver/alerts</id> 
   <title type="text">CAP Catalog</title> 
   <updated>2007-06-27T07:51:29.676Z</updated> 
   <author><name>CAP Catalog</name></author> 
   <link href="http://localhost:9080/capserver/alerts" rel="self" />
   <link href="http://localhost:9080/capserver/alerts?page=2" 
     rel="next" type="application/atom+xml" />
   
   <entry> 
     <id>http://localhost:9080/capserver/alerts/KAR0-0306112239-SW</id> 
     ...
   </entry> 
   ... 
   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     ... 
   </ds:Signature> 
 </feed>

アラートを変更し、削除する

アラートの変更は、通常は単純なプロセスです。まず、現在編集可能なアラート文書の表現を取得するために、編集クライアントは CAP 文書に対して HTTP GET リクエストを送信します。これによって、最後に変更されたタイムスタンプあるいはエンティティー・タグと共にアラートが返されます。そしてクライアントは必要な変更を加え、アラートから古いデジタル署名を削除し、変更された文書に再度署名します。それが終わると、クライアントは変更されたアラートを含む PUT リクエストを、オリジナルの文書を取得するために使用した URL と同じ URL に送信します (リスト 14)。

リスト 14. CAP アラートを更新する。
Alert alert = // get and modify the alert
RequestOptions options = client.getDefaultRequestOptions(); 
options.setIfMatch(etag);
options.setContentType("application/alert+xml"); 
resp = client.put(
  "http://localhost:9080/capserver/alerts/KAR0-0306112239-SW.cap", 
  alert.getDocument(), options);

switch(resp.getType()) { 
  case SUCCESS: 
    // update succeeded
  default: 
    // something else happened
    System.out.println(resp.getStatus()); 
    System.out.println(resp.getStatusText()); 
}

典型的な Atom 出版プロトコル実装では Atom エントリー文書が編集可能なことに注意してください。しかし CAP サーバーの例では、Atom エントリー文書はアラート文書に含まれる情報を基に自動的に生成され、クライアントがそれらを直接編集することはできません。Atom エントリー文書を編集するためには、クライアントは CAP アラートを編集する必要があります。

アラートを削除するためには、そのアラート文書を取得するために使用した URL に HTTP DELETE リクエストを送信します (リスト 15)。

リスト 15. CAP アラートを削除する
RequestOptions.options = client.delete(
  "http://localhost:9080/capserver/alerts/KAR0- 0306112239-SW.cap");

このサンプル・アプリケーションはアクセス・コントロール機構を何も実装していませんが、実際の実装では、適切な権限を持った人のみがアラート文書をポストでき、変更でき、削除できるように保証する必要があります。


まとめ

Common Alerting Protocol の開発を推進する際の 1 つの重要な目標として、生命にかかわる、あらゆる出来事についての重要情報を配布するための包括的で標準化された手段を提供することです。Atom 出版プロトコルを使って CAP アラートのコレクションを公開し、管理することは、その目標に近づくために役立つはずです。


ダウンロード

内容ファイル名サイズ
Sample Java Web Application for this articleatomcap.zip18455KB

参考文献

学ぶために

  • 「Atom 出版プロトコルを知る」シリーズ (James Snell 著、developerWorks、2006年10月) は、このプロトコルの基本的な操作を紹介しています。
  • 「Atom 1.0 Syndication Formatの概要」(James Snell 著、developerWorks、2005年8月) は、この 人気の Web コンテンツ・シンジケーション・フォーマットの詳細を解説しています。
  • CAP Cookbookでは Common Alerting Protocol の詳細を学ぶことができます。
  • The CAP V1.1 仕様を読んでください。CAP は、あらゆる種類のネットワークを通して、あらゆる種類の緊急警報と公衆への警告を交換するための単純ながら汎用のフォーマットです。
  • California Emergency Digital Information Serviceを調べ、この、州全体にわたる EDIS ネットワークが、どのように CAP と Atom を組み合わせてアラート通知を公開しているのかを知ってください。
  • Atom 出版プロトコルの仕様を読み、このコンテンツ出版と管理のための標準の詳細を学んでください。
  • Atom 配信フォーマット (Atom Syndication Format)の仕様を読み、ブログやニュース・ヘッドラインなどの Web コンテンツを Web サイトに配信し、またユーザー・エージェントに直接配信するフィードを記述する、この XML ベースの文書フォーマットの詳細を学んでください。
  • Apache Abderaプロジェクトの Web サイトを訪れ、Atom 配信フォーマットと Atom 出版プロトコル仕様の完全機能でハイパフォーマンスの実装を構築するための開発作業について学んでください。
  • Who Is Using CAP?には、アプリケーションやサービスに関して CAP をサポートすることを表明した企業や機関、組織などがリストされています。
  • XML および関連技術において IBM 認証開発者になる方法については、IBM XML certificationを参照してください。
  • developerWorks のXML ゾーンXML の技術ライブラリーとして、広範な話題を網羅した技術記事やヒント、チュートリアル、技術標準、IBM レッドブックなどを用意しています。
  • developerWorks technical events and webcastsで最新情報を入手してください。
  • technology bookstoreには、XML や JacaScript、その他の Web 技術に関する本が豊富に取り揃えられています。

製品や技術を入手するために

  • 皆さんの次期開発プロジェクトをIBM trial softwareで構築してください。developerWorks から直接ダウンロードすることができます。
  • Java ベースの Web サーバー、Apache Tomcatをダウンロードし、インストールしてください。
  • J2EE アプリケーション・サーバーとサンプル・アプリケーション、開発ツール、そしてウィザードを持ち、そのまま使えるソリューションの試用版、WebSphere Application Server Express V6.1をダウンロードしてください。あるいは、完全にライセンス許可され、無料の WebSphere Application Server Community Edition V1.1.0.2 を試してみてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Open source
ArticleID=258233
ArticleTitle=公衆に対する重要な警告を Web に公開する
publish-date=08142007