0

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

4

1 回答 1

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));
});
于 2014-09-29T08:50:41.603 回答