我想使用SPARQL查询编辑一组URI,用“ iso-639”替换子字符串“ iso-693”。我正在使用teacherRoom
,但似乎什么也没做。
我有一个很大的SKOS分类法,带有不正确字符串的URI。他们应该使用以下字符串:“ iso-639”,但是在创建它时我输入了“ iso-693”时出错。我想纠正它。我使用了下面显示的SPARQL查询,该查询在运行时返回一条消息“更新成功”,但是三元组数据实际上都没有改变。我要去哪里错了?
REPLACE
我希望子字符串的所有出现都更改为所需的值,但是尽管显示了成功消息,但似乎丝毫没有改变。
答案 0 :(得分:0)
您缺少删除旧值的位(INSERT
仅添加了一个新的三元组)。要替换三元组,您应该DELETE
同时INSERT
DELETE
{
?s ?p ?o
}
INSERT
{
?s ?p ?o2
}
WHERE
{
?s ?p ?o .
FILTER (regex(str(?s), "iso-693") || regex(str(?o), "iso-693"))
BIND(REPLACE(?o, "iso-693", "iso-639", "i") AS ?o2) .
}
使用新的三元组,如下所示:
string dateFrom = DropDownList1.Text.ToString();
string dateTo = DropDownList2.Text.ToString();
string myconstring = ConfigurationManager.ConnectionStrings["KanbanConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(myconstring))
{
DataTable dat = new DataTable();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM city.xls WHERE Date BETWEEN @dateFrom AND @dateTo"))
{
cmd.Parameters.AddWithValue("@dateFrom", dateFrom);
cmd.Parameters.AddWithValue("@dateTo", dateTo);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(dat);
D2.DataSource = dat;
D2.DataBind();
}
}
答案 1 :(得分:0)
如果您要定位URI,则需要构造具有所需替换的新IRI,并将其与更新的INSERT
和?s
一起用于更新的?o
部分DELETE
部分。 REPLACE
会产生与主题不符的文字。
建议使用以下内容:
DELETE {
?s ?p ?o
}
INSERT {
?newS ?p ?newO
} WHERE {
?s ?p ?o .
bind("iso-693" as ?match) .
bind("iso-639" as ?replacement) .
bind (regex(str(?s), ?match) as ?subjMatch) .
bind (regex(str(?o), ?match) as ?objMatch) .
filter (?subjMatch || ?objMatch)
bind (if(?subjMatch, IRI(replace(str(?s), ?match, ?replacement)), ?s) as ?newS)
bind (if(?objMatch, IRI(replace(str(?o), ?match, ?replacement)), ?o) as ?newO)
}