具体化的 rdf 三元组中的 SPARQL 属性 路径
SPARQL property path in reified rdf triples
是否可以将 属性 路径与具体化的 rdf 三元组一起使用?
我想获取指定class的所有超classes(存储在?class
)。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?class ?superclass ?supersuperclass ?supersupersuperclass
WHERE{
{
?s rdf:subject ?class .
?s rdf:predicate rdfs:subClassOf .
?s rdf:object ?superclass .
OPTIONAL {
?s1 rdf:subject ?superclass .
?s1 rdf:predicate rdfs:subClassOf .
?s1 rdf:object ?supersuperclass .
}
OPTIONAL {
?s2 rdf:subject ?supersuperclass .
?s2 rdf:predicate rdfs:subClassOf .
?s2 rdf:object ?supersupersuperclass .
}
}
}
你可以使用中间查询,先去具体化语句:
CONSTRUCT {
?s a rdfs:Class .
?o a rdfs:Class .
?s rdfs:subClassOf ?o .
}
WHERE {
?t a rdf:Statement .
?t rdf:object ?o .
?t rdf:predicate rdfs:subClassOf .
?t rdf:subject ?s .
}
然后获取所有的子类关系:
SELECT ?s ?o
WHERE {
?s a rdfs:Class .
?s rdfs:subClassOf* ?o .
}
如果您知道 类 没有被其他谓词链接,您可以使用路径:
SELECT ?s ?o
WHERE {
?s a rdfs:Class .
?o a rdfs:Class .
?s (^rdf:subject/rdf:object)* ?o .
}
是否可以将 属性 路径与具体化的 rdf 三元组一起使用?
我想获取指定class的所有超classes(存储在?class
)。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?class ?superclass ?supersuperclass ?supersupersuperclass
WHERE{
{
?s rdf:subject ?class .
?s rdf:predicate rdfs:subClassOf .
?s rdf:object ?superclass .
OPTIONAL {
?s1 rdf:subject ?superclass .
?s1 rdf:predicate rdfs:subClassOf .
?s1 rdf:object ?supersuperclass .
}
OPTIONAL {
?s2 rdf:subject ?supersuperclass .
?s2 rdf:predicate rdfs:subClassOf .
?s2 rdf:object ?supersupersuperclass .
}
}
}
你可以使用中间查询,先去具体化语句:
CONSTRUCT {
?s a rdfs:Class .
?o a rdfs:Class .
?s rdfs:subClassOf ?o .
}
WHERE {
?t a rdf:Statement .
?t rdf:object ?o .
?t rdf:predicate rdfs:subClassOf .
?t rdf:subject ?s .
}
然后获取所有的子类关系:
SELECT ?s ?o
WHERE {
?s a rdfs:Class .
?s rdfs:subClassOf* ?o .
}
如果您知道 类 没有被其他谓词链接,您可以使用路径:
SELECT ?s ?o
WHERE {
?s a rdfs:Class .
?o a rdfs:Class .
?s (^rdf:subject/rdf:object)* ?o .
}