Sparql-запрос получает исключение тайм-аута

Когда я использую этот запрос в 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

Фильтры IMO требуют очень много времени.

Gilles-Antoine Nys 27.03.2019 09:32

Добавьте DISTINCT также к _sameAs и ?_paradigm_label в соответствующих проекциях group_concat, чтобы избежать дублирования в агрегации. Также вы, вероятно, пропустили фильтрацию по языку ?_paradigm_label, так как везде вас интересуют литералы «en». Это также уменьшит размер результата.

Damyan Ognyanov 27.03.2019 09:33

@DamyanOgnyanov Спасибо, проблема с помощью Distinct решена!

Shajedul Islam 27.03.2019 09:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В текущем 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 не работает в реальной конечной точке?

Shajedul Islam 28.03.2019 13:34

@ShajedulIslamAny — этот комментарий, связанный с MIN, не относится к этому вопросу/ответу. Вы должны задать новый вопрос для него. Тем не менее, конечная точка live.dbpedia.org/sparql, по-видимому, имеет некоторые проблемы в данный момент, которые не относятся к функции MIN и вызывают ошибки, которые вы описали в комментариях на stackoverflow.com/a/55380140/241164.

TallTed 28.03.2019 14:22

Другие вопросы по теме