jsonld.js (英语)
导言
这个图书馆是执行 JSON-LD( 日语) 规格 Java脚本.
JSON,按 RFC7159 (法语),是代表 对象。 链接数据是描述整个内容的一种方式 不同的文档或网站。 使用 IRIs, 通常为可被贬损的实体, 可用于寻找 创建“知识网”. JSON-LD( 日语) 原计划 以简单的方式发布,不仅表达链接数据 JSON,但用于给现有的JSON添加语义.
JSON-LD被设计为可以用来表达的轻量级语法 已链接数据。 它主要是用来表达链接数据的一种方式 在JavaScript和其他基于Web的编程环境中. 这也是 在构建可互操作的网络服务和存储链接时有用 基于JSON的文档存储引擎中的数据. 这很实际,而且 设计尽可能简单,利用大量JSON 解析器和今天使用的现有代码。 它的设计是 能够表达密钥值对,RDF数据, 卢旺达国防军a 数据, 微格式 数据,以及 微数据也就是说,它支持每一个 今天使用的主要基于网络的结构化数据模型.
语法不需要很多应用程序来改变他们的JSON,但是 以带内或带内方式增加上下文,容易增加意义 脱出带. 语法设计为不会干扰已经部署的 在JSON上运行的系统,但提供从JSON平稳的迁移路径 加上语义 最后,格式要快速 用于解析、快速生成、基于流和基于文档的处理 兼容,需要非常小的内存脚印才能操作.
遵约
该图书馆旨在符合下列规定:
- JSON-LD 1.0号卫星, (中文(简体) ), W3C建议, 2014-01-16,以及任意 错误
- JSON-LD 1.0 处理算法和 API, (中文(简体) ), W3C建议, 2014-01-16,以及任意 错误
- JSON-LD 1.0 阵容, (中文(简体) ), 非正式草案, 2012-08-30 (中文(简体) )
- JSON-LD 1.1 导弹, (中文(简体) ), 社区小组报告草稿, 2018-06-07或 (中文(简体) ) 更新
- JSON-LD 1.1 处理算法和API, (中文(简体) ), 社区小组报告草稿, 2018-06-07或 (中文(简体) ) 更新
- JSON-LD 1.1 阵容, (中文(简体) ), 社区小组报告草稿, 2018-06-07或 (中文(简体) ) 更新
- 社区团体 测试套件
这个 JSON-LD工作组 目前正在开发JSON-LD 1.1。 图书馆 随着特性稳定,将进行更新,以符合新的规格 开发时间和资源允许.
- JSON-LD 1.1 导弹, (中文(简体) ), W3C 工作草案, 2018-12-14年或 更新
- JSON-LD 1.1 处理算法和API, (中文(简体) ), W3C 工作草案, 2018-12-14年或 更新
- JSON-LD 1.1 阵容, (中文(简体) ), W3C 工作草案, 2018-12-14年或 更新
- 工作组 测试套件
这个 测试跑道 常被更新以注意或跳过非新测试 但仍得到支持.
安装
节点.js + npm
npm install jsonld
const jsonld = require('jsonld');
浏览器 (bundler) + npm
npm install jsonld
使用您最喜欢的捆绑技术( E)网络软件包, (中文(简体) ), 滚动(等)改为
直接捆绑装入的代码 jsonld。请注意,您需要支持
为ES2017+代码.
浏览器 Bundles
已建npm包包括了适合用于浏览器的捆绑代码. 两个 现提供版本:
./dist/jsonld.min.js: 为与现代兼容而构建的版本 和旧浏览器。 包括许多多填充和代码转换 规模较大,效率较低../dist/jsonld.esm.min.js: 为可用特性构建的版本 支持ES模块的浏览器. 减少多填充和变换 需要使代码更小和更有效率.
这两个捆绑可以同时使用,以允许现代浏览器使用
新的代码。 使用搜索 script 标记为 type="module" 财务报告和审定财务报表 nomodule。 。 。 .
另见 webpack.config.js 如果您想做一个自定义捆绑
具体目标.
浏览器( AMD) + npm
npm install jsonld
使用您最喜欢的技术加载 node_modules/dist/jsonld.min.js。 。 。 .
CDNJS 光盘
用于 光盘 包含此脚本标签 :
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsonld/1.0.0/jsonld.min.js"></script>
检查 https://cdnjs.com/librarys/jsonld (中文(简体) ) 用于提供最新版本.
js 交付CDN
用于 js 交付 包含此脚本标签 :
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jsonld.min.js"></script>
见 https://www.jsdelivr.com/package/npm/jsonld (中文(简体) ) 用于提供最新版本.
破伤风
用于 (单位:公斤) 包含此脚本标签 :
<script src="https://unpkg.com/[email protected]/dist/jsonld.min.js"></script>
见 https://unpkg.com/jsonld/ (中文(简体) ) 用于提供最新版本.
JSPM 联合媒体
jspm install npm:jsonld
import * as jsonld from 'jsonld';
// or
import {promises} from 'jsonld';
// or
import {JsonLdProcessor} from 'jsonld';
节点.js 土生土长的束缚
对于特殊用途案件,可选择 rdf- canonize- 本土化 软件包
提供本地执行 canonize()。它被使用
通过安装软件包和设置 useNative 选项 canonize() 改为
true。在使用该模式之前,它是 高度建议 运行基准
因为 JavaScript 执行往往更快, 绑定器会添加
工具链复杂.
npm install jsonld
npm install rdf-canonize-native
实例
以下各例中所使用的示例数据和背景:
const doc = {
"http://schema.org/name": "Manu Sporny",
"http://schema.org/url": {"@id": "http://manu.sporny.org/"},
"http://schema.org/image": {"@id": "http://manu.sporny.org/images/manu.png"}
};
const context = {
"name": "http://schema.org/name",
"homepage": {"@id": "http://schema.org/url", "@type": "@id"},
"image": {"@id": "http://schema.org/image", "@type": "@id"}
};
紧凑
// compact a document according to a particular context
const compacted = await jsonld.compact(doc, context);
console.log(JSON.stringify(compacted, null, 2));
/* Output:
{
"@context": {...},
"name": "Manu Sporny",
"homepage": "http://manu.sporny.org/",
"image": "http://manu.sporny.org/images/manu.png"
}
*/
// compact using URLs
const compacted = await jsonld.compact(
'http://example.org/doc', 'http://example.org/context', ...);
扩展
// expand a document, removing its context
const expanded = await jsonld.expand(compacted);
/* Output:
{
"http://schema.org/name": [{"@value": "Manu Sporny"}],
"http://schema.org/url": [{"@id": "http://manu.sporny.org/"}],
"http://schema.org/image": [{"@id": "http://manu.sporny.org/images/manu.png"}]
}
*/
// expand using URLs
const expanded = await jsonld.expand('http://example.org/doc', ...);
平调
// flatten a document
const flattened = await jsonld.flatten(doc);
// output has all deep-level trees flattened to the top-level
边框
// frame a document
const framed = await jsonld.frame(doc, frame);
// output transformed into a particular tree structure per the given frame
划线 (规范化)
// canonize (normalize) a document using the RDF Dataset Canonicalization Algorithm
// (URDNA2015):
const canonized = await jsonld.canonize(doc, {
algorithm: 'URDNA2015',
format: 'application/n-quads'
});
// canonized is a string that is a canonical representation of the document
// that can be used for hashing, comparison, etc.
东德(N-四方)
// serialize a document to N-Quads (RDF)
const nquads = await jsonld.toRDF(doc, {format: 'application/n-quads'});
// nquads is a string of N-Quads
来自RDF(N-Quads)
// deserialize N-Quads (RDF) to JSON-LD
const doc = await jsonld.fromRDF(nquads, {format: 'application/n-quads'});
// doc is JSON-LD
自定义 RDF 解析器
// register a custom synchronous RDF parser
jsonld.registerRDFParser(contentType, input => {
// parse input to a jsonld.js RDF dataset object... and return it
return dataset;
});
// register a custom promise-based RDF parser
jsonld.registerRDFParser(contentType, async input => {
// parse input into a jsonld.js RDF dataset object...
return new Promise(...);
});
自定义文档加载器
// how to override the default document loader with a custom one -- for
// example, one that uses pre-loaded contexts:
// define a mapping of context URL => context doc
const CONTEXTS = {
"http://example.com": {
"@context": ...
}, ...
};
// grab the built-in Node.js doc loader
const nodeDocumentLoader = jsonld.documentLoaders.node();
// or grab the XHR one: jsonld.documentLoaders.xhr()
// change the default document loader
const customLoader = async (url, options) => {
if(url in CONTEXTS) {
return {
contextUrl: null, // this is for a context via a link header
document: CONTEXTS[url], // this is the actual document that was loaded
documentUrl: url // this is the actual context URL after redirects
};
}
// call the default documentLoader
return nodeDocumentLoader(url);
};
jsonld.documentLoader = customLoader;
// alternatively, pass the custom loader for just a specific call:
const compacted = await jsonld.compact(
doc, context, {documentLoader: customLoader});
节点.js 文档加载器用户代理
建议设置默认值 user-agent 节点.js 的标题
应用。 默认的节点文件加载器默认为
jsonld.js。 。 。 .
安全模式
常见的用法是避免JSON-LD构造导致损失
行为 JSON-LD规格有关于数据何时被放弃的注释.
这在打电话时特别重要canonize[ 以便
数字签名数据。 特殊“ 安全模式” 可以检测到这些
并导致处理失败.
说明:这种模式的设计是数字签名和 类似的应用程序使用此库.
这个 safe 选项标记设置为 true 启用此行为 :
// expand a document in safe mode
const expanded = await jsonld.expand(data, {safe: true});
测试
这个库包括一个样本测试工具,可用于验证 对处理器的更改保持正确的输出.
主要测试套房包含在外置寄存器中. 检查每个 目标如下:
https://github.com/w3c/json-ld-api
https://github.com/w3c/json-ld-framing
https://github.com/json-ld/json-ld.org
https://github.com/w3c/rdf-canon
它们应该是jsonld.js目录的姊妹目录,或者在一个
test-suites 目录 。 复制浅拷贝到 test-suites 您可以打开目录
使用下列方法:
npm run fetch-test-suites
节点.js测试可以使用简单的命令运行:
npm test
如果您在别处安装了测试套房, 或者希望运行其他测试, 请使用
页:1 TESTS 环境 var:
TESTS="/tmp/org/test-suites /tmp/norm/tests" npm test
这个功能可用于运行更古老的json-ld.org测试套件:
TESTS=/tmp/json-ld.org/test-suite npm test
浏览器测试可以用Karma进行:
npm run test-karma
npm run test-karma -- --browsers Firefox,Chrome
节点测试的代码覆盖可生成于 coverage/数字 :
npm run coverage
从覆盖数据显示控制台的全覆盖报告:
npm run coverage-report
Mocha 输出报告器可以被更改为min, dot,list,nyan等:
REPORTER=dot npm test
还提供远程上下文测试:
# run the context server in the background or another terminal
node tests/remote-context-server.js
TESTS=`pwd`/tests npm test
生成EARL报告:
# generate the EARL report for Node.js
EARL=earl-node.jsonld npm test
# generate the EARL report for the browser
EARL=earl-firefox.jsonld npm run test-karma -- --browser Firefox
编写EAR报告 json-ld-api 财务报告和审定财务报表 json-ld-framing 测试
用于官方 JSON-LD 处理器 页 次
TESTS="`pwd`/../json-ld-api/tests `pwd`/../json-ld-framing/tests" EARL="jsonld-js-earl.jsonld" npm test
地狱 .jsonld 输出可转换为 .ttl 使用 页:1 工具:
rdf serialize jsonld-js-earl.jsonld --output-format turtle -o jsonld-js-earl.ttl
可选择遵循 报告 指令 改为 生成 HTML 报表以供检查。 维护者可以 提交 视需要更新成果.
基准
可从测试系统支持的任何表单中创建基准. 使用带有测试套件和基准旗的命令行 :
TESTS=/tmp/benchmark-manifest.jsonld BENCHMARK=1 npm test
在可选环境中可生成带有基准数据的EARL报告 细节 :
TESTS=`pwd`/../json-ld.org/benchmarks/b001-manifiest.jsonld BENCHMARK=1 EARL=earl-test.jsonld TEST_ENV=1 npm test
见 tests/test.js 为了更多 TEST_ENV 财务报告和审定财务报表 BENCHMARK 控制和选项.
这些报告可以与本报告相比较 benchmarks/compare/ 工具及在
JSON-LD 基准 网站.
相关模块
- jsonld-cli (英语): 一个名为命令行接口的工具
jsonld这暴露了 大多数基础jsonld.js API. - jsonld 请求: 从 stdin、 URL 和文件读取数据的模块 和各种格式,并返回 JSON-LD.
来源
JSON- LD API 的 JavaScript 执行的源代码 可在下列地点获得:
https://github.com/digitalbazaar/jsonld.js (中文(简体) )
商业支助
该图书馆的商务支助可应下列请求提供: 数字集市数字 : 支持@ digitalbazaar.com