使用SPARQL查询RDF中的非XSD、RDF等数据类型



这是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)

我知道如何处理实际的RDF数据类型,如xsd:integer,但我不知道如何处理额外的数据类型。

如果你能提供完整的工作数据供我们使用,解决这些问题就容易多了。在这种情况下,将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用任意数据类型匹配文字中描述的语法将文字写入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:前缀时可以使用xsd:integer一样,如果首先定义ns:前缀,则可以使用ns:building-code-scheme,如下所示。
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> |
---------------------------------------------

最新更新