我正在使用fuseki和JSON-LD,并注意到fuseki从JSON-LD上下文中的属性中删除了前缀。从fuseki加载后的JSON-LD上下文示例:
{
"@context": {
"hasPriceSpecification": {
"@id": "http://purl.org/goodrelations/v1#hasPriceSpecification",
"@type": "@id"
},
"acceptedPaymentMethods": {
"@id": "http://purl.org/goodrelations/v1#acceptedPaymentMethods",
"@type": "@id"
},
"includes": {
"@id": "http://purl.org/goodrelations/v1#includes",
"@type": "@id"
},
"page": {
"@id": "http://xmlns.com/foaf/0.1/page",
"@type": "@id"
},
"foaf": "http://xmlns.com/foaf/0.1/",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"pto": "http://www.productontology.org/id/",
"gr": "http://purl.org/goodrelations/v1#"
}
}
是否可以从fuseki返回前缀上下文和JSON-LD?
可选择返回的JSON-LD可以通过编写带有前缀的新上下文格式化为带有javascript的前缀形式,例如。 GR:hasPriceSpecification。是否有可能使用JSON-LD javascript库从这个创建前缀上下文?
答案 0 :(得分:0)
嗯..我做了一个简单的功能来完成后者:
function newPrefixedContext(oldContext) {
var namespaces = [];
var newContext = {};
for(var res in oldContext) {
if(typeof oldContext[res] === 'string') {
var char = oldContext[res].charAt(oldContext[res].length-1);
if(char=="#" || char=="/") {
var o = {prefix:res, namespace:oldContext[res]};
namespaces.push(o);
newContext[res] = oldContext[res];
}
}
}
// Loop context and adds prefixed property names to newContext
for(var res in oldContext) {
if(typeof oldContext[res] != undefined) {
for(var n in namespaces) {
if(oldContext[res]["@id"]) {
if(oldContext[res]["@id"].indexOf(namespaces[n].namespace) == 0) {
newContext[namespaces[n].prefix+":"+res] = oldContext[res];
break;
}
} else {
if(namespaces[n].namespace!==oldContext[res] && oldContext[res].indexOf(namespaces[n].namespace) == 0) {
newContext[namespaces[n].prefix+":"+res] = oldContext[res];
break;
}
}
}
}
}
return newContext;
}
您可以将它与JSON-LD javascript库一起使用,将JSON-LD转换为前缀格式,如:
jsonld.compact(jsonLD, newPrefixedContext(jsonLD["@context"]), function(err, compacted) {
console.log(JSON.stringify(compacted, null, 2));
});