Jupyter notebook 将许可证信息嵌入Jupyter笔记本文件的正确方法是什么?

Jupyter notebook 将许可证信息嵌入Jupyter笔记本文件的正确方法是什么?,jupyter-notebook,Jupyter Notebook,我想在Apache 2.0许可证下发布Jupyter笔记本,因此需要向文件中添加许可证头,如Apache 2.0许可证文件中所述: 附录:如何将Apache许可证应用于您的工作 要将Apache许可证应用于您的工作,请附加以下内容 样板通知,字段用括号“[]”括起 替换为您自己的识别信息。(不包括 括号!)文本应包含在适当的 文件格式的注释语法。我们还建议 文件或类名以及用途说明应包含在 与版权声明相同的“打印页”,以便于 第三方档案中的标识 版权[yyyy][版权所有人姓名] 根据Apache

我想在Apache 2.0许可证下发布Jupyter笔记本,因此需要向文件中添加许可证头,如Apache 2.0许可证文件中所述:

附录:如何将Apache许可证应用于您的工作

要将Apache许可证应用于您的工作,请附加以下内容 样板通知,字段用括号“[]”括起 替换为您自己的识别信息。(不包括 括号!)文本应包含在适当的 文件格式的注释语法。我们还建议 文件或类名以及用途说明应包含在 与版权声明相同的“打印页”,以便于 第三方档案中的标识

版权[yyyy][版权所有人姓名]

根据Apache许可证2.0版(以下简称“许可证”)获得许可
除非遵守许可证,否则不得使用此文件。
您可以通过以下方式获得许可证副本:

除非适用法律要求或书面同意,软件 根据许可证分发的内容是按“原样”分发的,
没有任何形式的保证或条件,无论是明示的还是明示的 暗指的。请参阅特定语言的许可证 许可证下的权限和限制

但是,仅将标题添加为JavaScript注释将使笔记本无效:

//
// Copyright ...
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

{
 "cells": [...],
 "metadata": {...},
 "nbformat": 4,
 "nbformat_minor": 4
}

这两个都不会被JupiterLab加载

我还注意到,有一个顶级键
metadata
,它应该是添加许可证信息的正确位置。但是,未定义用于添加许可证信息的密钥

将许可证信息嵌入Jupyter笔记本文件的正确方法是什么?

一些解决方案:

1.存储库许可证文件 建议只将许可证信息添加到包含的存储库中。这很容易应用,但不符合指导原则。(在这里讨论法律问题是错误的。)

2.许可通知作为内容 可以在笔记本中添加带有许可证信息的降价单元格。这也很容易应用,但不支持搜索引擎等自动处理

3.许可证作为自定义元数据字段 当前版本只定义了
作者
标题
语言信息
内核规范
、以及
元数据
中的
源格式
,但也允许添加键。因此,只需添加一个
许可证
密钥即可。在(被拒绝的)功能请求中,建议声明许可证和其他元数据。经过调整的解决方案:

