Как получить все обратные свойства с помощью SPARQL?

Мне нужен запрос SPARQL, чтобы получить все доступные обратные свойства. exp (до, после, супруга и т. д.) Я пробовал это в определенном домене (Человек):

SELECT
DISTINCT ?predicate
WHERE 

{
  ?subject a dbo:Person .
  ?object a dbo:Person . 
  ?subject ?predicate ?object .
  ?object ?predicate ?subject .
}

РЕЗУЛЬТАТ:

  1. http://www.w3.org/2000/01/rdf-schema#seeAlso
  2. http://www.w3.org/2002/07/owl#sameAs
  3. http://www.w3.org/2002/07/owl#differentFrom
  4. http://dbpedia.org/property/deathPlace
  5. http://dbpedia.org/ontology/associatedBand
  6. http://dbpedia.org/ontology/author
  7. http://dbpedia.org/ontology/associatedMusicalArtist
  8. http://dbpedia.org/ontology/field
  9. http://dbpedia.org/ontology/governor
  10. http://dbpedia.org/ontology/lastAppearance
  11. http://dbpedia.org/ontology/managerClub
  12. http://dbpedia.org/ontology/recordLabel
  13. http://dbpedia.org/ontology/relation
  14. http://dbpedia.org/ontology/related
  15. http://dbpedia.org/ontology/relative
  16. http://dbpedia.org/ontology/starring
  17. http://dbpedia.org/property/p
  18. http://dbpedia.org/property/title
  19. http://purl.org/linguistics/gold/hypernym

person fetahokey    schedule 16.12.2019    source источник
comment
что вы понимаете под инверсией? В вашем примере показаны только предикаты, для которых некоторые люди одновременно являются субъектом и объектом тройки. Это ничего не значит, оно даже вернет предикаты, если будет только одна такая тройка. И характеристика свойства, о которой вы действительно просите, - это симметрия, т.е. p(s,o)->p(o,s)   -  person UninformedUser    schedule 16.12.2019
comment
кстати, ваш возвращенный результат показывает, что большинство из них бесполезны, или почему title должен связывать двух людей?   -  person UninformedUser    schedule 16.12.2019
comment
для обратных свойств вам, очевидно, нужно вычислять пары свойств, не так ли? SELECT DISTINCT ?predicate1 ?predicate2 WHERE { ?subject a dbo:Person . ?object a dbo:Person . ?subject ?predicate1 ?object . ?object ?predicate2 ?subject . filter(?predicate1 != ?predicate2) }   -  person UninformedUser    schedule 16.12.2019
comment
Ясно, что это не дает ничего действительно значимого, вам все равно придется вычислить, как часто эти пары (p1, p2) do occur given p1` (или p2 - в науке общими показателями являются уверенность и поддержка, учитывая, что ваша задача - не что иное, как правила добычи (здесь p1(s,o) ->p2(o,s) )   -  person UninformedUser    schedule 16.12.2019
comment
@AKSW, извините за опоздание. Под обратными свойствами я подразумеваю два предиката P1 ‹› P2, они обратны, если и только если (A, P1, B) и (B, P2, A), A и B являются Subject, Object соответственно   -  person fetahokey    schedule 17.12.2019


Ответы (1)


Обратите внимание, что вы не запрашиваете обратные свойства; вы просите симметричные (или взаимные, или отражающие) свойства - где каждая пара субъект / объект также описывается как пара объект / субъект.

Если вы действительно хотите что-то более близкое к инверсии, вы можете попробовать что-то вроде -

SELECT DISTINCT ?predicate 
                ?reverse_predicate
WHERE 
  {
    ?subject a                  dbo:Person .
    ?object  a                  dbo:Person . 
    ?subject ?predicate         ?object .
    ?object  ?reverse_predicate ?subject .
  }
ORDER BY ?predicate ?reverse_predicate

- но если вы посмотрите на этот запрос, вы заметите, что многие" отраженные "отношения не выражаются свойствами, которые на самом деле являются обратными друг другу. .

ex:child и ex:parent, вероятно, легко понять как обратные, но как насчет ex:sibling, ex:brother, ex:sister? Также обратите внимание, сколько существует «отраженных» свойств, например, ‹http://dbpedia.org/ontology/child>!

Возможно, описание зачем вам это нужно и как вы планируете их использовать, это поможет другим предоставить более актуальные ответы или другую информацию ...

person TallTed    schedule 16.12.2019