Что не так с этим совместным запросом sparql, который дает пропущенные результаты

У меня есть 2 запроса sparql, но они не возвращают правильные результаты (тройки). Первый возвращает правильный результат, но некоторые тройки пропущены, второй возвращает все правильные тройки, но не в правильном формате, фактически я не хочу отображать URI. 1:

SELECT  distinct  ?s ?v ?o  WHERE {
    {        ?s2 pred:relationsubject ?s_urii .
        ?s_urii pred:name ?s . 
        ?s2 pred:relationobject ?o .
        ?s2 pred:verb ?v . 

    }

результат:

1   MM  mismanage   H
2   HC  take            T
3   HC  be          D
4   HC  face            P

2:

SELECT  distinct  ?s_urii ?v ?o  WHERE {
{        ?s2 pred:relationsubject ?s_urii .
    ?s2 pred:relationobject ?o .
    ?s2 pred:verb ?v . 

}

результат:

 1  http://5a0  mismanage   H
2   http://6b1  take            T
3   http://6b1  be          D
4   http://6b1  face            P
5   http://5a0  make with   G
6   http://6b1  not make    TN
7   http://6b0  have            TL

этот URI(http://5a0,http://5b1...) соответствует предметам (MM,HC...) в базе данных. Может кто-нибудь, пожалуйста, сообщите мне проблему? Я использую ARC triplestore, поэтому тройки хранятся в базе данных mysql, и я использую язык php для выполнения своих запросов. Вы найдете в этой ссылке файл, который содержит данные, введите описание ссылки здесь

Я также пробовал этот запрос, но он не дает мне все записи:

SELECT  distinct  ?s ?v ?o  WHERE {
    {        ?s2 pred:relationsubject ?s_urii .
        ?s_urii pred:name ?s . 
        ?s2 pred:relationobject ?o .
        ?s2 pred:verb ?v . 

    }

1 ответ

Биби, твой вопрос не совсем ясен, и, судя по твоему sparql-запросу, я считаю, что ты абсолютно новичок в sparql и перепробовал много вещей, которые ведут тебя от?s1 к?s2 к?s_urii... я бы скажем, что это четыре часа попыток поймать.. не зря я уверен, что вы чему-то научились;-) (кстати, фигурные скобки в вышеприведенных запросах несбалансированы и не могут быть запущены, как указано выше)

теперь rdf (представьте, что rdf - большая таблица с тремя столбцами, один для субъекта, один для предиката и один для объекта тройки) и соответствующий язык запросов (sparql) - две действительно простые вещи, которые вы знаете, что ты делаешь.

  1. сначала запустите следующий запрос и посмотрите на данные, чтобы вы хотя бы немного познакомились с предметами, предикатами и объектами.

    SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 100
    

это переводится на человеческий язык: покажи мне все, где есть тройка. и связать значение в столбце темы с переменной? s, значение в столбце предиката с? p и значение в столбце объекта с переменной? o.

  1. проверить, что происходит, когда вы делаете:

    SELECT ?s WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT ?p WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT ?o WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT DISTINCT ?s WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT DISTINCT ?p WHERE { ?s ?p ?o } LIMIT 100
    
    SELECT DISTINCT ?o WHERE { ?s ?p ?o } LIMIT 100
    

также попробуйте

SELECT DISTINCT ?UNDEF WHERE { ?s ?p ?o } LIMIT 100 

пожалуйста, обратите внимание, что? s? p? o - это только имена переменных, вы можете заменить их также на "cat" dog "bird, если хотите. Также обратите внимание, что запросы sparql select возвращают привязки, а не тройки.

если второй запрос содержит привязки, которые вы ищете, и вы просто хотите удалить? s_urii, то просто не выбирайте его.

SELECT  distinct ?v ?o  WHERE {
?s2 pred:relationobject ?o .
?s2 pred:verb ?v . 
}
Другие вопросы по тегам