Muszę odzyskać potrójne dla podmiotów, które mają relację przechodni, ale chcę tylko jako podmiot pod pod koniec łańcucha tranzytatywnego.

Na poniższy przykład:

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<:a0> rdfs:label "a0" ;
    <:has_parent> <:a1> .

<:b0> rdfs:label "b0" ;
    <:has_parent> <:b1> .

<:a1> rdfs:label "a1" ;
    <:has_parent> <:a2> .

<:a2> rdfs:label "a2" ;
    <:has_parent> <:a3> .

<:a3> rdfs:label "a3" .

<:b1> rdfs:label "b1" ;
    <:has_parent> <:b2> .

<:b2> rdfs:label "b2" .

Kiedy uruchomię następujące zapytanie Sparql (przy użyciu RDFLIB-5.0.0):

SELECT ?ancestor ?descendant
WHERE 
{
   ?descendant <:has_parent>+ ?ancestor .
}
ORDER BY ?ancestor

Dostaję:

:a1 is_ancestor_of  :a0
:a2 is_ancestor_of  :a0
:a2 is_ancestor_of  :a1
:a3 is_ancestor_of  :a2
:a3 is_ancestor_of  :a0
:a3 is_ancestor_of  :a1
:b1 is_ancestor_of  :b0
:b2 is_ancestor_of  :b1
:b2 is_ancestor_of  :b0

Ale co chciałbym zdobyć:

:a3 is_ancestor_of  :a2
:a3 is_ancestor_of  :a0
:a3 is_ancestor_of  :a1
:b2 is_ancestor_of  :b1
:b2 is_ancestor_of  :b0

To znaczy tylko "najstarszych przodków" łańcucha jako przedmiotów i wszystkich potomków jako obiektów. Umieść inny sposób, nie chcę żadnego potomka jako przedmiotu.

Wiem, że brakuje mi filtra, albo nie istnieje filtr, ani dodatkowa wybrana, gdzie tylko moje próby zwróciły puste stoły (tj. Negować wszystkie wybrane potrójne).

Najbliższe pytanie, które znalazłem to Ten jeden, chociaż nie mogłem prawidłowo wdrożyć siebie -Wychła odpowiedź lub komentarz na temat pytania.

Doceniam twoją pomoc. Dzięki.

1
Leobeeson 16 kwiecień 2021, 02:22

1 odpowiedź

Najlepsza odpowiedź

Dla mnie zawsze pomaga spróbować formułować zapytanie słowami, pierwsze. Co chcesz powiedzieć: "Daj mi tylko tych przodków, że same same nie mają żadnych dalszych przodków".

Aby sformułować to w sparql, użyj ograniczenia FILTER NOT EXISTS, coś takiego:

FILTER NOT EXISTS { ?ancestor <:has_parent> [] }

Bit [] jest anonimową zmienną, w zasadzie mówisz "Jeśli przodk ma dowolny rodzic, nie powinny być zwracane".

2
Jeen Broekstra 16 kwiecień 2021, 02:12