Nie mogę opisać mojego problemu formalnie z powodu mojego złego języka angielskiego; pozwól mi powiedzieć to za pomocą przykładu. Poniższa tabela jest faktycznie pogrupowana według "tematu", "orzecznika".Połączyć wiele zestawów wierszy w SPARQL
Definiujemy zestaw w wierszach, jeśli to ten sam "temat". Teraz chcę połączyć dwa zestawy, jeśli zawierają one te same "predykaty", zsumują "liczbę" tego samego "orzecznika" i policzą liczbę różnych przedmiotów, które mają ten sam zbiór.
subject predicate count
-----------------------------
s1 p1 1
s1 p2 2
s2 p1 3
s3 p1 2
s3 p2 2
Zatem co chciał z tej tabeli to dwa zestawy:
{2, (p1, 3), (p2, 4)},
{1, (p1,3)}
gdzie w pierwszym secie, 2 wskazuje, istnieją dwa podmioty (S1 i S3) ma ten zestaw; (p1,3) to suma z (s1, p1, 1) i (s3, p1, 2).
Jak mogę odzyskać te zestawy i zapisać je w Javie?
Jak mogę to zrobić za pomocą SPARQL?
Albo, po pierwsze, przechowuj te trójki w Javie, a następnie w jaki sposób mogę uzyskać te zestawy za pomocą Java?
Jednym z rozwiązań może być Concat predykaty i liczy,
SELECT (COUNT(?s) AS ?distinct)
?propset
(group_concat(?count; separator = \"\\t\") AS ?counts)
{
SELECT ?s
(group_concat(?p; separator = \" \") AS ?propset)
(group_concat(?c; separator = \" \") AS ?count
{
?s ?p ?c
} GROUP BY ?s ORDER BY ?s
} GROUP BY ?propset ORDER BY ?propset
Wtedy liczy może być oddzielona, a następnie zsumować. Działa dobrze na małym zbiorze danych, ale bardzo czasochłonne.
Myślę, że zrezygnuję z tego dziwnego problemu. Dziękuję bardzo za odpowiedź.
tak mam na myśli "s1 i s3 mają ten sam zestaw". przepraszam za literówkę, zmieniłem go (i zmienił wartość predykatu s2, aby było bardziej jasne). Jednak pożądany wynik to "zestaw zestawów". Dwa zestawy, na przykład {p1, p2} i {p1}, nie mogą być łączone, ponieważ są różne. Dlatego nie tylko zsumowalibyśmy wartość każdego orzeczenia. Dziękuję za odpowiedź :) – bobharris
Ah, rozumiem. To może być trudne, ale dodałem drugie przejście. – user205512
Jest prawie blisko tego, co chcę :) ale działa dalej i wydaje się, że nie da żadnego wyniku. Poza tym, jeśli zapytanie to powiedzie się, w jaki sposób mogę odzyskać te zestawy z wynikowej tabeli?Po prostu widzę, że wynikowa tabela zawiera dwie kolumny, ale nie podaje żadnych informacji o zestawach. Dla wyników będą one przechowywane w java, więc ... tak naprawdę chcę tylko te wyniki. Jeszcze raz dziękuję. – bobharris