Когда я использую этот запрос в java, я получаю исключение HTTP 504, так как я получаю данные из Live.
Но если я удалю influenced, influencedBy, Paradigm или любой из них, все будет работать нормально. Потом я понял, что проблема во времени или в памяти и еще проблема в том, что теперь он слишком медленный. Я хочу их всех. Что я могу сделать сейчас?
SELECT ?pl ?pl_label ?abstract ?_thumbnail
( group_concat ( DISTINCT ?_influenced_label; separator = "; " ) AS ?influenced )
( group_concat ( DISTINCT ?_influencedBy_label; separator = "; " ) AS ?influencedBy )
( group_concat ( ?_sameAs; separator = ", " ) AS ?sameAs )
( group_concat ( ?_paradigm_label; separator = ", " ) AS ?paradigm )
WHERE
{
?pl rdf:type dbo:ProgrammingLanguage .
OPTIONAL { ?pl dbo:abstract ?abstract .
FILTER ( LANG ( ?abstract ) = 'en' ) . }
?pl rdfs:label ?pl_label
FILTER ( LANG ( ?pl_label ) = 'en' ) .
OPTIONAL { ?pl dbo:influenced ?_influenced .
?_influenced rdfs:label ?_influenced_label .
FILTER ( LANG ( ?_influenced_label ) = 'en' ) . }
OPTIONAL { ?pl dbo:influencedBy ?_influencedBy .
?_influencedBy rdfs:label ?_influencedBy_label
FILTER ( LANG ( ?_influencedBy_label ) = 'en' ) . }
OPTIONAL { ?pl owl:sameAs ?_sameAs . }
OPTIONAL { ?pl dbp:paradigm ?_paradigm .
?_paradigm rdfs:label ?_paradigm_label . }
OPTIONAL { ?pl dbo:thumbnail ?_thumbnail . }
}
GROUP BY ?pl ?pl_label ?abstract ?_thumbnail
Добавьте DISTINCT также к _sameAs и ?_paradigm_label в соответствующих проекциях group_concat, чтобы избежать дублирования в агрегации. Также вы, вероятно, пропустили фильтрацию по языку ?_paradigm_label, так как везде вас интересуют литералы «en». Это также уменьшит размер результата.
@DamyanOgnyanov Спасибо, проблема с помощью Distinct решена!




В текущем http://live.dbpedia.org/sparql есть проблема с грязными данными, так что для некоторых предикатов (включая dbo:abstract, dbo:influenced и dbo:influencedBy) есть значения из нескольких приемов (т. е. нескольких правок исходной страницы Википедии), где должны быть только самые недавно полученное значение (т. е. последнее изменение). Это означает, что ваш результирующий набор будет включать что-то вроде декартова произведения — с некоторыми повторяющимися строками, за исключением предиката (ов), которые неправильно предоставляют несколько версий.
По модулю этой проблемы с данными этот запрос (с большим, чем просто дополнительным DISTINCT!) предоставит то, что, как я полагаю, вы сейчас хотите -
SELECT DISTINCT ?pl
?pl_label
?abstract
?_thumbnail
( group_concat ( DISTINCT ?_influenced_label ; separator = "; " ) AS ?influenced )
( group_concat ( DISTINCT ?_influencedBy_label ; separator = "; " ) AS ?influencedBy )
( group_concat ( DISTINCT ?_sameAs ; separator = ", " ) AS ?sameAs )
( group_concat ( DISTINCT ?_paradigm_label ; separator = ", " ) AS ?paradigm )
WHERE
{
?pl rdf:type dbo:ProgrammingLanguage ;
rdfs:label ?pl_label
FILTER ( LANG ( ?pl_label ) = 'en' ) .
OPTIONAL { ?pl dbo:abstract ?abstract .
FILTER ( LANG ( ?abstract ) = 'en' ) . }
OPTIONAL { ?pl dbo:influenced ?_influenced .
?_influenced rdfs:label ?_influenced_label .
FILTER ( LANG ( ?_influenced_label ) = 'en' ) . }
OPTIONAL { ?pl dbo:influencedBy ?_influencedBy .
?_influencedBy rdfs:label ?_influencedBy_label
FILTER ( LANG ( ?_influencedBy_label ) = 'en' ) . }
OPTIONAL { ?pl owl:sameAs ?_sameAs . }
OPTIONAL { ?pl dbp:paradigm ?_paradigm .
?_paradigm rdfs:label ?_paradigm_label
FILTER ( LANG ( ?_paradigm_label ) = 'en' ) . }
OPTIONAL { ?pl dbo:thumbnail ?_thumbnail . }
}
GROUP BY ?pl ?pl_label ?abstract ?_thumbnail
Это работает, но можете ли вы сказать мне, почему агрегатная функция MIN не работает в реальной конечной точке?
@ShajedulIslamAny — этот комментарий, связанный с MIN, не относится к этому вопросу/ответу. Вы должны задать новый вопрос для него. Тем не менее, конечная точка live.dbpedia.org/sparql, по-видимому, имеет некоторые проблемы в данный момент, которые не относятся к функции MIN и вызывают ошибки, которые вы описали в комментариях на stackoverflow.com/a/55380140/241164.
Фильтры IMO требуют очень много времени.