Добавление префиксов в контекст JSON-LD

Я играл с fuseki и JSON-LD и заметил, что fuseki удаляет префиксы из атрибутов в контексте JSON-LD. Пример контекста JSON-LD после загрузки из fuseki:

{
  "@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#"
  }
}

Можно ли вернуть контекст с префиксом и JSON-LD из фьюзэки?

Необязательно возвращенный JSON-LD может быть отформатирован обратно в форму с префиксом с помощью javascript, написав новый контекст с префиксами, например. gr: hasPriceSpecification. Можно ли как-то создать контекст с префиксом из этого, используя библиотеку javascript JSON-LD?


person amiika    schedule 18.09.2014    source источник


Ответы (1)


Ну... я сделал простую функцию, которая делает последнее:

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;

}

Вы можете использовать его с библиотекой javascript JSON-LD для преобразования JSON-LD в префиксный формат, например:

jsonld.compact(jsonLD, newPrefixedContext(jsonLD["@context"]), function(err, compacted) {
   console.log(JSON.stringify(compacted, null, 2));
});
person amiika    schedule 29.09.2014