Что не так с этим совместным запросом 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) - две действительно простые вещи, которые вы знаете, что ты делаешь.
сначала запустите следующий запрос и посмотрите на данные, чтобы вы хотя бы немного познакомились с предметами, предикатами и объектами.
SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 100
это переводится на человеческий язык: покажи мне все, где есть тройка. и связать значение в столбце темы с переменной? s, значение в столбце предиката с? p и значение в столбце объекта с переменной? o.
проверить, что происходит, когда вы делаете:
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 .
}