知识共享中国大陆

网页集成开发者指南

将知识共享许可协议集成到你的web程序中虽然知识共享组织在其选择许可协议网页上提供了选择 许可协议或者公共领域的选项,但是如果你开发了一个允许人们发布其作品的应用程序或者网站,你可能更希望直接将许可协议引擎集成到你的网站或者程序当中。 本指南将向你介绍集成知识共享协议的所有必须的步骤以及可选的选项。

本指南分为三部分:

  • 第1部分:让用户选择许可协议
  • 第2部分:处理和保存许可信息
  • 第3部分:显示许可信息

第1部分:让用户选择许可协议

无论你的软件是一个网站还是可以下载的应用程序,集成知识共享许可协议的第一步都是让用户直接在你的软件中选择一个许可协议。这个过程需要装载一个 简单的知识共享许可协议选择界面,这个界面可以是在一个嵌入到网站的弹出窗口,也可以是应用程序的一个HTML窗口控件。 URL变量被读入界面中,进程可以解析并传递URL变量中的数据。

远程许可引擎程序

这一进程的核心是运行远程许可引擎界面,这一引擎可以通过以下URL访问:

http://creativecommons.org/license/?partner= {partner}&
exit_url={exit_url}&stylesheet=
{stylesheet}&partner_icon_url={partner_icon_url}

partner (必须):
你的程序或者网站的名字。知识共享用该变量追踪许可协议的使用情况。可以使用任何描
述性的名字。
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.5/cn/
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指定的URL。
例如:http: //creativecommons.org/licenses/by-nc-nd/2.0/deed-music
下面是一个返回的URL的例子:
http://example.com/return_from_cc?license_url=[license_url]%26license_name=[license_name]
在用户选择了一个许可协议后,许可引擎将用对应的值替换其中的 license_url, license_name, license_button和 deed_url变量(详见第2部分)。
注意,你的返回的URL中可以包含自己程序的URL变量,许可引擎不会改变这些变量。
例如:http://example.com/return_from_cc?license_url=[license_url]%26license_name
=[license_name]%26userID=42%26user-work=foo.jpg
上面的例子可以在许可引擎退出之后让你的程序知道,一个userID为42的用户为他的名为
foo.jpg的作品选择了一个特定的许可协议。如果 你想维护许可协议但是不想通过URL传递
数据(比如出于隐私保护或者数据大小的考虑),可以考虑将这些数据保存在一个用户
cookie中(其中的数据只能 被发送到你的网站,而不能发送到creativecommons.org),
或者将数据保存在一个文件或者数据库中,而在cookie中或者通过URL传 递这些数据的搜
索键,或者使用用户不必“离开”你的程序的popup或iframe方法(如下)。
stylesheet (可选):
个性化许可问题的布局、外观等的CSS样式单的URL。可以个性化的类及其ID,请
查看许可引擎页面(http://creativecommons.org/license/)的源代码。
partner_icon_url (可选):
如果你希望在许可引擎的顶端显示个性化图片,请将其URL放在这个变量中。
以下变量允许选择与特定司法管辖区域著作权法相适应的许可协议。更多信息请参考iCommons项目
jurisdiction (可选):
选择特定司法管辖区域的许可协议。在jurisdiction_choose开关打开时,设置默认选
择的司法管辖区 域。目前支持的司法管辖区域包括: at(奥地利), au(澳大利
亚), be(比利时),br(巴西), ca(加拿大), cn(中国大陆), de(德
国), es(西班牙), fi(芬兰), fr(法国),hr(克罗地亚), it(意大
利), jp(日本), kr(韩国), nl(荷兰), tw(台湾)。
jurisdiction_choose (可选):
如果设置为 ‘1′, 用户将可以从列表中选择司法管辖区域。

在你的程序中调用远程许可引擎

一旦你理解了远程许可引擎需要以及返回的变量,你就可以从你的网站或者程序中调用它了。

有几个基本的方法来完成这一任务:

  • 从你的网站中弹出窗口
  • 从你的网站重定位到许可引擎页面
  • 使用你的网站中嵌入的IFRAME
  • 在桌面应用程序中的HTML控件中调用

从你的网站中弹出窗口

调用远程许可引擎的最常用的方法就是通过弹出窗口。用户在页面中点击某一元素,弹出一个包含一些问题的许可协议选择窗口。在回答了这些问题之后,用户点继续,窗口关闭,原始页面被更新,以反映用户的选择。使用这一方法的网站通常在用户选择许可协议后使用javascript动态改变一个隐藏的 form变量。

从你的网站重定位到许可引擎页面

这个方法不使用任何形式的弹出窗口,而是离开原始的页面,选择许可协议,然后带着所选许可协议的数据返回原始页面。使用这种方法的网站需要解析返回的URL中的URL变量。

使用你的网站中嵌入的IFRAME

对于那些不想使用弹出窗口,又希望在其程序中选择许可协议的网站,如果其用户使用IE5.0及以上版本浏览器,可以使用IFRAME。其用法与弹出窗口类似。使用这种方法的网站将选择协议的界面嵌入到自己的页面中,在结束选择时,在IFRAME和其外层页面中传递变量。

在桌面应用程序中的HTML控件中调用

对于桌面应用程序,这个方法其实与弹出窗口的方法本质上是一样的,只是使用了程序中的本地HTML控件。在Windows系统中,visual basic 和 visual C++ 程序可以在程序中访问IE HTML控件;对Mac程序员来说,OS X提供了webcore控件,可以在程序中使用Safari作为本地浏览器环境。

第2部分:处理和保存许可信息

一旦用户可以选择许可协议,下一步就是如何处理他们选择的结果。前面已经提到,exit_url 变量是用户将返回的你的服务器上的地址。在加载后就要解析URL中的数据。
一个返回的URL可能如下:

http://example.com/return.cgi?license_url=
http://creativecommons.org/licenses/by-nc/2.0/&
license_name=Attribution-NonCommercial&license_button=
http://creativecommons.org/images/public/somerights20.gif&
amp;deed_url=http://creativecommons.org/licenses/by-nc/2.0/
你需要从返回的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变量)用以确认,比如“你为你上传的 作品选择了‘署名-非商业性使用’许可协议”。你可能需要在程序中保存license_url 和 license_name变量,比如保存在一个数据库中。

