Sparql 如何根据RDF中的条件选择属性
在下面的RDF示例中,我希望根据一个条件获得一个属性的值。 情况如下:Sparql 如何根据RDF中的条件选择属性,sparql,rdf,owl,semantic-web,rdfs,Sparql,Rdf,Owl,Semantic Web,Rdfs,在下面的RDF示例中,我希望根据一个条件获得一个属性的值。 情况如下: PREFIX ex:<http://ww....ex#> SELECT ?mail ?refProp ?payer WHERE { { SELECT ?mail ?refProp WHERE { ?mail ex:paymentType / ex:referProperty ?refProp. } }
PREFIX ex:<http://ww....ex#>
SELECT ?mail ?refProp ?payer
WHERE
{
{
SELECT ?mail ?refProp
WHERE
{
?mail ex:paymentType / ex:referProperty ?refProp.
}
}
?mail ?refProp ?payer.
}
- 如果property
的值是refereproperty
,那么我将获得property“ex:sender”
的值李>ex:sender
- 如果property
的值是refereproperty
,那么我会得到property“ex:receiver”
的值李>ex:receiver
@前缀ex:。
@前缀xsd:。
例:邮件1
例如:发送方“John”^^xsd:string;
例如:接收方“账单”^^xsd:string;
例:付款类型例:付款类型1。
例:邮件2
例如:发送方“Jack”^^xsd:string;
例如:接收器“Tom”^^xsd:string;
例:付款类型例:付款类型2。
例:付款类型1
例如:paymentTypeDescription“预付”^^xsd:string;
ex:refereProperty“ex:sender”^^xsd:string。
例:付款类型2
例如:paymentTypeDescription“COLLECT”^^xsd:string;
ex:refereProperty“ex:receiver”^^xsd:string。
获取值的Sparql如下所示:
PREFIX ex:<http://ww....ex#>
SELECT ?mail ?refProp ?payer
WHERE
{
{
SELECT ?mail ?refProp
WHERE
{
?mail ex:paymentType / ex:referProperty ?refProp.
}
}
?mail ?refProp ?payer.
}
前缀ex:
选择“邮件”refProp“付款人”
哪里
{
{
选择“邮件”参照属性
哪里
{
?邮件ex:paymentType/ex:referProperty?refProp。
}
}
?邮件?参考项目?付款人。
}
可以通过Sparql获取一个值。但我怀疑使用上述RDF样本和Sparql的方式是不规则的,因为它似乎扩展到了一阶谓词逻辑之外。
使用从文字节点获取的值作为变量来搜索属性是不规则的。理论上,属性“ex:refereProperty”应该在RDFS中定义。
你这样认为吗?如果您这样认为,请教我一种常规方法,包括正确的RDF和正确的Sparql 选项1 可以使用和将URI转换为字符串,反之亦然:
前缀ex:
选择?邮件?str?付款人{
?邮件?p?付款人;例如:paymentType/ex:referProperty?str。
过滤器(替换(str(?p),str(ex:),“ex:”=?str)
}
或
前缀ex:
选择?邮件?str?付款人{
?邮件?p?付款人;例如:paymentType/ex:referProperty?str。
筛选器(URI(替换(?str,“ex:”,str(ex:))=?p)
}
选项2
您可以使用和实现您的条件:
前缀ex:
选择?邮件?str?付款人{
?邮件ex:paymentType/ex:referProperty?str。
绑定(如果(?str=“ex:sender”,ex:sender,ex:receiver)为?p)
邮寄付款人。
}
选项3
使用:
前缀ex:
选择?邮件?str?付款人{
值(?str?uri){(“ex:sender”ex:sender)(“ex:receiver”ex:receiver)}
?邮件?uri?付款人;例如:paymentType/例如:referProperty?str。
}
选项4
正如Damyan Ognyanov所说,您可以在引用数据中使用URI而不是字符串,即。eex:sender
而不是“ex:sender”
等。然后您的查询将简单如下:
前缀ex:
选择?邮件?str?付款人{
?邮件?uri?付款人;ex:paymentType/ex:referProperty?uri。
}
更新
发件人:
在一个RDF矛盾中,是否使用ex:sender
作为属性和对象?在RDF中使用ex:sender
作为URI会使RDF和RDF之间的边界变得可疑
发件人:
RDF图的节点集是图中三元组的主题和对象集。谓词IRI也可能作为节点出现在同一个图中 在RDF中,“属性”(或者说它们的“类型”)是一级对象。
RDFS与其说是一个模式,不如说是一个词汇表(它引入了
rdf:Property
的概念)
RDF中的“ABox”和“TBox”之间没有明确的区别。我不明白……给定样本数据,预期结果是什么?“使用从文本节点获取的值作为变量来搜索属性是不规则的”是什么意思?“理论上,属性”ex:refereProperty“应该在RDFS中定义”,你想说什么呢?如果是一个文本,为什么不简单地使用属性的IRI呢?例如,“ex:referProperty ex:sender.”而不是“ex:referProperty”ex:sender“^^xsd:string.”答案也可以在“谢谢你教我好Sparql”找到。你的想法会使我的问题变得简单。但是,我的问题没有解决。我的问题的核心是“它似乎扩展到了一阶谓词逻辑之外”。我是这样想的。-
Ex:sender
因为URI在Ex:mail1 Ex:sender“John”^^xsd:string
中定位为属性,在Ex:paymentType1 Ex:refereproperty Ex:receiver
中定位为对象,但属性只能在RDFS中定位为主题或对象。在一个RDF矛盾中,是否使用ex:sender
作为属性和对象?在RDF中使用ex:sender
作为URI会使RDF和RDF之间的边界变得可疑。使用“ex:sender”
作为字符串也有类似的问题。RDF标准中没有任何内容禁止将URI用作三元组的主语或宾语,同时将其用作谓词。即使是极少数的一个RDF蕴涵也意味着,如果a:p用作谓词,那么(:p RDF:type RDF:Propery)。参见第8.1.1节的第二个示例。非常感谢。我完全明白。我阅读了RDF1.1语义第8.1.1节中的第二个示例。我的问题解决了。@HisashiSakai,也许你只需要RDF概念的第3.1节:“谓词IRI也可能作为同一个图中的节点出现。”我已经更新了我的答案。