【发布时间】:2013-08-11 15:15:31
【问题描述】:
我喜欢使用 dotNetRDF 从 RDF 文件中删除 RDF 元组。这是我正在使用的代码
public void deleteDest(string destID)
{
TripleStore store = new TripleStore();
Graph rdf = new Graph();
FileLoader.Load(rdf, rdfFilePath, new RdfXmlParser());
store.Add(rdf);
SparqlUpdateParser parser = new SparqlUpdateParser();
SparqlParameterizedString cmdString = new SparqlParameterizedString();
cmdString.CommandText = "PREFIX j.0: <http://www.example.org/destDetails#>"
+ "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>"
+ "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
+ "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"
+ "DELETE "
+ "WHERE { "
+ " ?dest j.0:ID \"" + destID + "\" "
+ "}";
SparqlUpdateCommandSet cmds = parser.ParseFromString(cmdString);
LeviathanUpdateProcessor processor = new LeviathanUpdateProcessor(store);
processor.ProcessCommandSet(cmds);
rdf.SaveToFile(rdfFilePath);
}
这是我的 RDF 文件的结构
<rdf:RDF xml:base="http://www.example.org/destDetails#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:ns0="http://www.example.org/destDetails#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="&ns0;0165a659-54ea-4e80-bee7-9d3951d47ae3">
<ns0:ID>0165a659-54ea-4e80-bee7-9d3951d47ae3</ns0:ID>
<ns0:destination rdf:resource="&ns0;VELES" />
<ns0:distrName>Test Test</ns0:distrName>
<ns0:hasTimeStart>17:00</ns0:hasTimeStart>
<ns0:hasTimeStop>17:55</ns0:hasTimeStop>
<ns0:moneyOneDir>130 den.</ns0:moneyOneDir>
<ns0:moneyTwoDir>---</ns0:moneyTwoDir>
</rdf:Description>
</rdf:RDF>
但是,不会对 RDF 文件应用任何更改。
【问题讨论】:
-
看起来您正在将模型写入磁盘,这很好,我怀疑问题不存在。您可以将模型打印到标准输出而不是将其写入磁盘吗?我希望您:没有传递您期望的
destID,或者它是一个类型化的文字,因此您需要实际使用?dest j.0:ID "..."^^xsd:string。 -
我想文字不是问题,因为在我用于 SELECT SPARQL 的方法中作为输入参数的相同 destID 并正在返回结果
-
即使文本形式相同,如果插入它会导致将 typed 文字插入到图形中,然后尝试删除 untyped 文字不会删除插入的三元组。很容易测试;只需将
^^xsd:string添加到您的 SPARQL 查询中,看看结果是否会改变。 -
我试过了但是rdf文件还是没有修改
-
嗯……如果您尝试保存到新文件(即不同的路径),结果如何?