在SPARQL CONSTRUCT中创建持久的IRI?

时间:2017-08-01 14:48:51

标签: sparql

我被要求使用一些非常扁平的三元组,它们的谓词中嵌入了有关其对象的信息。换句话说,几乎所有谓词都是owl:DatatypeProperties

:meeting1 :hasChair "Professor Gadget" .
:meeting1 :chairPhoneNumber "555-1212" .
:meeting1 :hasAttendee "William Gosset" .

我的团队一直在考虑在语义上扩展三元组。我认为这需要创建新的实体/ rdf:Resource s / owl:Thing。如果我有选择,我宁愿创建基于UUID的IRI(而不是使用空白节点。)

:meeting1 a :meeting .
:meeting1 :hasChair :ABC123 .
:meeting1 :hasAttendee :DEF999 .
:ABC123 a :person .
:ABC123 :name "Professor Gadget" .
:ABC123 :phoneNumber  "555-1212" .
:DEF999  a :person .
:DEF999  :name "William Gosset" .

我知道我可以说

CONSTRUCT { ?m a :meeting } WHERE { ?m :hasChair ?c }

我怎么能说" Gadget教授"必须是某些:name的{​​{1}},同一:person:person" 555-1212"?

generate an urn/iri/uri dynamically显示如何:phoneNumber构造一个SPARQL变量的URI和BIND它。此外,我知道我可以使用INSERT创建一个UUID。我能否在STRUUID()声明中的INSERT子查询中执行此操作?我希望Gadget教授的URI能够在会议主持声明,CONSTRUCT声明和:phoneNumber声明中持续存在,但我希望为名不同的人或主持会议的人提供新的UUID除:name之外,我宁愿冒险将多个UUID分配给Gadget教授,也可能使用相同的UUID来引用多个会议主席。

1 个答案:

答案 0 :(得分:2)

这是到目前为止的情况。我认为这就是我想要的,但仍然愿意接受建议。

附加三元组,前缀为:

prefix : <http://example.com/>
:meeting2 :hasChair "James Moriarty" .
:meeting2 :chairPhoneNumber "unlisted" .
:meeting2 :hasAttendee "William Gosset" .

构造声明:

prefix : <http://example.com/>
CONSTRUCT 
{ 
    ?m a :meeting .
    ?m :hasChair ?u .
    ?u :name ?c
}
    WHERE { ?m :hasChair ?c .
    bind (URI(concat("http://example.com/",STRUUID())) as ?u)}

结果:

+----------------------------------------+------------+----------------------------------------+
|                subject                 | predicate  |                 object                 |
+----------------------------------------+------------+----------------------------------------+
|  :09dfb998-cc34-48d3-830e-e480f09e94ba | :name      | "James Moriarty"^^xsd:string           |
|  :323b0c9c-0b07-4f32-abb6-503c1d97d80e | :name      | "Professor Gadget"^^xsd:string         |
|  :meeting1                             | :hasChair  | :323b0c9c-0b07-4f32-abb6-503c1d97d80e  |
|  :meeting1                             | rdf:type   | :meeting                               |
|  :meeting2                             | :hasChair  | :09dfb998-cc34-48d3-830e-e480f09e94ba  |
|  :meeting2                             | rdf:type   | :meeting                               |
+----------------------------------------+------------+----------------------------------------+