網頁系統整合
把 Creative Commons 授權條款整合到你的網頁應用程式中
雖然 Creative Commons 在授權頁面裏,直接提供了許多不同的授權選擇和公領域選項,不過如果你創造了一套網頁服務或程式,讓使用者可以把自己的作品上傳的話,或許你也會想把這套授權引擎整合進你的網站或程式裏。這份指南的目的就是要解釋所有必要的步驟與可用的選項,幫助你把 Creative Commons 整合到你的軟體理。
這份指南大致上分成三個部分:
- 第一部份:讓使用者選擇一種授權方式
- 第二部分:處理並存放授權資訊
- 第三部分:顯示授權資訊
第一部份:讓使用者選擇一種授權方式
不管你的系統是一整個網站或者是可以被下載執行的應用程式,整合 Creative Commons 授權條款的第一步就是要讓使用者可以直接從你的系統裏選擇授權條款。這個過程可以是從彈出式視窗或從網頁的嵌入部分中載入簡化過的 Creative Commons 授權介面,也可以是從你的應用程式裏執行 HTML 視窗控制元件。 URL 變數會被讀進此頁面,並且在完成時被自動地附加上去,讓資料能被擷取出來並通過此流程。
遠端授權引擎應用程式
整個流程的核心乃是執行位於此網址的遠端授權介面:
完整的 URL 變數茲說明如下:
- partner (必要):
- 你的應用程式或網站的名稱,用於追蹤 Creative Commons 的使用狀態。任何描述性的名稱都可以加於此處。
- exit_url (必要):
- 當使用者選擇授權條款後,所要傳回給你的應用程式載入的 URL ;妳的軟體需要讀取的變數會被附加在這個 URL 之後。
額外的必要條件: 你的 exit_url 一定要包括 "license_url=[license_url]" 然後可以選擇性地包含 license_name=[license_name], license_button=[license_button], 和 deed_url=[deed_url] 變數。以下為個別的解說:
license_url: 所選擇的授權方式的 URL. 在被授權作品的頁面中連向此 URL. 例如: http://creativecommons.org/licenses/by/2.0/
license_name: 所選擇的授權方式的適恰名稱。例如: Attribution
license_button: 所選擇的授權方式的對應圖片 URL ,這對於在被授權作品的頁面中顯示時會很有用。例如: http://creativecommons.org/images/public/somerights20.gif
deed_url: 所選擇的授權方式的對應契約 URL 。通常這跟 license_url 的值會一模一樣,除非選了一個「被特別命名」的授權方式。請注意即使 deed_url 和 license_url 不同,使用 license_url 所指定的 URL 仍然還是有效的,因為這兩者都會指向相同的法律條文。如果妳想要支援這個功能的話,就在被授權作品的網頁中連結到 deed_url. 例如: http://creativecommons.org/licenses/by-nc-nd/2.0/deed-music
傳回的 URL 範例會像這樣:
當某個使用者選擇了授權條款時,授權引擎會用適合的值來代換掉 license_url, license_name, license_button, 和 deed_url 變數 (這部份的更多細節請見第二部分).
請注意妳的傳回 URL 可以帶著你自己應用程式的 URL 變數進出授權應用程式,祇要先以 URL 逸出處理這個傳回 URL 即可,例如:
上述的範例會讓你的應用程式知道 userID 為 42 的使用者送出了一份名稱為 foo.jpg 的 user-work ,並且在離開授權引擎時已經選擇了特定的授權方式。
如果你想要保有狀態卻又不想把資料送經 URL (像是為了隱私或資料大小的考量), 不妨考慮把資料存放於使用者 cookie (這樣資料就祇會被送往你的站台,而不會被送往 creativecommons.org); 不然就把資料儲存在檔案或資料庫中,然後把索引鍵存放於 cookie 裏,或把索引鍵用這個 URL 送出;再不然就是用彈出式視窗或 iframe 的方法 (見後) ,這樣使用者就不需要「離開」你的表單了。
下列的選項可以選擇按照特定著作權法規或司法轄區版本的授權條款。更多資訊請見 iCommons 計畫。
jurisdiction_choose 的話,就可以預先設定司法轄區。目前已支援的司法轄區有: at, br, ca, de, es, fi, fr, jp, nl, tw.從你的應用程式裏叫用遠端授權引擎
一旦你明白要送進及送出遠端授權引擎的恰當變數後,你還需要在你的網站或應用程式裏加以喚用。
有一些基本的手段可以完成這個任務:
- 從你的網站彈出視窗
- 從你的網站重新導向到授權引擎
- 在你的網站裏嵌入 IFRAME
- 在你的桌面應用程式中透過 HTML 控制元件來啟動
從你的網站彈出視窗
要喚用遠端授權引擎,最熱門的方法是透過彈出式視窗來完成。某個使用者點擊了網頁上的某個東西後,就會彈出一個小視窗,裏面是一些問題。使用者回答了這些問題後,這些選擇會被處理,接著視窗會自動關閉,然後原來的頁面會被更新以反映他們的選擇。使用這個方法的網站通常會在使用者完成選擇過程時動態變更某個隱藏的表單變數 (透過 Javascript) 。
從你的網站重新導向到授權引擎
這個選擇完全不會用到任何一種彈出式視窗,取而代之的是讓使用者離開原本所在的網站,挑選授權條款,然後再帶著選擇資訊回到原來的網站。使用這個方法的網站必須要剖析回傳 URL 中的變數。
在你的網站裏嵌入 IFRAME
對於那些不想要使用彈出式視窗的人來說,如果使用者有 5.0 版以上的 IE 瀏覽器,而且想要讓選擇授權的流程在應用程式裏完成的話,就可以跟使用彈出式視窗很像的方式來使用 IFRAME 。使用這個方式的站台會把問題表單嵌入於站台裏,並且在選擇授權的流程完成時,把變數傳回 IFRAME 周遭的頁面。
在你的桌面應用程式中透過 HTML 控制元件來啟動
對於桌面應用程式來說,這個方法實際上就是仿造彈出式視窗的程式碼,祇不過用的是程式內的原生 HTML 控制元件來達成。在 Windows 上, visual basic 和 visual C++ 應用程式可以存取 Internet Explorer HTML 控制元件,並且從你的應用程式裏執行他們。對於 Mac 程式設計師來說, OS X 提供了網頁核心 (webcore) 控制元件,讓你能夠從應用程式裏使用 Safari 作為原生的瀏覽器環境。
第二部分:處理並存放授權資訊
一旦你的網站和應用程式的使用者得以選擇授權方式之後,下一步就是要處理他們選擇的結果。正如我們在前一個部分所提到的一樣, exit_url 是使用者回到你的伺服器時要連往的網址。一旦載入時, URL 內的資料就會需要被剖析。一份 exit_url 的結果看起來會如下:
根據你的網頁應用程式伺服器的科技,你將從 URL 裏剖析需要的資料。從上述的網址中,可以找到下列的資料要點:
- license_url:
- http://creativecommons.org/licenses/by-nc/2.0/
- license_name:
- Attribution-NonCommercial
- license_button:
- http://creativecommons.org/images/public/somerights20.gif
- deed_url:
- http://creativecommons.org/licenses/by-nc/2.0/
如果妳在你的應用程式中有指定任何額外嵌入的 URL 變數的話,你也會需要將他們剖析出來。實際用來讀取 URL 變數的方法和程式碼會視你的網站/應用程式所使用的程式語言及語法而有所不同。
這些資料可以在同一個應用程式內部被多次使用。被妥善撰寫的程式將能夠使用 license_name 變數來顯示使用者的選擇,作為一種確認效果,像是「你為上傳的作品選擇了 Attribution-Noncommercial 授權條款」。你可能會想把 license_url 和 license_code 變數儲存在你的應用程式裏,像是跟貢獻者有關的資料庫欄位。同樣地,實際用來存放授權資訊的方法和程式碼,會根據你的組態、設定和儲存方式而有所不同。
第三部分:顯示授權資訊
最後一個步驟是要把 Creative Commons 授權合併到你的網站或應用程式裏,向其他使用者顯示並表達這些授權資訊。對於典型的網站來說,我們需要輸出一些 HTML 和一些在 HTML 裏的 RDF (資源描述架構, Resource Description Framework) 。你可以使用位於 creativecommons.org 的服務來為你產生 帶有 RDF 的 HTML ,或者你可能會想自己建立這些帶有 RDF 的 HTML 。
為被授權的著作請求 HTML 輸出
用上述有關選擇授權及被授權著作的資訊來喚用 http://creativecomons.org/license/get-html? 即可。他會傳回一整塊能讓你包進網頁的 HTML 。下列的資料可被傳進:
license_url: 例如: http://creativecommons.org/license/by/2.0/
title: 例如: A Happy Book
creator: 例如: John Smith
copyright_holder: 例如: J. Smith Publishing
copyright_year: 例如: 2004
description: 例如: A short book this is happy, but won't necessarily make you so.
format: 可以是 text, audio, video, image, 或 interactive 其中之一。
work_url: 如果沒有設定的話, RDF 就會參照它所要被包含的頁面。通常這就是人們想要的,所以 work_url 不 應該被指定。
source_work_url: 著作來源的 URL ,如果有的話。例如: http://example.com/jsmith/a_sad_book.html
以下是使用上列各項資訊的完整 get-html 請求:
如果你祇想要 RDF 詮釋資料的部分的話,請用相同的資料喚用 get-rdf ,而不要用 get-html 即可。
徒手為被授權著作建立 HTML 輸出
要在著作物上顯示 Creative Commons 授權條款,最清楚的辦法就是在作品之後顯示一個「保留部分權利」或「放棄所有權利」的按鈕。典型的 HTML 如下:
<!-- Creative Commons License -->
<a href="{license_url}">
<img alt="Creative Commons 授權條款" border="0"
src="{license_button}" /></a>
<br />
本著作物係以
<a href="{license_url}"
>Creative Commons 授權條款</a>授權。
<!-- /Creative Commons License -->
如果你有把 license_url 變數存放到應用程式自己的資料庫中的話,也可以查詢其值並填入上述的 {license URL} 區域。這段源碼會輸出一個按鈕和一段訊息,就像本頁面底端;不過就如同我們的組成 HTML 指南所描述的一般,我們非常鼓勵你把「本著作物係以……授權」的段落修改得更為特定的內容。
緊接著 HTML 所要輸出的東西就是 RDF 詮釋資料,嵌入於 HTML 註解中。以下這段赤裸裸的東西就是需被輸出的 RDF 的最小構成,應該要緊跟著按鈕之後的 HTML :
<!--
<rdf:RDF xmlns="http://web.resource.org/cc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Work rdf:about="">
<license rdf:resource="{license_url}" />
</Work>
</rdf:RDF>
-->
我們鼓勵網頁應用程式寫作者依據任何可用的詮釋資料,包括授權資訊本身,加入其他附加的自訂 RDF 部分。將來搜尋引擎或其他能夠爬遍網路尋找這些 RDF 輸出、把找到的資訊加以分類的應用程式,就會用到這些資訊。完整的一系列 RDF 可能會是底下這樣。
- dc:title
- 資源的標題或名稱。
- dc:description
- 資源的一段文字描述。
- dc:subject
- 描述著資源主題的關鍵字詞。
- dc:publisher
- 負責讓資源可用的 cc:Agent 。
- dc:creator
- 創造資源的 cc:Agent 。
- dc:contributor
- 對資源有所貢獻的 cc:Agent 。
- dc:rights
- 持有資源著作權的 cc:Agent 。
- dc:date
- 資源的著作權日期。
- dc:format
- 資源的媒體型別。
- 例如: "text/plain," "audio/mpeg".
- dc:type
- 資源的 DCMI 型別 (schema) 。
- 例如: <http://purl.org/dc/dcmitype/Image>, <http://purl.org/dc/dcmitype/Sound>.
- dc:source, cc:derivativeWork
- 資源的來源著作物。
- cc:license
- 資源的著作權授權條款,以結構化的 cc:License 來表達。如果同時有兩組 cc:license 的話,授權條款就會被擇一接受並使用。
Agent (做出東西的人或物) 和 License ,當然,也可以用同樣的結構來提供其名稱、日期等。
License 係按照其特徵來加以描述,這些特徵會分成三種型別:
Permissions (由授權條款所提供的權利)
- Reproduction
- 著作物得以被重製
- Distribution
- 著作物(以及衍生著作物,如果獲得授權的話)得以被散佈、公開展示、以及公開表演
- DerivativeWorks
- 衍生著作物得以被創造並重製
Prohibitions (由授權條款所禁止的事情)
- CommercialUse
- 得以基於商業目的而被行使的權利
Requirements (由授權條款所強迫的限制)
- Notice
- 著作權及授權條款的註記必須被保持完整
- Attribution
- 著作名譽必須給予著作權持有者或作者
- ShareAlike
- 衍生著作,如果獲得授權的話,必須按照原始著作的授權方式來授權
注意:這些特徵僅作為諮詢用途。他們係被設計來描述某份授權條款的特徵;這些特徵本身並非授權條款。為了要徹底實做每一種特徵,以及無法被編碼進 RDF 的細節,你一定得要查閱授權條款的實際條文內容纔行。授權條款一定要能從這些詮釋資料條件裏被連結到。
這個範例展示了完整的檔案看起來的樣子:
<rdf:RDF xmlns="http://web.resource.org/cc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<Work rdf:about="http://example.org/gnomophone.mp3">
<dc:title>Compilers in the Key of C</dc:title>
<dc:description>A lovely classical work on compiling code.</dc:description>
<dc:creator><Agent>
<dc:title>Yo-Yo Dyne</dc:title>
</Agent></dc:creator>
<dc:rights><Agent>
<dc:title>Gnomophone</dc:title>
</Agent></dc:rights>
<dc:date>1842</dc:date>
<dc:format>audio/mpeg</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/Sound" />
<dc:source rdf:resource="http://example.net/gnomovision.mov" />
<license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/2.0/" />
<license rdf:resource="http://www.eff.org/IP/Open_licenses/eff_oal.html" />
</Work>
<License rdf:about="http://creativecommons.org/licenses/by-nc-nd/2.0/">
<permits rdf:resource="http://web.resource.org/cc/Reproduction" />
<permits rdf:resource="http://web.resource.org/cc/Distribution" />
<requires rdf:resource="http://web.resource.org/cc/Notice" />
<requires rdf:resource="http://web.resource.org/cc/Attribution" />
<prohibits rdf:resource="http://web.resource.org/cc/CommercialUse" />
</License>
</rdf:RDF>
為了便於參考,這份檔案展示了基本的 HTML 及 RDF 輸出,而且囊括了六種授權條款及公領域的選項。
儲存及資料的考量
如果你的網頁應用程式讓使用者能夠為他們的呈上的著作選擇授權條款的話,你很可能也會想要在資料庫裏追蹤這些授權條款的選擇。根據你的應用程式的不同,你的資料模型至少會需要能把授權 URL 變數跟呈上的著作的記錄存放在一起。如果你想要讓應用程式頁面上的授權輸出能夠完全自動地動態生成的話,也可能會想要把授權條款名稱、授權條文和授權按鈕圖片一併存放起來。
結論
讓使用者選擇一份授權條款,處理授權資料,並且輸出跟被授權著作有關的資訊這三個部分,乃是將 Creative Commons 授權整合進你的應用程式所不可或缺的。
