这是rdf代码:
<rdf:Description rdf:about="http://id.southampton.ac.uk/building/42">
<ns0:notation xmlns:ns0="http://www.w3.org/2004/02/skos/core#" rdf:datatype="http://id.southampton.ac.uk/ns/building-code-scheme">42</ns0:notation>
</rdf:Description>
我需要获得号码"42"
。我试过这个:
PREFIX soton: < http://id.southampton.ac.uk/ns/ >
PREFIX skos: < http://www.w3.org/2004/02/skos/core# >
?location skos:notation rdf:datatype=<http://id.southampton.ac.uk/ns/building-code-scheme>(?note)
或类似的东西:
?location skos:notation soton:building-code-scheme(?note)
我知道如何使用像xsd:integer
这样的实际RDF数据类型,但我不知道如何使用其他数据类型。
答案 0 :(得分:3)
如果您能提供我们可以使用的完整工作数据,那么解决这些问题要容易得多。在这种情况下,将RDF片段制作成完整的RDF文档并不太难。对于这个答案,我将使用以下数据:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ns0="http://www.w3.org/2004/02/skos/core#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<rdf:Description rdf:about="http://id.southampton.ac.uk/building/42">
<ns0:notation rdf:datatype="http://id.southampton.ac.uk/ns/building-code-scheme"
>42</ns0:notation>
</rdf:Description>
</rdf:RDF>
如果您尝试获取http://id.southampton.ac.uk/building/42
符号的文字值,那么您可以直接使用像这样的SPARQL查询来请求它。
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?notation WHERE {
<http://id.southampton.ac.uk/building/42> skos:notation ?notation
}
使用Jena的ARQ命令行工具,我们得到如下输出:
$ arq --data data.rdf --query query.sparql
---------------------------------------------------------------
| notation |
===============================================================
| "42"^^<http://id.southampton.ac.uk/ns/building-code-scheme> |
---------------------------------------------------------------
如果您想获得文字的词法形式,可以使用str
选择:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT (STR(?notation) as ?strNotation) WHERE {
<http://id.southampton.ac.uk/building/42> skos:notation ?notation
}
生成包含字符串"42"
的输出:
$ arq --data data.rdf --query query.sparql
---------------
| strNotation |
===============
| "42" |
---------------
如果您希望找到文字为skos:notation
的建筑物,则需要使用SPARQL建议的2.3.3 Matching Literals with Arbitrary Datatypes中描述的语法将文字写入SPARL查询。这看起来像这样:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?building WHERE {
?building skos:notation "42"^^<http://id.southampton.ac.uk/ns/building-code-scheme>
}
但是,您不必在SPARQL查询中编写完整的IRI。正如您在定义xsd:integer
前缀时可以使用xsd:
一样,如果您首先定义ns:building-code-scheme
前缀,则可以使用ns:
,如下所示。
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ns: <http://id.southampton.ac.uk/ns/>
SELECT ?building WHERE {
?building skos:notation "42"^^ns:building-code-scheme
}
两个查询都产生相同的输出:
$ arq --data data.rdf --query query.sparql
---------------------------------------------
| building |
=============================================
| <http://id.southampton.ac.uk/building/42> |
---------------------------------------------