機能説明(2/5)

リソースのATOM表現について

TEXT、HTML、XML、JavaScriptなどのコンテンツ格納

  • Tagging Serviceは、HTMLやXML、JavaScriptなどのコンテンツを直接データストアに格納します。
  • テキストコンテンツであれば、ATOM entryのcontentにコンテンツを直接格納することができます。 ただし、<や>などをエンコードする必要があります。また、改行が取り除かれて1行になるので、JavaScriptのコメントなどはご注意ください。
  • entryはzip圧縮されて格納されますが、格納できる最大サイズは1MBまでです。(contentの大きさではないことに注意してください)
  • 登録に際しては、HTMLEncoderやPOSTERを使うと便利です。poster

画像コンテンツなどのBlobDataの格納

  • 画像コンテンツなどのBlobDataはBlobstoreに格納します。
  • Tagging Serviceは、Content-Type: multipart/form-dataでPOSTされてきたものはBlobDataとみなします。
  • 登録されると、link rel="related" タグのhref属性にBlobkeyがセットされます。title属性には、name(myFile,myFile2など)がセットされます。複数のFileを一度に登録することができます。
    • http://tagging-service.appspot.com/d/{selfid}?related={name}で名前を指定してGETすると、その名前のBlobDataを取得できます。
  • 登録の際にはまず、以下のようにuploadurlの取得を行ないます。 データ更新の場合はURLにrevisionも設定します。revisionは,の後に付けます。
    uploadurlの取得
    http://tagging-service.appspot.com/d/{selfid},{revision}?uploadurl
    
  • 次に、取得したuploadurlに対してPOSTを実行します。以下はクライアントのHTML FORMの例です。JSONPにより、form.actionに取得したuploadurlをセットします。 => DEMOを見る
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Hello App Engine</title>
    <script type="text/javascript">
    function getUploadUrl() {
       var script = document.createElement("script");
       script.src = "http://reflex-tagging.appspot.com/d/blob/"+ new Date().getTime() +"?uploadurl&callback=setAction";
       document.getElementsByTagName("head")[0].appendChild(script);
    }
    function setAction(url) {
          document.forms[0].action = url;
    }
    </script>
    </head>
    <body onload="getUploadUrl()">
    <form method="post" enctype="multipart/form-data">
    <input type="file" name="myFile1"><br>
    <input type="file" name="myFile2"><br>
    <input type="submit" value="Submit"><br>
    </form>
    </html>
    
  • POST実行後は、自分自身の画面(サーバから見たらreferer)に遷移します。登録成功または失敗はcookieのuploadに格納されます。
    Set-Cookie: upload="OK : File is registered for the Blobstore. Entry registered. URL : /blob/1289879453168";Path=/;Expires=Tue, 16-Nov-10 03:56:05 GMT
    
  • entryには以下のように登録されます。http://reflex-tagging.appspot.com/d/blob/?xml (→参照) でコンテンツが登録されていることを確認できます。
    <entry>
    <author>
    <uri>urn:virtual-tech.net:created:null</uri>
    </author>
    <id>/blob/1289534399892,1</id>
    <link href="/blob/1289534399892" rel="self"/>
    <link href="AMIfv94aWBWxfdoxcQjn7bvGnaNdnH-tdqvUio-a_iEUS_4gBagciCrUBFySFsbXJj_CAV6usWYfXqli_QJNkwWAvWZdcxGk7g2fuxiD6wKi46_aYNQ561ZVWkYc2kjjDj5Xaagx1d--kVhsK3rq9oLfc--AdyEFDQ" rel="related" type="blob" title="myFile1"/>
    <link href="AMIfv94Q-H8ikRe_LInEf2ta2-7N7mdZxsCXLtcN3xZFohN28xB-UJv-XKT1KwYlx27rlbCRK6EmScsErujj32HkgEBvfI_gErwrUJ8vcwweyjU5LchYj-4CJo0gaR3qAgQuWyMCfSuiRX9r1XLMr_H4r1WTSmwbDA" rel="related" type="blob" title="myFile2"/>
    <updated>2010-11-12T12:59:57+09:00</updated>
    </entry>
    

コンテンツの取得

  • 格納したHTMLやJavaScript、BlobDataなどのコンテンツは直接ブラウザで表示することができます。
  • URLの末尾に、.html、.jsなど、.(ドット)を付けてGETすると、格納されているコンテンツを取得できます。 例えば、/d/cart/auth.html をブラウザで開いてみてください。 (リンクを開く) これは単に、/cart/authというentryですが、.htmlが付与されているため、contentの中身、つまり、HTMLが返ってきています。 このentry自身は、http://tagging-service.appspot.com/d/cart/auth?entry&xml (リンクを開く)で確認できます。
  • contentタグのtype属性を指定すると、GETした際にcontent-typeヘッダが付与されます。また、src属性が指定してあれば、そのsrcにリダイレクトされます。
  • &nocontentパラメータを付けることで、contentを含めない形でentryを取得できます。
    entryをcontentを含めないで取得
    GET http://tagging-service.appspot.com/d/cart/auth?entry&nocontent&xml
    
  • &relatedパラメータを指定することで、link rel="related" のhrefにリダイレクトします。&related=nameのように、nameを指定できます。
  • 先程登録した画像のmyFile1を見てみましょう。
  • 採番サービス
    • GET ?allocids=name,size でnameごとにトランザクショナルにカウントアップし、ユニークな値を返します。
    • nameは自由に指定できます。

