繁体   English   中英

JSON-LD 框架指定 rdfs 的顺序

[英]JSON-LD framing specify ordering of rdfs

@prefix emp: <http://example.com/employee/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

emp:hasName rdf:type rdfs:Property .

emp:dateOfBirth  rdf:type rdfs:Property ;
    rdf:after emp:passportNumber .

emp:passportNumber rdf:type rdfs:Property .

鉴于上述 Turtle RDF model,我想生成以下 JSON-LD:

"@graph": [
    {
        "@id": "emp:hasName",
        "@type": "rdfs:Property"
    },
    {
        "@id": "emp:passportNumber",
        "@type": "rdfs:Property"
    },
    {
        "@id": "emp:dateOfBirth",
        "@type": "rdfs:Property",
    }
]

请注意, emp:dateOfBirth在列表中的emp:passportNumber之后排序,因为我在 model 中指定了rdf:after "emp:passportNumber"

我如何通过 JSON-LD 框架来实现这一点?

依赖这些 rdf 的声明顺序是否安全,因为大多数 RDF->JSON-LD 库似乎都保留了顺序(尽管规范将它们定义为无序)?

我不想在 RDF model 中明确定义详尽的有序列表,因为该列表会很大,并且只需要订购几个 RDF(例如,我不关心emp:hasName在哪里)。

您在 JSON-LD 中看到三元组的“顺序”这一事实只是序列化的产物,您还会在 RDF/XML(因为 XML 元素是有序的)和 Turtle(因为文本文件是有序的)中看到的,但它不是依靠稳定的东西。 实现可以很容易地使用 hash 集来存储三元组,然后再转换为另一种格式,并且它可以根据需要重新排列三元组。

现在 JSON-LD 框架似乎用于生成压缩的 JSON 文档,而不是扁平化(即使用@graph ),但如果它可以同时使用,我想这应该可以工作:

{
  "@context": ...,
  "@graph": [
    {
      "@id": "emp:passportNumber"
    },
    {
      "@id": "emp:dateOfBirth"
    }
  ]
}

假设您可以拥有一个单一的全球订单。 然而,该规范中没有任何内容让您能够在 RDF 本身中指示顺序。

如果您出于演示的目的需要它,我建议您尽可能长时间地保留 RDF 本身中的排序关系。 由于似乎没有rdf:after ,您可以根据上下文使用xhv:prev类的东西,或者使用更具体的东西。 您还可以使用 SPARQL 根据该属性对数据进行排序,因为 SPARQL 结果是有序的。

JSON-LD 算法将选择性地对 object 中的键进行排序,而不是不对对象本身进行排序。 您可能能够做到这一点的一种方法是使用id map ,以便不同 RDFS 术语的主题 IRI 然后用作此 map 的键。 为此,它们都需要是某个其他实体的值。 这样做的一个技巧是使用rdfs:isDefinedBy作为反向属性,以便本体本身显示为顶级 object,与其定义的术语具有反向关系。 将反向属性与 id map 组合将使 object 值具有主题 IRI 作为键,然后可以对其进行排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM