Re: schema.org 與 Microdata DOM API 的一些討論

On Tue, 07 Jun 2011 06:08:06 +0200, Kang-Hao (Kenny) Lu <kennyluck@w3.org>  
wrote:

> 最近的一個大新聞是 Google、Microsoft Bing 跟 Yahoo! 推出了 schema.org 的
> 語意搜尋用的 Microdata 字彙庫[1]。撇開到底 Facebook Open Graph Protocol
> 跟 schema.org 的 Microdata 到底能不能一起用這個大家雖然都關心但是 FAQ[2]
> 還無解的問題,這個新聞讓我認真的去看了一下 Microdata 提供的 DOM API,想
> 跟大家討論一下跟 Microdata 標準[3]裡面的一些問題。
>
> [1] http://schema.org/

> [2] http://schema.org/docs/faq.html

> [3] http://dev.w3.org/html5/md/#dom-itemid

>
> 1. 規範寫到,要用 itemtype 就一定要先有 itemscope 屬性,而要用 itemid 就
> 一定要先有 itemtype 屬性,問題是 itemscope 除了標示說這是一個 "item" 以
> 外,似乎沒有其他功能,加上文檔如果要合乎 XHTML5 的語法的話,勢必要寫冗長
> 的 itemscope="itemscope" 。

喜歡 XML 的人寫 itemscope="" 即可。

> 我個人是覺得在有 itemtype 的時候 itemscope 可以省略,不過根據 HTML5 編輯
> Ian Hickson 跟 Google 做的可用性測試,不省使用者比較不會出錯。我強烈懷疑
> 這個結果、、

你說的應該是 http://blog.whatwg.org/usability-testing-html5


原來 itemscope 和 itemtype  
是一個屬性:item。分成兩個屬性的好處是不會讓人糊塗 item  
的屬性值什麼時候可以省略。不過,這是語法而已。

> 2. document.getItems(type) - 回傳有某 itemtype 的 item(也就是 HTML  
> 元素)
>
>    a. 規範寫到它只回傳「頂層」的 item,也就是沒有 itemprop 屬性的 item。
> 我可以理解這項決定的好處跟壞處,壞處是這似乎是這有一點讓人意外,好處是如
> 果要全部的 item 而不是只有頂層的,似乎用
> document.querySelectorAll("[itemtype=TYPE"]) 就好了,就不需要多一個 API  
> 了。

新的API是為了方便而已,用 querySelector  
也可以。https://gitorious.org/microdatajs/microdatajs 就是用 JavaScript  
來模擬這些API。

>   b. 除了 document.getItems 以外,該不該有 element.getItems,不過有這個
> 的話,須不需要更改「頂層」的定義。

element.properties 已經包括一個 item 的“分item”,可能這是你需要的?

> 3. 該不該有 document.getItemById?還是用
> document.querySelector("[itemid=ID") 就好?

我認為用 querySelector 比較合適,因為 itemid 應該是獨特的。

> 我覺得這些 API 的好處是似乎可以在不更改AJAX JS 碼的情形下更改頁面的 HTML
> 設計,比如說我每次要更改微博狀態:
>
> var statusObj = ... // 先得到一個 JSON 物件 (現在流行用 JSON 嗎?還是直
> 接 AJAX 傳 HTML 比較多?)
> var newItem = document.getItems("status")[0].cloneNode(true);
> newItem.properties["statusText"].itemValue = statusObj.text;
> ...
>
> 現在會有 AJAX 網站使用這種模式嗎?可能用 document.getElementsByClassName
> (或是$(.xxx) )代替 getItems之類的?

除了 microdata, HTML5 還有data-屬性,所以這種模式應該會越來越普遍……

> 我的問題是,Microdata 的規範定義了把 Microdata 轉 JSON 的方法,我們需要
> 把 JSON 轉回成 HTML 的 API 嗎?如果要,怎麼樣的設計比較好?

我覺得應該使用某種模板語言,比如 http://code.google.com/p/json-template/


-- 
Philip Jägenstedt
Core Developer
Opera Software

Received on Friday, 10 June 2011 09:02:34 UTC