リソースの検索について

property検索とalias検索

  • Tagging Serviceでは、リソースに対して複数のproperty(検索項目)を付けて検索することができます。 また、格納したリソースのalias(別名アドレス)を付けることができます。property検索とalias検索

ATOM entryに検索項目を付ける

  • entryにcategoryタグを付与することでproperty検索ができるようになります。term属性にproperty名、labelに値を代入します。 例えば、セーターのentry (リンクを開く)では、price1などの検索項目を付与しています。
    <category term="price1" label="2900"/>
    

propertyで検索する

  • property名=値をパラメータに指定することで、price1で検索できるようになります。
  • ATOM titleはpropertyではありませんが、title=文字列で検索できます。(文字列の最後尾に"*"を付けるることで前方一致となります。)
    price1が2900のものを検索
    http://tagging-service.appspot.com/d/cloudec/Men/Tops/Sweater/0000003400021?price1=2900&xml
    
  • property検索のルール
    http://tagging-service.appspot.com/d/{selfid}?{name}{=|.eq.|.lt.|.le.|.gt.|.ge.|.ne.}{value}&{name}{=|.eq.|.lt.|.le.|.gt.|.ge.|.ne.}{value}&...&s={name}.{asc|desc},{name}.{asc|desc},...&l={n}
    
    • パラメータにプロパティ名=値の形で複数指定可能
    • 等しい条件以外の条件(以上、未満など)を指定する場合、=の代わりに以下を指定する。
      • .eq. : = (等しい)
      • .lt. : < (未満)
      • .le. : <= (以下)
      • .gt. : > (より大きい)
      • .ge. : >= (以上)
      • .ne. : != (等しくない)
    • パラメータにsを指定することで、ソート順を指定できる。複数指定する場合はカンマでつなぐ。
      • s=プロパティ名.ソート順,プロパティ名.ソート順...
    • ソート順には以下のいずれかを設定する。
      • asc : 昇順
      • desc : 降順
      • ソート順を省略した場合、昇順にソートされる。
      • 自身のURLをソート順に指定したい場合、"_selfid"を指定する。
      • 更新日時をソート順に指定したい場合、"_updated"を指定する。
    • 大小比較やソート順を指定する場合は、CUSTOM INDEXが必要となります。
      datastore-indexes-auto.xmlの設定例
      
          <datastore-index kind="Entry" ancestor="false" source="manual">
              <property name="_deleted" direction="asc"/>
              <property name="_parent" direction="asc"/>
              <property name="shop" direction="asc"/>
              <property name="pricerange" direction="asc"/>
              <property name="star" direction="desc"/>
              <property name="price1" direction="asc"/>
          </datastore-index>
      
    • name=valueの形式での条件指定について、値の最後に"*"を指定することで前方一致検索ができます。
      • 前方一致検索を行う場合、他の不等式やソート条件は使用できません。
      • 前方一致検索を行うプロパティについては、CUSTOM INDEXが必要となります。
    • 予約語(以下の名称はtagging service内で使用しているためproperty名には使用できません)
      • callback
      • login
      • logout
      • related
      • title (entryのtitleを定義済)
      • allocids
    • その他の制約
      • プロパティは2文字以上の名称をつけてください。
      • 先頭に_(アンダースコア)をつけた名称は、内部処理で使用しているため、プロパティの名前に使用できません。
      • パラメータのつなぎに.(ドット)を使用しているため、プロパティの名前に使用できません。

aliasで検索する

  • aliasを定義することで、カテゴリ検索やキーワード検索が可能になります。
    o 本体(self)
       <link href="/item/0000003400021" rel="self"/>                                   (定義)
       http://tagging-service.appspot.com/d/item/0000003400021                         (取得)
        
    o 別名(alias)
       <link href="/cloudec-l/Men/0000003400021" rel="alternate"/>
       http://tagging-service.appspot.com/d/cloudec-l/Men/0000003400021        (大カテ)
    
       <link href="/cloudec-m/Men/Tops/0000003400021" rel="alternate"/>
       http://tagging-service.appspot.com/d/cloudec-m/Men/Tops/0000003400021     (中カテ)
    
       <link href="/cloudec/Men/Tops/Sweater/0000003400021" rel="alternate"/>
       http://tagging-service.appspot.com/d/cloudec/Men/Tops/Sweater/0000003400021  (小カテ)
    
  • virtualcart(→クリック)に実例があります。

    前へ << >> 次へ