【发布时间】:2020-03-31 10:41:10
【问题描述】:
我有一个使用 Jena 解析的 jsonld 文件。该文件具有@type @id "rdfs:label" 和 "rdfs:comment" 以及范围和域。我有这样的代码
模型 m = ModelFactory.createDefaultModel();
Reader fileReader = new FileReader(fileName);
Model model = m.read(fileReader, null, "JSON-LD");
StmtIterator it = model.listStatements();
Set<String> set = new HashSet<>();
System.out.println("Labels");
while (it.hasNext()) {
Statement statement = it.next();
.... 它似乎拾取了所有内容,但没有看到带有 rdfs:container 的 @type 语句。如何使用此解析器获取这些语句?
json-ld 的一个片段是 { "@id": "aaa:bbb", “@类型”: [ “rdfs:容器” ], “rdfs:标签”:{ "@language": "en", “@值”:“cccc” }, “rdfs:评论”:{ "@language": "en", “@值”:“dddd。” }, “rdfs:成员”:[ { "@id": "aaaa:eeee" }, { "@id": "aaaa:fffff" } ],
当类型是 rdfs:class - 我得到一个带有谓词“type”的语句,对象是 RDFClass,但是当类型是 rdfs:container - 如上例所示,我没有得到一个语句.我期待一个带有谓词“type”的语句和一个带有 bbb localName 的主题和一个指定容器类的对象。我没有看到这样的说法。如何在解析器中检测到 rdfs:container 的存在?
我注意到 Jena 有 Container 的概念:https://jena.apache.org/documentation/javadoc/jena/org/apache/jena/rdf/model/Container.html。
【问题讨论】:
-
您在json-ld.org/playground 尝试过 JSON-LD 吗?
-
感谢您的建议。我把它放在那里。类型通过,我可以放 ``` "@type": [ "rdfs:container" ],``` 还有 ``` "@type": [ "rdfs:abc" ], ``` 我想Jena 一定是在寻找它支持的值(比如 rdfs:class 并忽略它不理解的内容)。
-
Jena 使用 jsonld-java 读取三元组。对于任何格式,Jena 都不会自动查找容器。应用程序必须使用“Resource.as()”等来表示“请将此视为更高级别的构造。如果您没有从 jsonld-java 和 JSON 操场上看到不同的三元组,那么最好报告它。我们这里不能判断 JSON-LD 是否是正确的形状。容器(或者更确切地说是 rdf:Bad/rdf:Alt/rdf:Seq)在其中具有类似“rdf:_1”的属性。rdfs:Container 类是一个超类 - 应用程序需要说它是什么。
标签: containers jena json-ld