Получить актерское кино? Linkedmdb

В настоящее время я пытаюсь получить фильмы (мне нужен их URI), в которых действовал актер. Когда я изучаю связанную mdb, я вижу "is" actor "of", но я не могу использовать его в своем запросе SPARQL. Это какое-то специальное пространство имен или что-то? Или это в онтологии OWL? Запрос, который я использую сейчас:

PREFIX movie: <http://data.linkedmdb.org/resource/movie/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
SELECT ?actorName ?filmName WHERE{ 
  <http://data.linkedmdb.org/resource/actor/30947> movie:actor_name ?actorName . 
  <http://data.linkedmdb.org/resource/actor/30947> movie:performance ?film . 
  ?film movie:performance_film ?filmName .
}

Этот код возвращает только заголовок, я хотел бы весь URI фильма.

1 ответ

Решение

Говоря это

о п р х

это распространенный способ сказать, что данные содержат тройной

спо

Итак, видя, что

актер32 является актером фильма89

означает, что данные содержат

фильм89 актер актер32

Я бы сказал, что у актера собственности плохое имя. Это больше похоже на features или hasActor, но RDF генерируется отображением из базы данных, поэтому я предполагаю, что некоторые имена генерируются автоматически, и что все они не могут быть хорошими. В любом случае это означает, что запрос, подобный следующему, найдет все фильмы и их названия, которые <http://data.linkedmdb.org/resource/actor/30947> действовал в.

SELECT ?movie ?movieTitle WHERE{ 
  ?movie movie:actor <http://data.linkedmdb.org/resource/actor/30947> .
  ?movie dc:title ?movieTitle .
}

Результаты

Кроме того, вы можете немного сократить этот запрос, используя ; продолжить список объектов предиката, чтобы вам не приходилось повторять тему ?movie:

SELECT ?movie ?movieTitle WHERE{ 
  ?movie movie:actor <http://data.linkedmdb.org/resource/actor/30947> ;
         dc:title ?movieTitle .
}

Приложение: об "есть - из"

Обозначение 3 (N3): читаемый синтаксис RDF, который очень похож на Turtle, Terse RDF Triple Language (на самом деле, Turtle является подмножеством N3), но который включает в себя несколько более синтаксических конструкций, фактически позволяет "is - of" Способ написания троек. Производство грамматики для предиката:

predicate
    expression
    "<="
    "="
    "=>"
    "@a"
    "@has" expression
    "@is" expression "@of"

Это означает, что в N3 вы можете, например, перечислить некоторые экземпляры класса с

ex:Planet @is rdf:type @of 
  :Mercury, :Venus, :Earth, :Mars, :Jupiter, :Saturn, :Uranus, :Neptune .

вместо того, чтобы делать

:Mercury rdf:type ex:Planet .
:Venus rdf:type ex:Planet .
:Earth rdf:type ex:Planet .
:Mars rdf:type ex:Planet .
:Jupiter rdf:type ex:Planet .
:Saturn rdf:type ex:Planet .
:Uranus rdf:type ex:Planet .
:Neptune rdf:type ex:Planet .

К сожалению, многие инструменты, которые утверждают, что поддерживают N3, фактически поддерживают только Turtle, и не приняли бы первую форму. Однако, если вы работаете с чем-то, что на самом деле поддерживает N3, вы можете написать

<http://data.linkedmdb.org/resource/actor/30947> @is movie:actor @of ?movie .
?movie dc:title ?movieTitle .

К сожалению, синтаксис SPARQL для тройных шаблонов не поддерживает @is — @of так что вы не сможете сделать это в своем запросе.

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