假设我们在Turtle语法中有以下三倍:
<http:/example.com/Paul> <http:/example.com/running> <http:/example.com/10miles> .
如何添加开始和结束时间?例如,如果我想说他在上午10点开始并在上午12点完成他的10英里跑。我想使用xsd:dateTime
。
答案 0 :(得分:4)
这样做的一种方法是通过具体化 - 对声明做出陈述。在这里,您可以选择为语句提供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:hasPeriodStart
和ex:hasPeriodEnd
时,您可能需要声明其类型和范围:
ex:hasPeriodStart
rdf:type owl:DatatypeProperty ;
rdfs:range xsd:dateTime ;
或者您可能希望使用SHACL确保数据的质量,您可以使用形状表达式定义约束。
我建议您不要定义与时间相关的属性,而应重用time ontology中的属性。
答案 1 :(得分:1)
给Paul的每个游戏都有自己的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。但这使得其他人很难/不可能参考这些运行。
答案 2 :(得分:0)
就像一个想法。
<强> 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转换器