第3部分:显示许可信息

在网站或者程序中集成知识共享许可协议的最后一步就是显示并向其他用户表明许可信息。对一个典型的网站来说,我们需要在其HTML中加入一些 HTML和RDF(Resource Description Framework)代码。 你可以使用 creativecommons.org 的web服务来生成包含RDF信息的HTML代码,或者你可以自己写这些代码。

为许可作品生成HTML代码

使用许可作品及其选择的许可协议的信息调用http://creativecomons.org/license/get-html?。 web服务将返回一些HTML 代码,这些代码可以在网页中使用。 可以传入的数据包括:

license_url: 选择的许可协议的URL。例如: http://creativecommons.org/licenses/by/2.5/cn/title: 作品的名称。例如: 快乐的一天

creator: 创作者。例如:王小二

copyright_holder: 著作权所有人。通常与创作者相同。

copyright_year: 著作权的年份。例如: 2006

description: 作品的简要描述。例如:这本小书描述了作者快乐的一天。

format: 作品的格式,可以是text、 audio、 video、 image 或者 interactive之一。

work_url: 作品的URL。如果没有设置,RDF将指向包含它的页面。通常这是你所希望的情况,因此wor_url变量不应指定。

source_work_url: 如果你的作品是演绎作品,那么这是原作品的URL地址。例如:http://example.com/jsmith/a_sad_book.html

以下是一个使用以上变量的完整的 get-html 请求的例子:

http://creativecommons.org/license/get-html?license_url=
http://creativecommons.org/licenses/by/2.5/cn/&
title=快乐的一天&creator=王小二&
copyright_holder=王小二&copyright_year= 2006&
description=这本小书描述了作者快乐的一天。&
format=text&source_work_url =http://example.com/jsmith/a_sad_book.html

试一下

如果你只需要RDF元数据,使用同样的数据调用 get-rdf 。

试一下

人工为许可作品创建HTML代码

显示一个作品所采用的知识共享许可协议的最常用的方法就是在作品旁边显示“保留部分权利”或者“不保留任何权利”的图标。其HTML代码如下:

<!-- Creative Commons License --><a href="{license_url}“>
<img alt=”Creative Commons License” border=”0″

src=”{license_button}” /></a>

<br />

本作品采用<a href=”{license_url}授权。”>Creative Commons License</a>.

<!– /Creative Commons License –>

如果你在程序的数据库中保存了license_url 变量,就可以查询并填入上面的 {license URL} 中. 这段代码将显示一个图标和一段说明,就像本页面的页脚一样。但是正如我们在如何在网页上添加许可协议中所说的, 我们建议将“本作品采用……授权”的说明替换成更有针对性的字句。

另外需要输出的是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>

–>

我们鼓励web程序的开发者添加更多客户化的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
资源的媒体类型(Media Type)
例如:”text/plain,” “audio/mpeg”.
dc:type
资源的DCMI 类型(DCMI Type) (计划) 。
例如: <http://purl.org/dc/dcmitype/Image>, <http://purl.org/dc/dcmitype/Sound>.
dc:source, cc:derivativeWork
据以演绎创作资源的 源作品
cc:license
资源的著作权许可协议,cc:License是结构化的。 如果有两个或者更多cc:license,被许可人可以选择其中之一。

当然,Agent (提供素材的人或者物)和License 可以使用相同的结构来提供他们的名字,日期等内容。许可协议是通过它们的特征来描述的,包括下面三种类型:

Permissions (允许:许可协议所授予的权利)

Reproduction
作品可以复制
Distribution
作品(及其演绎作品,如果被授权的话)可以发行、公开展览、公开表演、放映、广播或通过信息网络传播
DerivativeWorks
可以基于作品创作和复制演绎作品

Prohibitions (禁止:许可协议禁止的事项)

CommercialUse
为商业目的使用作品

Requirements (要求:许可协议规定的限制)

Notice
著作权和许可信息必须保持完整
Attribution
必须给出著作权所有者和/或作者的名字
ShareAlike
如果经授权创作演绎作品,则演绎作品必须与原作品采用同样的条款授权

注意: 以上特征仅仅是建议的。它们被设计用于描述许可协议的特点,本身并不是许可协议。 对于许可协议的其他特点,以及没有包含在RDF中的其他细节,你必须参考真正的许可协议文本。这些元数据必须链接到许可协议文本。

以下是一个完整的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代码,供参考。

存储和数据

如果你的web程序允许用户为他们的作品选择许可协议,你可能需要在数据库中保存他们选择的许可协议的信息。取决于你的程序,你至少需要保存 license_url变量。你可能也需要保存license_name,license_button等信息,以在程序页面中全部显示协议的有关信息。

结论

将知识共享许可协议集成到你的程序中,需要让用户选择许可协议,处理许可协议数据,显示许可协议信息三个步骤。