{
 "cells": [...],
 "metadata": {
  "@context": {
   "CreativeWork": "http://schema.org/CreativeWork",
   "Organization": "http://schema.org/Organization",
   "Person": "http://schema.org/Person",
   "author": "http://schema.org/author",
   "copyrightHolder": "http://schema.org/copyrightHolder",
   "copyrightYear": "http://schema.org/copyrightYear",
   "license": "http://schema.org/license",
   "name": "http://schema.org/name",
   "title": "http://schema.org/name",
   "url": "http://schema.org/url"
  },
  "@type": "CreativeWork",
  "author": [
   {
    "@type": "Person",
    "name": "<full author name>",
    "@id": "<some identifier URI, e.g. an ORCID URI>",
    "url": "<person website URL>"
   }
  ],
  "copyrightHolder": [
   {
    "@type": "Organization",
    "name": "<full organization name>",
    "url": "<organization website URL>"
   },
   {
    "@type": "Person",
    "name": "<full author name>",
    "@id": "<some identifier URI, e.g. an ORCID URI>",
    "url": "<person website URL>"
   }
  ],
  "copyrightYear": <year as yyyy>,
  "kernelspec": {...},
  "language_info": {...},
  "license": "<license URL>",
  "title": "<title of the notebook>"
 "nbformat": 4,
 "nbformat_minor": 4
}
{
“单元格”:[…],
“元数据”:{
“@context”:{
“创造性工作”:http://schema.org/CreativeWork",
“组织”:http://schema.org/Organization",
“人”:http://schema.org/Person",
“作者”:http://schema.org/author",
“版权持有人”:http://schema.org/copyrightHolder",
“版权年”:http://schema.org/copyrightYear",
“许可证”:http://schema.org/license",
“名称”:http://schema.org/name",
“标题”:http://schema.org/name",
“url”:”http://schema.org/url"
},
“@type”:“CreativeWork”,
“作者”:[
{
“@type”:“Person”,
“名称”:“,
“@id”:”,
“url”:”
}
],
“版权持有人”:[
{
“@type”:“组织”,
“名称”:“,
“url”:”
},
{
“@type”:“Person”,
“名称”:“,
“@id”:”,
“url”:”
}
],
“版权年”:,
“内核规范”:{…},
“语言信息”:{…},
“许可证”:“,
“标题”:”
“nbformat”:4,
“NBU小调”:4
}
不幸的是,jupyter笔记本的根节点中不允许有额外的密钥,JupiterLab将删除未知密钥。因此,需要将
@context
@type
CreativeWork
)添加到元数据节点中,因为整个文档(即根节点)并非100%正确是许可的
CreativeWork
。可以用谷歌等进行测试。应用这项技术需要更多的工作,但我认为,它符合指导原则,并支持搜索引擎等自动处理。

一些解决方案:

1.存储库许可文件 建议只将许可证信息添加到包含的存储库中。这很容易应用,但不符合指导原则。(在这里讨论法律方面是错误的。)

2.许可证通知作为内容 可以在笔记本中添加一个带有许可证信息的降价单元格。这也很容易应用,但不支持搜索引擎等自动处理

3.许可证作为自定义元数据字段 当前版本只定义了
作者
标题
语言信息
内核规范
,以及
元数据
中的
原始格式
,但也允许添加其他密钥。因此,只需在a中添加一个
许可证
密钥即可(已拒绝)功能请求时,建议声明许可证和其他元数据。一种改进的解决方案:

{
 "cells": [...],
 "metadata": {
  "@context": {
   "CreativeWork": "http://schema.org/CreativeWork",
   "Organization": "http://schema.org/Organization",
   "Person": "http://schema.org/Person",
   "author": "http://schema.org/author",
   "copyrightHolder": "http://schema.org/copyrightHolder",
   "copyrightYear": "http://schema.org/copyrightYear",
   "license": "http://schema.org/license",
   "name": "http://schema.org/name",
   "title": "http://schema.org/name",
   "url": "http://schema.org/url"
  },
  "@type": "CreativeWork",
  "author": [
   {
    "@type": "Person",
    "name": "<full author name>",
    "@id": "<some identifier URI, e.g. an ORCID URI>",
    "url": "<person website URL>"
   }
  ],
  "copyrightHolder": [
   {
    "@type": "Organization",
    "name": "<full organization name>",
    "url": "<organization website URL>"
   },
   {
    "@type": "Person",
    "name": "<full author name>",
    "@id": "<some identifier URI, e.g. an ORCID URI>",
    "url": "<person website URL>"
   }
  ],
  "copyrightYear": <year as yyyy>,
  "kernelspec": {...},
  "language_info": {...},
  "license": "<license URL>",
  "title": "<title of the notebook>"
 "nbformat": 4,
 "nbformat_minor": 4
}
{
“单元格”:[…],
“元数据”:{
“@context”:{
“创造性工作”:http://schema.org/CreativeWork",
“组织”:http://schema.org/Organization",
“人”:http://schema.org/Person",
“作者”:http://schema.org/author",
“版权持有人”:http://schema.org/copyrightHolder",
“版权年”:http://schema.org/copyrightYear",
“许可证”:http://schema.org/license",
“名称”:http://schema.org/name",
“标题”:http://schema.org/name",
“url”:”http://schema.org/url"
},
“@type”:“CreativeWork”,
“作者”:[
{
“@type”:“Person”,
“名称”:“,
“@id”:”,
“url”:”
}
],
“版权持有人”:[
{
“@type”:“组织”,
“名称”:“,
“url”:”
},
{
“@type”:“Person”,
“名称”:“,
“@id”:”,
“url”:”
}
],
“抄袭