为JSON-LD上下文添加前缀

时间:2014-09-18 14:09:30

标签: fuseki json-ld

我正在使用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库从这个创建前缀上下文?

1 个答案:

答案 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));
});