2

这是 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,但我不知道如何使用其他数据类型。

4

1 回答 1

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"        |
---------------

如果您想找到以文字为 的建筑物,则需要使用SPARQL 推荐的2.3.3 将文字与任意数据类型匹配skos:notation中描述的语法将文字写入 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-schemens:

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> |
---------------------------------------------
于 2013-06-14T18:46:59.850 回答