【问题标题】:How do I add a start and end time to a RDF triple?如何向 RDF 三元组添加开始和结束时间?
【发布时间】:2018-04-09 06:46:51
【问题描述】:

假设我们在 Turtle 语法中有以下三元组:

<http:/example.com/Paul> <http:/example.com/running> <http:/example.com/10miles> .

如何添加开始时间和结束时间?例如,如果我想说他从上午 10 点开始,并在上午 12 点完成了 10 英里的跑步。我想使用xsd:dateTime

【问题讨论】:

  • 鉴于 RDF 仅支持二元关系,要么 1)通过某个中间节点(可能是空白节点)的 n 元关系,要么 2)具体化
  • 这里的答案提到了具体化,但我不确定是否打算为三元组或保罗跑步的事件添加时间戳。如果意图是代表 Paul 的奔跑,那么您将拥有一个 Run 类,并且 Paul 将与多个 Run 类型的个体相关;然后时间戳将是三元组,以这些人为主题。如果三元组本身应该是主题,那么具体化可能就是我们想要的。
  • 这是一个名为“10miles”的特定跑步/活动吗?或者它是 10 英里长的 a 跑步吗?
  • @unor 它是 10 英里长的跑步。保罗的数百次跑步。他是一个了不起的跑步者,每天都在跑步。
  • @Ignazio 您能否通过额外的跑步课程详细说明您的答案。提前非常感谢

标签: xsd rdf turtle-rdf


【解决方案1】:

这样做的一种方法是通过具体化 - 对陈述进行陈述。在这里,您可以选择为语句提供 URI,以便它可以在外部取消引用,或者使用空白节点。这意味着,在您的情况下,您需要通过对它的主语、宾语和谓词进行陈述来识别该陈述,并在您的情况下讲述更多关于它的事情——关于它所代表的一个时期的开始和结束。这是使用空白节点时的样子:

[
  rdf:type rdf:Statement ;   #this anonymous resource is a Statement... 
  rdf:subject ex:Paul ;      #...with subject Paul
  rdf:predicate ex:running ; #...predicate running
  rdf:object "10miles" ;     #...and object "10miles"
  ex:hasPeriodStart "2018-04-09T10:00:00"^^xsd:dateTime ;
  ex:hasPeriodEnd "2018-04-09T12:00:00"^^xsd:dateTime ;
].

在定义ex:hasPeriodStartex:hasPeriodEnd 时,您可能需要声明它们的类型和范围:

ex:hasPeriodStart
  rdf:type owl:DatatypeProperty ;
  rdfs:range xsd:dateTime ;

或者您可能更愿意使用SHACL 来确保数据的质量,您将在其中使用形状表达式定义您的约束。

我建议不要定义与时间相关的属性,而是重用 time ontology 中的那些。

【讨论】:

    【解决方案2】:

    给每个 Paul 的 run 自己的 URI:

    @prefix ex: <http://example.com/> .
    
    ex:Paul ex:running ex:PaulsRun1, ex:PaulsRun2, ex:PaulsRun3 .
    

    这使您(和其他人)可以对每次运行发表声明:

    @prefix ex: <http://example.com/> .
    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
    
    ex:PaulsRun3 
      ex:lengthInMiles 10.0 ;
      ex:startTime "2018-04-09T10:00:00"^^xsd:dateTime ;
      ex:endTime "2018-04-09T12:00:00"^^xsd:dateTime .
    

    您可以为每次运行指定运行器,而不是将所有这些运行列为 ex:Paul ex:running 的对象:

    @prefix ex: <http://example.com/> .
    
    ex:PaulsRun1
      ex:runner ex:Paul .
      # ex:lengthInMiles, ex:startTime, ex:endTime, etc.
    
    ex:PaulsRun2
      ex:runner ex:Paul .
      # ex:lengthInMiles, ex:startTime, ex:endTime, etc.
    
    ex:PaulsRun3 
      ex:runner ex:Paul .
      # ex:lengthInMiles, ex:startTime, ex:endTime, etc.
    

    如果您不想为每个跑步者的跑步创建一个 URI,您可以使用 (unlabeled) blank nodes 代替。但这使得其他人很难/不可能参考这些运行。

    【讨论】:

      【解决方案3】:

      只是一个想法。

      1.建模部分(涉及的 RDF 不多)

      {
          "runs": [
              {
                  "id": "runs:0000001",
                  "distance": {
                      "length": 10.0,
                      "unit": "mile"
                  },
                  "time": {
                      "start": "2018-04-09T10:00:00",
                      "end": "2018-04-09T12:00:00"
                  },
                  "runner": {
                      "id": "runner:0000002",
                      "name": "Paul"
                  }
              }
          ]
      }
      

      2。 RDF 部分:为您的文档定义适当的上下文。

         "@context": {
              "ical": "http://www.w3.org/2002/12/cal/ical#",
              "xsd": "http://www.w3.org/2001/XMLSchema#",
              "runs": {
                  "@id": "info:stack/49726990/runs/",
                  "@container": "@list"
              },
              "distance": {
                  "@id": "info:stack/49726990/distance"
              },
              "length": {
                  "@id": "info:stack/49726990/length",
                  "@type": "xsd:double"
              },
              "unit": {
                  "@id": "info:stack/49726990/unit"
              },
              "runner": {
                  "@id": "info:stack/49726990/runner/"
              },
              "name": {
                  "@id": "info:stack/49726990/name"
              },
              "time": {
                  "@id": "info:stack/49726990/time"
              },
              "start": {
                  "@id":"ical:dtstart",
                  "@type": "xsd:dateTime"
              },
              "end": {
                  "@id":"ical:dtend",
                  "@type": "xsd:dateTime"
              },
              "id": "@id"
          }
      

      3.有趣的部分:把它扔给你选择的 RDF 转换器

      这是how it looks in JSON-Playground

      【讨论】:

        猜你喜欢
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-06
        • 2016-09-24
        • 2018-11-07
        • 1970-01-01
        相关资源
        最近更新 更多