5 个版本
0.2.1 | 2023年9月4日 |
---|---|
0.2.0 | 2023年8月29日 |
0.1.5 | 2023年8月27日 |
0.1.4 | 2023年8月27日 |
0.1.3 | 2023年8月27日 |
#9 在 #插件
每月 25 次下载
31KB
585 行
TortankJS
Node 插件,用于解析和操作 n3/turtle 数据。使用 Tortank。
安装
使用预构建的 Node 插件 (GLIBC)
此方法仅适用于您在 Linux 上且已安装 GLIBC 2.31+(使用 ldd --version
进行检查)。
使用 docker 的示例
docker run--rm-it node:16-bookworm bash
mkdir example&&cd example
npm init--yes
npm i rdf-tortank-linux
node
consttortank= require('rdf-tortank-linux')
使用预构建的 Node 插件 (MUSL)
此方法仅适用于您在 Linux 上且已安装 libc.musl-x86_64(使用 ldd --version
进行检查)。
使用 docker 的示例
docker run--rm-it node:16-bookworm bash
mkdir example&&cd example
npm init--yes
npm i rdf-tortank-linux-musl
node
consttortank= require('rdf-tortank-linux-musl')
使用 Rust
这是针对不同平台的首选解决方案。
- 安装 Rust
- 安装 Node
- 在您的项目中
npm i --save-dev cargo-cp-artifact rdf-tortank
node
consttortank= require('rdf-tortank')
使用 docker 的示例
docker run--rm-it rust bash
apt update&&apt upgrade-y
curl -fsSLhttps://deb.nodesource.com/setup_16.x | bash - && apt-getinstall -ynodejs
mkdir example&&cd example
npm init--yes
npm i--save-dev cargo-cp-artifact rdf-tortank
node
consttortank= require('rdf-tortank')
文档
语句
基于主题、谓词和对象过滤模型。它使用与以下示例相同的参数,除了没有 rhsPath / rhsData。
const data = `
@prefix foaf: <http://foaf.com/>.
[ foaf:name "Alice" ] foaf:knows [
foaf:name "Bob" ;
foaf:lastName "George", "Joshua" ;
foaf:knows [
foaf:name "Eve" ] ;
foaf:mbox <[email protected]>] .
`;
let params = {
lhsData: data, // string|undefined, if not provided use lhsPath
outputType: "n3", // js|n3|undefined, output type
extraPrefixes: { // also optionals, if you need more prefixes to be defined
ext: "http://example.org/show/",
},
wellKnownPrefix: undefined, // undefined | string, for anon nodes (https://www.w3.org/2011/rdf-wg/wiki/Skolemisation)
subject: undefined, // uri|undefined, to filter subjects (must be an absolute uri)
predicate: "<http://foaf.com/name>", // rdf iri|undefined, to filter predicates (muts be an absolute uri)
object: '"Eve"', // rdf string | rdf iri | undefined, to filter objects
};
tortank.statements(params);
您还可以使用前缀,假设模型中已知这些前缀。在上面的示例中,您还可以这样做
let paramsWithPrefix = {
lhsData: data,
outputType: "js",
subject: undefined,
predicate: "foaf:lastName", // use prefix foaf
object: undefined // rdf string | rdf iri | undefined, to filter objects
};
tortank.statements(params);
差异
创建一个新的、独立的模型,包含左侧模型中不在右侧模型中的所有语句。
// diff between model a and model b, store result in a file
const paramsByPath = {
lhsPath: "./example/modelA.ttl", // string|undefined, to load the left model by file, if not provided, use lhsData
rhsPath: "./example/modelB.ttl", // string|undefined, to load the right model by file, if not provided, use rhsData
outputType: "n3", // either n3|json|undefined
outputFilePath: "/tmp/diff.ttl", // string|undefined, if you want to save output directly into a file
bufSize: 10 // number|undefined, optional, if outputFilePath is set, buffering
}
try {
tortank.difference(paramsByPath); // check content in /tmp/diff.ttl
}catch(e) {
console.log("error! ", e);
}
// diff between model a and model b, store result in memory as javascipt object
const lhsData = `
@prefix foaf: <http://foaf.com/>.
[ foaf:name "Alice" ] foaf:knows [
foaf:name "Bob" ;
foaf:lastName "George", "Joshua" ;
foaf:knows [
foaf:name "Eve" ] ;
foaf:mbox <[email protected]>] .
`;
const paramsByDataAndPath = {
lhsData, // string|undefined, to load the left model by file, if not provided, use lhsData
rhsPath: "./example/modelC.ttl", // string|undefined, to load the right model by file, if not provided, use rhsData
}
try {
let data = tortank.difference(paramsByDataAndPath);
console.log(data);
}catch(e) {
console.log("error! ", e);
}
交集
创建一个新的、独立的模型,包含左侧模型和右侧模型中都有的所有语句。
参数与差异相同(请参见上面的示例)。
try {
tortank.intersection(paramsByDataAndPath);
}catch(e) {
console.log("error! ", e);
}
合并
合并两个模型。参数与差异和交集相同(请参见上面的示例)。
try {
tortank.merge(paramsByDataAndPath);
}catch(e) {
console.log("error! ", e);
}
内存中 js 模型的映射函数
可以提供一个映射函数来将模型中的每个三元组转换为其他内容。如果函数返回 null 或 undefined,则三元组将被过滤。
它只适用于 outputType js
和内存模型。
const fun = (triple) => {
if (triple.object.value.includes("Eve")) {
triple.object.value = "Robert";
}
return triple;
};
const data = `
@prefix foaf: <http://foaf.com/>.
[ foaf:name "Alice" ] foaf:knows [
foaf:name "Bob" ;
foaf:lastName "George", "Joshua" ;
foaf:knows [
foaf:name "Eve" ] ;
foaf:mbox <[email protected]>] .
`;
let params = {
lhsData: data,
outputType: "js",
extraPrefixes: { // also optionals, if you need more prefixes to be defined
ext: "http://example.org/show/",
},
wellKnownPrefix: undefined,
subject: undefined,
predicate: "<http://foaf.com/name>",
object: '"Eve"',
mapperFunction: fun
};
tortank.statements(params); // for example, but could be merge, difference,..
依赖项
~3.5–4.5MB
~89K SLoC