Повторяющиеся результаты из Викиданных

Я создал следующий запрос SPARQL к Викиданным. Результатом этого запроса являются записи, относящиеся к штатам Германии. Но, как видите, результаты появляются четыре раза подряд (вы можете проверить это здесь: https://query.wikidata.org/). Я предположил, что есть проблема с географическими координатами и языками, но я все равно не могу ее решить. Что не так с этим запросом и как его исправить, чтобы получить результат без повторения?

PREFIX  p:    <http://www.wikidata.org/prop/>
PREFIX  schema: <http://schema.org/>
PREFIX  psv:  <http://www.wikidata.org/prop/statement/value/>
PREFIX  wdt:  <http://www.wikidata.org/prop/direct/>
PREFIX  wikibase: <http://wikiba.se/ontology#>
PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX  wd:   <http://www.wikidata.org/entity/>

SELECT DISTINCT  ?subject ?featureCode ?countryCode ?name ?latitude ?longitude ?description ?iso31662
WHERE
  { ?subject  wdt:P31     wd:Q1221156 ;
              rdfs:label  ?name ;
              wdt:P17     ?countryClass .
    ?countryClass
              wdt:P297    ?countryCode .
    ?subject wdt:P31/(wdt:P279)* ?adminArea .
    ?adminArea  wdt:P2452  "A.ADM1" ;
              wdt:P2452  ?featureCode .
    ?subject  wdt:P300   ?iso31662
    OPTIONAL
      { ?subject  schema:description  ?description
        FILTER ( lang(?description) = "en" )
        ?subject  p:P625                ?coordinate .
        ?coordinate  psv:P625           ?coordinateNode .
        ?coordinateNode
                  wikibase:geoLatitude  ?latitude ;
                  wikibase:geoLongitude  ?longitude
      }
    FILTER ( lang(?name) = "en" )
    FILTER EXISTS { ?subject  wdt:P300  ?iso31662 }
  }
ORDER BY lcase(?name)
OFFSET  0
LIMIT   200

person chuckk    schedule 27.02.2018    source источник
comment
Это происходит, когда вы добавляете информацию, связанную с географией, с помощью предложения OPTIONAL. Для меня это похоже на ошибку в тройном магазине Blazegraph.   -  person UninformedUser    schedule 27.02.2018
comment
@AKSW, такое бывает и без OPTIONAL. Причина в том, что координаты в некотором смысле дублируются: например, попробуйте DESCRIBE wdv:180798f520e60c501432b23634473082.   -  person Stanislav Kralin    schedule 27.02.2018
comment
Я имел в виду только содержание ДОПОЛНИТЕЛЬНОГО. Хорошо, похоже, данные, собранные вручную, - это даже мусор. это плохо ... теперь вопрос: это вызвано тройным хранилищем или кто-то в проекте викиданных решил добавить оба типа данных. Я не вижу никакой пользы от наличия литералов с обоими типами данных.   -  person UninformedUser    schedule 28.02.2018
comment
Возможно, связанный: phabricator.wikimedia.org/T179228.   -  person Stanislav Kralin    schedule 28.02.2018


Ответы (1)


Короче говоря, "9.0411111111111"^^xsd:double и "9.0411111111111"^^xsd:decimal разные, хотя в каком-то смысле они могут быть равны.

Проверь это:

SELECT DISTINCT ?subject ?featureCode ?countryCode ?name ?description ?iso31662
    (datatype(?latitude) AS ?lat)
    (datatype(?longitude) AS ?long)  

и это:

SELECT DISTINCT ?subject ?featureCode ?countryCode ?name ?description ?iso31662
    (xsd:decimal(?latitude) AS ?lat)
    (xsd:decimal(?longitude) AS ?long)  
person Stanislav Kralin    schedule 27.02.2018
comment
@chuckk, ты понял ответ? Надеюсь, вы знакомы с моделью данных Викиданных, в частности, с полными значениями. - person Stanislav Kralin; 01.03.2018
comment
Я понимаю основы, но я не был знаком с этими ссылками, спасибо! - person chuckk; 02.03.2018
comment
@chuckk, хорошо. В вашем случае ?coordinate - это инструкция (привязки имеют префикс wds:), а ?coordinateNode - полное значение (привязки имеют префикс wdv:). Простые значения связаны с предметами через истинные свойства, которые имеют префикс wdt:. Для глобальных координат простыми значениями являются WKT-литералы. - person Stanislav Kralin; 02.03.2018