『 RESTful  ウェブサービス』 第 4 回読書会 第 9 章 サービスの基本要素 Siena. (2008/07/12 Sat)
9章の概要 <ul><li>ここまでの焦点 </li></ul><ul><ul><li>HTTP, URI, XML </li></ul></ul><ul><li>他に必要な追加技術 :  例えば </li></ul><ul><ul><li>ド...
9章のおしながき <ul><li>9.1  表現フォーマット </li></ul><ul><ul><li>XHTML, microformats, Atom, SVG,  フォームエンコードされたキーと値の組 ,  JSON, RDF と RD...
9.1  表現フォーマット
9.1 表現フォーマット <ul><li>表現のフォーマットはどのようなものにすべきか </li></ul><ul><ul><li>オレオレ XML 語彙を使わないですむように </li></ul></ul><ul><ul><li>どのような選...
9.1.1 XHTML <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xhtml+xml </li></ul></ul><ul><ul><li>従来の  HTML (text/html)  ...
9.1.1 XHTML <ul><li>XHTML  と比較した  HTML </li></ul><ul><ul><li>XML  パーサで確実な解析はできない ので勧めない </li></ul></ul><ul><ul><li>優れた  HT...
9.1.1 XHTML <ul><li>HTML  ファミリの特徴 </li></ul><ul><ul><li>一般的なデータの多くを表現できる </li></ul></ul><ul><ul><ul><li>リスト ,  表など </li></...
9.1.2 XHTMLとマイクロフォーマット <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xhtml+xml </li></ul></ul><ul><li>microformats </l...
9.1.2 XHTMLとマイクロフォーマット <ul><li>hCalendar </li></ul><ul><ul><li>カレンダーやイベント情報 </li></ul></ul><ul><ul><li>IETF iCalendar  フォー...
9.1.2 XHTMLとマイクロフォーマット <ul><li>rel-nofollow (rel 属性値 ) </li></ul><ul><ul><li>リンクするが、必ずしも承認するとは限らないことの明示 </li></ul></ul><ul...
9.1.2 XHTMLとマイクロフォーマット <ul><li>XFN (XHTML Friend Network) (rel 属性値 ) </li></ul><ul><ul><li>対人関係 </li></ul></ul><ul><ul><li...
9.1.2 XHTMLとマイクロフォーマット <ul><li>執筆時点で既知の  microformats  </li></ul><ul><ul><li>microformats Wiki <http://microformats.org/wi...
9.1.3 Atom <ul><li>メディアタイプ </li></ul><ul><ul><li>application/atom+xml </li></ul></ul><ul><li>Atom </li></ul><ul><ul><li>タイ...
9.1.3 Atom <ul><li>Atom の利用例 </li></ul><ul><ul><li>一般にリソースのディレクトリとみなせる </li></ul></ul><ul><ul><ul><li>フォトギャラリーやミュージックアルバム、...
9.1.3 Atom <ul><li>OpenSearch </li></ul><ul><ul><li>Atom  において、よく利用される語彙 </li></ul></ul><ul><ul><li>検索結果一覧の表現 </li></ul></...
9.1.4 SVG <ul><li>メディアタイプ </li></ul><ul><ul><li>image/svg+xml </li></ul></ul><ul><li>SVG (Scalable Vector Graphics) </li><...
9.1.5 フォームエンコードされたキーと値 <ul><li>メディアタイプ </li></ul><ul><ul><li>application/x-ww-form-urlencoded </li></ul></ul><ul><li>URI  ...
9.1.6 JSON <ul><li>メディアタイプ </li></ul><ul><ul><li>application/json </li></ul></ul><ul><li>JSON (JacaScript Object Notation)...
9.1.7 RDF  と  RDFa <ul><li>RDF (Resource Description Framework) </li></ul><ul><ul><li>リソースに関する知識を表現 </li></ul></ul><ul><ul...
9.1.7 RDF  と  RDFa <ul><li>RDFa </li></ul><ul><ul><li>microformats  のように埋め込める </li></ul></ul><ul><ul><li>XHTML2  を想定しており、 ...
9.1.8 FW固有の直接化フォーマット <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xml </li></ul></ul><ul><li>フレームワーク固有の XML 語彙 </li><...
9.1.9 特別な XHTML <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xhtml+xml </li></ul></ul><ul><li>特殊な表現が必要か ? </li></ul><...
9.1.9 特別な XHTML <ul><li>主要なデザインパターン </li></ul><ul><ul><li>HTML  要素型があればそれを利用 </li></ul></ul><ul><ul><ul><li>キー値ペア :  dl </...
9.1.10 その他のXML語彙 <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xml </li></ul></ul><ul><li>既存の  XML  語彙の利用 </li></ul><u...
9.1.10 その他のXML語彙 <ul><li>独自 XML 語彙の作成 </li></ul><ul><ul><li>本書では最後の手段とみなす </li></ul></ul><ul><ul><li>一般には様々な語彙が作成されている </l...
9.1.10 その他のXML語彙 <ul><li>適切な技術選択をせよ </li></ul><ul><ul><li>不必要に独自定義を持ち込まない </li></ul></ul><ul><ul><ul><li>既存の  XML 語彙 </li>...
9.1.11 エンコーディングの問題 <ul><li>多言語への考慮 </li></ul><ul><ul><li>文字エンコーディングを理解する </li></ul></ul><ul><ul><ul><li>符号化文字集合  (CCS : Co...
9.1.11 エンコーディングの問題 <ul><li>文字コード変換時の考慮点 </li></ul><ul><ul><li>全てのテキストを  UTF-*  に変換 </li></ul></ul><ul><ul><li>エンコーディングが未指定...
9.1.11 エンコーディングの問題 <ul><li>XML  と  HTTP  で競合する場合 </li></ul><ul><ul><li>XML  文書中に記述されたものより、 HTTP  の  Content-Type  応答ヘッダで指定...
9.1.11 エンコーディングの問題 <ul><li>JSON 文書の文字エンコーディング </li></ul><ul><ul><li>プレーンテキスト </li></ul></ul><ul><ul><ul><li>構造化されていない </li...
9.2  パッケージ済みの制御フロー
<ul><li>HTTP 標準応答コード </li></ul><ul><ul><li>サーバから提案された制御フロー </li></ul></ul><ul><li>参考資料 </li></ul><ul><ul><li>HTTP 1.1 Head...
9.2.1  一般規則 , 9.2.2  制御フロー <ul><li>9.2.1  一般規則 </li></ul><ul><ul><li>ほぼすべてのサービスに適用可能な標準的な制御フロー </li></ul></ul><ul><ul><li>...
9.2.3 Atom Publishing Protocol <ul><li>AtomPub </li></ul><ul><ul><li>HTTP  統一インタフェース上の 高水準統一インタフェース </li></ul></ul><ul><ul...
4.2.3 GData <ul><li>GData </li></ul><ul><ul><li>AtomPub  の拡張 </li></ul></ul><ul><ul><li>新しい種類のリソースを追加 </li></ul></ul><ul><...
4.2.3 GData <ul><li>コレクションの検索 </li></ul><ul><ul><li>追加 :  検索結果のリスト </li></ul></ul><ul><ul><li>コレクションメンバの一部の表現の  GET </li><...
4.2.5 POST Once Exacly <ul><li>POST  の欠点 </li></ul><ul><ul><li>信頼できる  HTTP  を台無しにすること </li></ul></ul><ul><ul><li>べき等ではないため...
9.3  ハイパーメディアテクノロジ
<ul><li>ハイパーメディアフォーマット </li></ul><ul><ul><li>リンクとフォームを 構造的に サポートするフォーマット </li></ul></ul><ul><li>フォーム </li></ul><ul><ul><li...
9.3.1 URI Template <ul><li>kunit  さんにパス (w </li></ul>
9.3.2 HTML 4 (XHTML) <ul><li>ハイパーリンク </li></ul><ul><ul><li>a, link  要素 </li></ul></ul><ul><ul><li>href  属性 </li></ul></ul>...
9.3.3 HTML 5 <ul><li>仕様策定中 </li></ul><ul><ul><li>プログラマブルウェブを使用する上での問題の多くを解決 </li></ul></ul><ul><ul><li>2008 年末頃に勧告予定  ( 執筆...
9.3.4 WADL <ul><li>まにあわなーい </li></ul>
Upcoming SlideShare
Loading in …5
×

『RESTful Web サービス』読書会 第4回 9章 説明資料

2,234 views

Published on

『RESTful Web サービス』読書会 第4回
9章「サービスの基本要素」
説明資料
レイアウトが崩れているので handsout.jp にも掲載 <http://handsout.jp/slide/647>

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,234
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

『RESTful Web サービス』読書会 第4回 9章 説明資料

  1. 1. 『 RESTful ウェブサービス』 第 4 回読書会 第 9 章 サービスの基本要素 Siena. (2008/07/12 Sat)
  2. 2. 9章の概要 <ul><li>ここまでの焦点 </li></ul><ul><ul><li>HTTP, URI, XML </li></ul></ul><ul><li>他に必要な追加技術 : 例えば </li></ul><ul><ul><li>ドメイン固有の XML 語彙 </li></ul></ul><ul><ul><li>統一インタフェースを提供するための標準ルール </li></ul></ul><ul><li>9 章の目的 </li></ul><ul><ul><li>ウェブサービスを改善する複数の技術の紹介 </li></ul></ul><ul><li>凡例 </li></ul><ul><ul><li>平文 , 要点 , 肯定的観点 , 否定的観点 , 個人的な補足 </li></ul></ul><ul><ul><li>program code </li></ul></ul>
  3. 3. 9章のおしながき <ul><li>9.1 表現フォーマット </li></ul><ul><ul><li>XHTML, microformats, Atom, SVG, フォームエンコードされたキーと値の組 , JSON, RDF と RDFa, フレームワーク固有の直列化フォーマット , 特別な XHTML, 他の XML 標準と一時的語彙 , エンコーディングの問題 </li></ul></ul><ul><li>9.2 パッケージ済みの制御フロー </li></ul><ul><ul><li>一般規則 , DBMS と連動する制御フロー , AtomPub, GData, POST Once Exactly </li></ul></ul><ul><li>9.3 ハイパーメディアテクノロジ </li></ul><ul><ul><li>URI Template, HTML4 (XHTML), HTML5, WADL </li></ul></ul>
  4. 4. 9.1 表現フォーマット
  5. 5. 9.1 表現フォーマット <ul><li>表現のフォーマットはどのようなものにすべきか </li></ul><ul><ul><li>オレオレ XML 語彙を使わないですむように </li></ul></ul><ul><ul><li>どのような選択肢があるかの確認 </li></ul></ul><ul><li>ここでの想定 </li></ul><ul><ul><li>クライアントは ( サービス提供者が適切に決定した ) いかなる表現フォーマットも受入可能 </li></ul></ul><ul><ul><li>クライアントの既知の要件を優先 </li></ul></ul><ul><ul><ul><li>例 : Excel へ直接入力されるなら CSV データを提供する </li></ul></ul></ul><ul><ul><li>人間にしか理解できないドキュメント形式は除外 </li></ul></ul><ul><ul><ul><li>例 : オーディオデータ </li></ul></ul></ul>
  6. 6. 9.1.1 XHTML <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xhtml+xml </li></ul></ul><ul><ul><li>従来の HTML (text/html) とは異なる </li></ul></ul><ul><ul><ul><li>IE (6 まで ?) が HTML として扱うのは text/html のみ </li></ul></ul></ul><ul><ul><ul><li>XHTML でも、必要なら text/html として提供する </li></ul></ul></ul><ul><li>HTML ファミリ </li></ul><ul><ul><li>HTML は、従来のウェブの原動力 </li></ul></ul><ul><ul><li>XHTML は、プログラマブルウェブの原動力となりえる </li></ul></ul><ul><ul><ul><li>XHTML を妥当な XML として表現するための制約に従う </li></ul></ul></ul><ul><ul><ul><li>HTML とは、いくつかの構文上の違いがある </li></ul></ul></ul>
  7. 7. 9.1.1 XHTML <ul><li>XHTML と比較した HTML </li></ul><ul><ul><li>XML パーサで確実な解析はできない ので勧めない </li></ul></ul><ul><ul><li>優れた HTML パーサが存在するので選択肢の一つ </li></ul></ul><ul><ul><ul><li>それでもパース失敗することがしばしば </li></ul></ul></ul><ul><ul><ul><li>妥当な HTML になっていないのが原因 </li></ul></ul></ul><ul><ul><ul><li>「データ提供者は規則に厳密に従い、 データ利用者は緩やかに解釈する」 という原則に期待できないのが現状 </li></ul></ul></ul><ul><ul><li>いくつかの HTML パーサは 2 章で紹介した </li></ul></ul><ul><ul><ul><li>「 2.5 レスポンスの処理 – XML パーサ」のこと ? </li></ul></ul></ul><ul><ul><ul><li>XML パーサしか紹介されていないような </li></ul></ul></ul><ul><ul><li>多くのクライアントに処理させるには XHTML を勧める </li></ul></ul>
  8. 8. 9.1.1 XHTML <ul><li>HTML ファミリの特徴 </li></ul><ul><ul><li>一般的なデータの多くを表現できる </li></ul></ul><ul><ul><ul><li>リスト , 表など </li></ul></ul></ul><ul><ul><li>ハイパーメディア形式が限られている </li></ul></ul><ul><ul><li>統一インタフェースが完全にサポートされない </li></ul></ul><ul><ul><ul><li>HTML5 で解決される予定 </li></ul></ul></ul><ul><ul><li>意味的な表現力が不十分 </li></ul></ul><ul><ul><ul><li>コードや出力のみで、詩などの形式を対象としていない </li></ul></ul></ul><ul><ul><li>要素内容を表すメタデータの記述力が弱い </li></ul></ul><ul><ul><ul><li>rel, rev 属性に指定できるのは 15 種類の関係のみ </li></ul></ul></ul><ul><ul><ul><li>リストの種類を class 属性で指定しても機械可読でない </li></ul></ul></ul><ul><ul><ul><li>ユーザが独自の値を定義すると相互運用性が失われる </li></ul></ul></ul><ul><ul><ul><li>microformats も参照 </li></ul></ul></ul>
  9. 9. 9.1.2 XHTMLとマイクロフォーマット <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xhtml+xml </li></ul></ul><ul><li>microformats </li></ul><ul><ul><li>URI: <http://microformats.org/> </li></ul></ul><ul><ul><li>XHTML に ドメイン固有の意味を付与 する簡易標準 </li></ul></ul><ul><ul><li>既存の語彙を使用 </li></ul></ul><ul><ul><li>class, rel, rev 属性の値を独自に拡張定義 </li></ul></ul><ul><li>例 : hCard による自宅電話番号 </li></ul><ul><ul><li><span class=“tel” > <span class=“type” >home</span> <span class=“value” >+1.415.555.1212</span> </span> </li></ul></ul>
  10. 10. 9.1.2 XHTMLとマイクロフォーマット <ul><li>hCalendar </li></ul><ul><ul><li>カレンダーやイベント情報 </li></ul></ul><ul><ul><li>IETF iCalendar フォーマットがベース </li></ul></ul><ul><li>hCard </li></ul><ul><ul><li>連絡先 </li></ul></ul><ul><ul><li>RFC 2426 (vCard) がベース </li></ul></ul><ul><li>rel-license (rel 属性値 ) </li></ul><ul><ul><li>文書のライセンス条項へのリンクであることの明示 </li></ul></ul><ul><ul><li><a href= “http://creativecommons.org/ licenses/by-nd” rel=“license” > この文書のライセンス </a> </li></ul></ul>
  11. 11. 9.1.2 XHTMLとマイクロフォーマット <ul><li>rel-nofollow (rel 属性値 ) </li></ul><ul><ul><li>リンクするが、必ずしも承認するとは限らないことの明示 </li></ul></ul><ul><li>rel-tag (rel 属性値 ) </li></ul><ul><ul><li>外部の分類システムにしたがったラベル付けであることの明示 </li></ul></ul><ul><li>VoteLinks (rev 属性値 ) </li></ul><ul><ul><li>rel-nofollow の概念の拡張 </li></ul></ul><ul><ul><li><a rev=“vote-for” href=“http://example.com”> 最高のページ </a>, <a rev=“vote-against” href=“http://example.com”> 盗作 </a> </li></ul></ul>
  12. 12. 9.1.2 XHTMLとマイクロフォーマット <ul><li>XFN (XHTML Friend Network) (rel 属性値 ) </li></ul><ul><ul><li>対人関係 </li></ul></ul><ul><ul><li><a rel=“spouse” href=“Bob”>Bob</a> </li></ul></ul><ul><li>XMDP (XHTML MetaData Profiles) </li></ul><ul><ul><li>定義リストを用いた XHTML の独自属性値の定義 </li></ul></ul><ul><ul><li>rel-tag などの定義に利用可能 </li></ul></ul><ul><li>XOXO (Extensible Open XHTML Outlines) </li></ul><ul><ul><li>リストが文書のアウトラインであることを明示 </li></ul></ul>
  13. 13. 9.1.2 XHTMLとマイクロフォーマット <ul><li>執筆時点で既知の microformats </li></ul><ul><ul><li>microformats Wiki <http://microformats.org/wiki/> </li></ul></ul><ul><ul><li>公式なドラフトが約 10 個 </li></ul></ul><ul><ul><li>議論中のものが 50 個以上 </li></ul></ul><ul><ul><ul><li>geo : 緯度・経度 </li></ul></ul></ul><ul><ul><ul><li>hAtom : Atom を XHTML で表記 </li></ul></ul></ul><ul><ul><ul><li>hResume : 経歴 </li></ul></ul></ul><ul><ul><ul><li>hReview : 批評 </li></ul></ul></ul><ul><ul><ul><li>xFolk : ブックマーク (7 章の例に使用可能 ) </li></ul></ul></ul>
  14. 14. 9.1.3 Atom <ul><li>メディアタイプ </li></ul><ul><ul><li>application/atom+xml </li></ul></ul><ul><li>Atom </li></ul><ul><ul><li>タイムスタンプつきの エントリ のリストの説明 </li></ul></ul><ul><ul><ul><li>作者 , 寄稿者 , 言語 , 著作権情報 , タイトル , カテゴリなど </li></ul></ul></ul><ul><ul><li>ブログの更新情報の フィード などに利用 </li></ul></ul><ul><ul><li>乱立した RSS 群の統合と、一般化が目的 </li></ul></ul><ul><ul><li>多くのクライアントで利用可能 </li></ul></ul><ul><li>例 9-2 </li></ul><ul><ul><li>URI で与えられたリソースのメタデータが記述されている </li></ul></ul><ul><ul><li>リソースの詳細は GET して取得 </li></ul></ul>
  15. 15. 9.1.3 Atom <ul><li>Atom の利用例 </li></ul><ul><ul><li>一般にリソースのディレクトリとみなせる </li></ul></ul><ul><ul><ul><li>フォトギャラリーやミュージックアルバム、検索結果などに </li></ul></ul></ul><ul><ul><li>link などを省略可能 </li></ul></ul><ul><ul><ul><li>ステータスレポートや受信メールなどのコンテナとして </li></ul></ul></ul><ul><li>Atom の拡張利用 </li></ul><ul><ul><li>名前空間を用いて独自の語彙で追加データを記述 </li></ul></ul><ul><ul><li>汎用のコンテナとして利用可能 </li></ul></ul>
  16. 16. 9.1.3 Atom <ul><li>OpenSearch </li></ul><ul><ul><li>Atom において、よく利用される語彙 </li></ul></ul><ul><ul><li>検索結果一覧の表現 </li></ul></ul><ul><ul><li>独自の名前空間で追加される要素 </li></ul></ul><ul><ul><ul><li>totalResult : 結果の合計数 </li></ul></ul></ul><ul><ul><ul><li>itemsPerPage : 検索結果のページ当たりの項目数 </li></ul></ul></ul><ul><ul><ul><li>startindex : このフィードに含まれる部分結果の開始位置 </li></ul></ul></ul>
  17. 17. 9.1.4 SVG <ul><li>メディアタイプ </li></ul><ul><ul><li>image/svg+xml </li></ul></ul><ul><li>SVG (Scalable Vector Graphics) </li></ul><ul><ul><li>ベクトルグラフィックフォーマット </li></ul></ul><ul><ul><li>XML で記述 </li></ul></ul>
  18. 18. 9.1.5 フォームエンコードされたキーと値 <ul><li>メディアタイプ </li></ul><ul><ul><li>application/x-ww-form-urlencoded </li></ul></ul><ul><li>URI エンコードされたフォーム入力値 </li></ul><ul><ul><li>6 章を参照 </li></ul></ul><ul><ul><li>Ajax アプリケーションで簡単に生成可能 </li></ul></ul><ul><ul><li>CSV や RFC822 スタイルのキー値ペアを置き換え可能 </li></ul></ul><ul><ul><li>クライアントが汎用のデコードライブラリを持つ </li></ul></ul><ul><ul><ul><li>訳注 : 日本語の扱いに注意 , charset パラメータを使用 </li></ul></ul></ul><ul><ul><li>参考 : HTML4 仕様書では & 区切りでなく ; 区切りを推奨 </li></ul></ul>
  19. 19. 9.1.6 JSON <ul><li>メディアタイプ </li></ul><ul><ul><li>application/json </li></ul></ul><ul><li>JSON (JacaScript Object Notation) </li></ul><ul><ul><li>半構造データの記述に向いた軽量フォーマット </li></ul></ul><ul><ul><li>2.5 節を参照 </li></ul></ul><ul><ul><li>RFC4627 で標準化 </li></ul></ul>
  20. 20. 9.1.7 RDF と RDFa <ul><li>RDF (Resource Description Framework) </li></ul><ul><ul><li>リソースに関する知識を表現 </li></ul></ul><ul><ul><li>Semantic Web の基礎技術 </li></ul></ul><ul><ul><ul><li>OWL や SPARQL など多段のスタック </li></ul></ul></ul><ul><ul><li>機械可読な意味を表現 </li></ul></ul><ul><ul><li>URI として ISBN や URN などの抽象 URI を多様 </li></ul></ul><ul><ul><li>三つ組み (triple) < 主語 , 述語 , 目的語 > </li></ul></ul><ul><ul><ul><li>複数の三つ組みによりグラフを構成 </li></ul></ul></ul><ul><li>例 9-4: “RESTful Web Services” の書籍 </li></ul><ul><ul><li>主語 : urn:isbn:... </li></ul></ul><ul><ul><li>述語 : dc:title ( メタデータ標準 Dublin Core) </li></ul></ul><ul><ul><li>目的語 : RESTful Web Services </li></ul></ul>主語 目的語 述語
  21. 21. 9.1.7 RDF と RDFa <ul><li>RDFa </li></ul><ul><ul><li>microformats のように埋め込める </li></ul></ul><ul><ul><li>XHTML2 を想定しており、 現状では妥当ではなくなる </li></ul></ul><ul><li>eRDF </li></ul><ul><ul><li>RDF アサーションを表現する第 3 の方法 </li></ul></ul><ul><ul><li>妥当な XHTML になる </li></ul></ul><ul><li>microformats との関係 </li></ul><ul><ul><li>どちらもメタデータを記述する </li></ul></ul><ul><ul><li>microformats: 軽量で簡易 , 意味を付加するのに向く </li></ul></ul><ul><ul><li>RDF: 汎用的で多機能 , Semantic Web スタックの利用や、既存 RDF 処理系との相互運用性が必要な場合など </li></ul></ul>
  22. 22. 9.1.8 FW固有の直接化フォーマット <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xml </li></ul></ul><ul><li>フレームワーク固有の XML 語彙 </li></ul><ul><ul><li>Ruby: ActiveRecord </li></ul></ul><ul><ul><li>Python: Django </li></ul></ul><ul><ul><li>例 7-4 を参照 </li></ul></ul><ul><li>7 章や 12 章で言及しているように 推奨しない </li></ul><ul><ul><li>短期での開発では妥協の余地あり </li></ul></ul><ul><ul><li>フレームワーク依存 </li></ul></ul><ul><ul><li>シリアライズされたデータ構造に過ぎない </li></ul></ul><ul><ul><li>文書ではなくハイパーリンクやフォームを含まない </li></ul></ul>
  23. 23. 9.1.9 特別な XHTML <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xhtml+xml </li></ul></ul><ul><li>特殊な表現が必要か ? </li></ul><ul><ul><li>既存技術で表現できない正当な理由があるか再確認する </li></ul></ul><ul><ul><ul><li>HTML ファミリ , Atom, RDF, JSON </li></ul></ul></ul><ul><ul><li>問題を正しく捉えていない可能性はないか </li></ul></ul><ul><li>microformats 仕様の作成 </li></ul><ul><ul><li>可能なら公式に提案して相互運用性を確保 ( 仕様先行 ) </li></ul></ul><ul><ul><li>作成文書に段階的に意味を付加し、その場限りで利用 </li></ul></ul><ul><ul><li>microformats Wiki のデザインパターンと命名規則を参照 </li></ul></ul>
  24. 24. 9.1.9 特別な XHTML <ul><li>主要なデザインパターン </li></ul><ul><ul><li>HTML 要素型があればそれを利用 </li></ul></ul><ul><ul><ul><li>キー値ペア : dl </li></ul></ul></ul><ul><ul><ul><li>リスト : ul, ol </li></ul></ul></ul><ul><ul><ul><li>適するものがない : span, div </li></ul></ul></ul><ul><ul><li>class 属性を指定してタグに追加の意味を付与 </li></ul></ul><ul><ul><ul><li>特に span, div で重要 </li></ul></ul></ul><ul><ul><li>関係の付与 </li></ul></ul><ul><ul><ul><li>rel 属性 : このリソースと他のリソースとの関係 </li></ul></ul></ul><ul><ul><ul><li>rev 属性 : このページと他のページとの関係 </li></ul></ul></ul><ul><ul><ul><li>関係が対称な場合は rel を使用 </li></ul></ul></ul><ul><ul><li>class, rel, rev を説明する XMDP ファイルの作成を検討 </li></ul></ul>
  25. 25. 9.1.10 その他のXML語彙 <ul><li>メディアタイプ </li></ul><ul><ul><li>application/xml </li></ul></ul><ul><li>既存の XML 語彙の利用 </li></ul><ul><ul><li>XMathML, OpenDocument, Chemical Markup Language, ... </li></ul></ul><ul><ul><li>Dublin Core, FOAF, ... (RDF アサーションで利用可能 ) </li></ul></ul>
  26. 26. 9.1.10 その他のXML語彙 <ul><li>独自 XML 語彙の作成 </li></ul><ul><ul><li>本書では最後の手段とみなす </li></ul></ul><ul><ul><li>一般には様々な語彙が作成されている </li></ul></ul><ul><ul><ul><li>本書で言及したウェブサービスのほぼすべてでも </li></ul></ul></ul><ul><li>技術文化の違い </li></ul><ul><ul><li>microformats は新しく、非公式なものとみなされがち </li></ul></ul><ul><ul><li>独自 XML 語彙の作成が正当な手段のようにみなされる </li></ul></ul><ul><ul><li>これは勘違い </li></ul></ul><ul><ul><ul><li>スキーマが定義されなければ、 microformats による 属性の独自値の導入と同程度 </li></ul></ul></ul><ul><ul><ul><li>スキーマ定義は語彙を ( 名前空間で ) 分類可能にするのみ </li></ul></ul></ul><ul><ul><ul><li>( 独自語彙の導入という選択を ? ) 正当化するものではない </li></ul></ul></ul>
  27. 27. 9.1.10 その他のXML語彙 <ul><li>適切な技術選択をせよ </li></ul><ul><ul><li>不必要に独自定義を持ち込まない </li></ul></ul><ul><ul><ul><li>既存の XML 語彙 </li></ul></ul></ul><ul><ul><ul><li>既存の microformats </li></ul></ul></ul><ul><ul><ul><li>検討中の他の非公式だが有力な候補の利用 </li></ul></ul></ul><ul><ul><li>検討の結果、必要なら独自定義を行なう </li></ul></ul><ul><ul><ul><li>要素の導入が不要なら microformats の利用を検討 </li></ul></ul></ul><ul><ul><ul><li>要素の導入が必要なら XML 語彙を定義 </li></ul></ul></ul><ul><ul><ul><ul><li>この場合に microformats による拡張は不適切 </li></ul></ul></ul></ul>
  28. 28. 9.1.11 エンコーディングの問題 <ul><li>多言語への考慮 </li></ul><ul><ul><li>文字エンコーディングを理解する </li></ul></ul><ul><ul><ul><li>符号化文字集合 (CCS : Coded Character Set) </li></ul></ul></ul><ul><ul><ul><li>文字符号化方式 (CES : Character Encoding Scheme) </li></ul></ul></ul><ul><ul><li>言語圏ごとに様々な文字エンコーディングが存在 </li></ul></ul><ul><li>Unicode </li></ul><ul><ul><li>主な符号化方式 : UTF-8 (US-ASCII 上位互換 ), UTF-16 </li></ul></ul><ul><ul><li>多言語データを扱う最良の決断 : Unicode に統一 </li></ul></ul><ul><ul><ul><li>指摘されている問題も把握すべき , 盲目的に過信しない </li></ul></ul></ul><ul><li>文字コード検出 </li></ul><ul><ul><li>Python: Univeral Encoding Detector </li></ul></ul><ul><ul><li>Ruby: chardet gem </li></ul></ul>
  29. 29. 9.1.11 エンコーディングの問題 <ul><li>文字コード変換時の考慮点 </li></ul><ul><ul><li>全てのテキストを UTF-* に変換 </li></ul></ul><ul><ul><li>エンコーディングが未指定もしくは未知の場合 </li></ul></ul><ul><ul><ul><li>自動検出して変換 </li></ul></ul></ul><ul><ul><ul><li>理解不能なものとして拒否 </li></ul></ul></ul><ul><li>クライアントとの通信 </li></ul><ul><ul><li>XML 宣言で encoding を指定 </li></ul></ul><ul><ul><li><?xml version=“1.0” encoding=“utf-8” ?> </li></ul></ul>
  30. 30. 9.1.11 エンコーディングの問題 <ul><li>XML と HTTP で競合する場合 </li></ul><ul><ul><li>XML 文書中に記述されたものより、 HTTP の Content-Type 応答ヘッダで指定されたものが優先 (RFC3023) </li></ul></ul><ul><ul><li>プログラマはこれを知らないまま、 XML 文書を作成してしまうことが多いので注意 </li></ul></ul><ul><ul><li>HTML4 以降の仕様でも同様だが知られていない ? </li></ul></ul><ul><li>メディアタイプと文字エンコーディング </li></ul><ul><ul><li>提供する XML 文書は text/xml ではなく application/xml </li></ul></ul><ul><ul><li>charset なしの text/xml の場合は、文書中の エンコーディング指定を無視し、 US-ASCII とみなすべき </li></ul></ul><ul><ul><li>application/xml で XML 宣言でエンコーディングを指定 </li></ul></ul>
  31. 31. 9.1.11 エンコーディングの問題 <ul><li>JSON 文書の文字エンコーディング </li></ul><ul><ul><li>プレーンテキスト </li></ul></ul><ul><ul><ul><li>構造化されていない </li></ul></ul></ul><ul><ul><ul><li>文字エンコーディングを指定する方法がない </li></ul></ul></ul><ul><ul><li>このため、 JSON は文字エンコーディングを指定不可能 </li></ul></ul><ul><ul><li>RFC4627 では UTF-* であることが規定 されている </li></ul></ul><ul><ul><ul><li>UTF-8, BOM 付き UTF-16 (, US-ASCII) </li></ul></ul></ul><ul><ul><ul><li>最初の 4 バイトで判別可能 </li></ul></ul></ul>
  32. 32. 9.2 パッケージ済みの制御フロー
  33. 33. <ul><li>HTTP 標準応答コード </li></ul><ul><ul><li>サーバから提案された制御フロー </li></ul></ul><ul><li>参考資料 </li></ul><ul><ul><li>HTTP 1.1 Headers Status Diagram <http://thoughtpad.net/alan-dean/http-headers-status.gif> </li></ul></ul><ul><ul><li>この図の方が 9.2.1, 9.2.2 より有用 </li></ul></ul>9.2 パッケージ済みの制御フロー
  34. 34. 9.2.1 一般規則 , 9.2.2 制御フロー <ul><li>9.2.1 一般規則 </li></ul><ul><ul><li>ほぼすべてのサービスに適用可能な標準的な制御フロー </li></ul></ul><ul><ul><li>401 : Unauthorized </li></ul></ul><ul><ul><li>404 : Not Found </li></ul></ul><ul><ul><li>405 : Method Not Found </li></ul></ul><ul><li>9.2.2 DB と連動する制御フロー </li></ul><ul><ul><li>メソッド別の基本的な応答コード </li></ul></ul><ul><ul><li>GET </li></ul></ul><ul><ul><li>PUT </li></ul></ul><ul><ul><li>POST </li></ul></ul><ul><ul><li>DELETE </li></ul></ul>
  35. 35. 9.2.3 Atom Publishing Protocol <ul><li>AtomPub </li></ul><ul><ul><li>HTTP 統一インタフェース上の 高水準統一インタフェース </li></ul></ul><ul><ul><li>Atom 文書をエンドユーザに提供することが目的 </li></ul></ul><ul><ul><li>表 9-1: AtomPub リソースとメソッド </li></ul></ul><ul><li>構成要素 </li></ul><ul><ul><li>コレクション </li></ul></ul><ul><ul><li>メンバ </li></ul></ul><ul><ul><li>サービス文書 </li></ul></ul><ul><ul><li>カテゴリ文書 </li></ul></ul><ul><li>AtomPub メンバとしてのバイナリ文書 </li></ul><ul><ul><li>URI で識別されるリソースとして同様 </li></ul></ul>
  36. 36. 4.2.3 GData <ul><li>GData </li></ul><ul><ul><li>AtomPub の拡張 </li></ul></ul><ul><ul><li>新しい種類のリソースを追加 </li></ul></ul><ul><ul><li>承認メカニズムのような機能を追加 </li></ul></ul><ul><ul><li>Google で働いてないと正確なインタフェースを サポートすることはない ? </li></ul></ul><ul><li>応用 (AtomPub + GData 拡張 ) </li></ul><ul><ul><li>Blogger </li></ul></ul><ul><ul><li>Google Calendar </li></ul></ul><ul><ul><li>Google Code Search </li></ul></ul><ul><ul><li>Google Spreadsheets </li></ul></ul>
  37. 37. 4.2.3 GData <ul><li>コレクションの検索 </li></ul><ul><ul><li>追加 : 検索結果のリスト </li></ul></ul><ul><ul><li>コレクションメンバの一部の表現の GET </li></ul></ul><ul><li>データ拡張 </li></ul><ul><ul><li>Google Calendar の例 </li></ul></ul><ul><ul><ul><li>gd:when </li></ul></ul></ul><ul><ul><ul><li>gd:who </li></ul></ul></ul><ul><ul><ul><li>gd:recurrence </li></ul></ul></ul>
  38. 38. 4.2.5 POST Once Exacly <ul><li>POST の欠点 </li></ul><ul><ul><li>信頼できる HTTP を台無しにすること </li></ul></ul><ul><ul><li>べき等ではないため、 何度も送信すると異なる効果 </li></ul></ul><ul><li>POE </li></ul><ul><ul><li>POST を べき等にする ための手段 </li></ul></ul><ul><ul><li>HTTP ヘッダに細工をする  ( 例 p.297) </li></ul></ul>
  39. 39. 9.3 ハイパーメディアテクノロジ
  40. 40. <ul><li>ハイパーメディアフォーマット </li></ul><ul><ul><li>リンクとフォームを 構造的に サポートするフォーマット </li></ul></ul><ul><li>フォーム </li></ul><ul><ul><li>アプリケーションフォーム </li></ul></ul><ul><ul><ul><li>アプリケーション状態の操作 </li></ul></ul></ul><ul><ul><ul><li>リンクとあわせて本書の「接続性」を実装 </li></ul></ul></ul><ul><ul><ul><li>Fielding のいう「アプリケーション状態の エンジンとしてのハイパーメディア」を実装 </li></ul></ul></ul><ul><ul><li>リソースフォーム </li></ul></ul><ul><ul><ul><li>リソース状態の操作 </li></ul></ul></ul><ul><ul><ul><li>GET, DELETE は表現は不要 </li></ul></ul></ul><ul><ul><ul><li>POST, PUT には必要なので、それの要求の表現を伝える </li></ul></ul></ul>9.3 ハイパーメディアテクノロジ
  41. 41. 9.3.1 URI Template <ul><li>kunit さんにパス (w </li></ul>
  42. 42. 9.3.2 HTML 4 (XHTML) <ul><li>ハイパーリンク </li></ul><ul><ul><li>a, link 要素 </li></ul></ul><ul><ul><li>href 属性 </li></ul></ul><ul><ul><li>rel, rev 属性 : microformats で属性値を拡張 </li></ul></ul><ul><li>フォーム </li></ul><ul><ul><li>form 要素 </li></ul></ul><ul><li>欠点 </li></ul><ul><ul><li>アプリケーションが 表現できる URI には制限 がある </li></ul></ul><ul><ul><li>フォームでは GET, POST しか使えない </li></ul></ul><ul><ul><li>クライアントの要求で 送信すべき HTTP ヘッダを説明不能 </li></ul></ul><ul><ul><li>フォームで キー値ペアしか表現できない </li></ul></ul><ul><ul><li>フォームで 反復フィールドを定義できない </li></ul></ul>
  43. 43. 9.3.3 HTML 5 <ul><li>仕様策定中 </li></ul><ul><ul><li>プログラマブルウェブを使用する上での問題の多くを解決 </li></ul></ul><ul><ul><li>2008 年末頃に勧告予定 ( 執筆時点 ) </li></ul></ul><ul><ul><li><http://www.w3.org/TR/2008/WD-html5-20080610/> </li></ul></ul><ul><li>フォーム </li></ul><ul><ul><li>GET, POST に加え、 PUT, DELETE をサポート ( 例 6-3) </li></ul></ul><ul><ul><li>URI Template 導入 の提案あり </li></ul></ul><ul><ul><li>同じキー名の複数のパラメータを送ることをクライアントに伝える 「反復モデル」をサポート </li></ul></ul><ul><ul><li>フォーム入力値のシリアライズ方法の追加 </li></ul></ul><ul><ul><ul><li>キー値ペアのプレーンテキストとして </li></ul></ul></ul><ul><ul><ul><li>XML 語彙を用いて (application/x-www-form+xml) </li></ul></ul></ul>
  44. 44. 9.3.4 WADL <ul><li>まにあわなーい </li></ul>

×