2

我使用以下 IRI 在 PROTEGE 中创建了一个本体:

http://www.marketplace.org/CarrierBlueprint#

和我给它的前缀mp

现在我将这个本体上传到 Fuseki 服务器并尝试运行更新语句。

在这个本体中有一个名为 CarrierProfile 的类,所以我想使用INSERT语句创建一个新的运营商配置文件

(1)我试过这个

INSERT DATA {
    GRAPH <http://www.marketplace.org/CarrierBlueprint#>
    {
        mp:CarrierProfile3  rdf:type  mp:CarrierProfile.
    }
}

-- fuseki 服务器显示UPDATE SUCCESS,当我查询回来时,我没有得到一个名为 CarrierProfile3 的新运营商配置文件

(2) 当我使用这个时

INSERT DATA {
    mp:CarrierProfile3  rdf:type  mp:CarrierProfile.
}

它也成功了,当我查询时,这次我得到了一个名为 CarrierProfile3 的新运营商配置文件

我不明白我在代码 1 中做错了什么。我没有正确提及图表吗?

4

1 回答 1

2

使用给定的 IRI 创建本体并不一定会在您将其上传到商店时为其提供该 URI。每个商店都有自己的方式来指定将新数据加载到哪个图表中,在 Fuseki 的情况下,当您上传本体文件时,它几乎肯定会进入未命名的默认图表。

使用 Fuseki,您可以通过在上传表单图表字段中输入所需的名称来上传到特定的命名图表。

您可以使用以下查询查看所有数据,包括它所在的图表:

SELECT *
WHERE
{
  { ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o } }
}

现在,就您的两个更新而言,它们都成功的原因是它们都插入了有效数据,问题是更新 1 将其专门插入到命名图中,而更新 2 插入到未命名的默认图中。您尚未显示用于测试更新是否“有效”的特定查询,但我认为它类似于以下内容:

SELECT *
WHERE
{
  ?x a mp:CarrierProfile .
}

这里的问题是您的查询仅查询未命名的默认图,因此在第一次更新后,您不会在该图中看到任何更改,因为您更新了特定的命名图。而在第二次更新中,您更新了默认图表,因此查询确实看到了新数据。

您可以通过多种方式重写查询以访问特定的命名图。首先,您可以在GRAPH第一次更新中使用该子句,例如

SELECT *
WHERE
{
  GRAPH <http://www.marketplace.org/CarrierBlueprint#>
  {
    ?x a mp:CarrierProfile .
  }
}

或者您可以使用该FROM子句将特定的命名图设为查询的默认图,例如

SELECT *
FROM <http://www.marketplace.org/CarrierBlueprint#>
WHERE
{
  ?x a mp:CarrierProfile .
}
于 2014-04-06T13:36:43.950 回答