rdf - 无法通过本地定义的谓词提取 RDF 三元组

标签 rdf sparql ontology lubm

可能我只是无法掌握本体背后的一些基本概念,但这是我的问题。我正在尝试使用指定谓词的 SPARQL 查询从 RDF 存储(使用 4store,但也尝试过 XML ArmyKnife)中提取三元组并获得空结果。

为了确保我不会混淆 RDF 语法,我使用 LUBM 生成的数据(精简为适合示例的大小)。

<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
  xml:base = "http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl"
  xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
  xmlns:owl="http://www.w3.org/2002/07/owl#"
  xmlns:ub="univ-bench.owl#"
>

<owl:DatatypeProperty rdf:ID="name">
  <rdfs:label>name</rdfs:label>
</owl:DatatypeProperty>

<owl:Class rdf:ID="Organization">
  <rdfs:label>organization</rdfs:label>
</owl:Class>

<owl:Class rdf:ID="University">
  <rdfs:label>university</rdfs:label>
  <rdfs:subClassOf rdf:resource="#Organization" />
</owl:Class>

<ub:University rdf:about="http://www.University0.edu">
   <ub:name>University0</ub:name>
</ub:University>

</rdf:RDF>

然后我运行查询以查看导入后我的数据库实际包含的三元组:
SELECT * WHERE {?s ?p ?o} ORDERBY ?s

结果如下:
<http://www.University0.edu>    <univ-bench.owl#name>   "University0"
<http://www.University0.edu>    <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>       <univ-bench.owl#University>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization>         <http://www.w3.org/2000/01/rdf-schema#label>    "organization"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization>     <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>       <http://www.w3.org/2002/07/owl#Class>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University>       <http://www.w3.org/2000/01/rdf-schema#subClassOf>       <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#Organization>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University>       <http://www.w3.org/2000/01/rdf-schema#label>    "university"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#University>       <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>       <http://www.w3.org/2002/07/owl#Class>
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#name>     <http://www.w3.org/2000/01/rdf-schema#label>    "name"
<http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#name>     <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>       <http://www.w3.org/2002/07/owl#DatatypeProperty>

很明显我有 <univ-bench.owl#name>谓词作为第一个三元组的一部分。

尽管如此,以下查询不返回任何结果:
SELECT * WHERE {?s <univ-bench.owl#name> ?o}

我已经尝试了几十种组合,有命名空间和没有命名空间,但不能让它工作。谁能解释为什么 RDF 引擎找不到明显存在的谓词?

顺便说一句,使用 OBJECT="University0"提取相同的三元组可以正常工作。

最佳答案

这是无效的:
xmlns:ub="univ-bench.owl#"
命名空间 URI 在 RDF/XML 中必须是绝对的。 (它们在 Turtle 等其他语法中可能是相对的,但在 RDF/XML 中则不然。)如果您的示例确实是由 LUBM 直接生成的,那么 LUBM 就被破坏了。这应该有效:
xmlns:ub="http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#"
那么当然你需要像@RobV 所说的那样在 SPARQL 查询中匹配那个 URI。

关于rdf - 无法通过本地定义的谓词提取 RDF 三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7145502/

相关文章:

rdf - objectProperty中有多个域和范围?

sparql - 如何使用SPARQL查找图中的叶节点?

ontology - 如何在Protege中创建双语本体?

rdf - 为 2 个相关表创建 RDF 并对其运行 SPARQL 查询

extract - RDFa Reader提取工具

rdf - 为什么 rdf :Seq and not rdfs:Seq?

sparql - 如何将变量绑定(bind)到 SPARQL 中的查询项

rdf - 在 Open RDF 中查询存储库并显示结果

ontology - Sesame SeRQL 不提供更新/插入选项?

java - 从 RDF 节点拉出字符串