Как отфильтровать людей по SPARQL-запросам - PullRequest
1 голос
/ 02 мая 2020

Я новичок в этом языке и запросов. В Protege я использую онтологию PROV и FOAF, а также добавил несколько своих собственных экземпляров и классов. С этой онтологией я пытаюсь составить карту процесса медицинского исследования. С помощью запросов SPARQL я хочу быстро получить важную информацию о процессе.

У меня есть несколько вопросов: enter image description here

Глядя на запрос выше, вывод имеет смысл для меня. Слева - некоторые исследовательские работы (MetaAnalysis относится к классу MetaAnalysisPaper, а Paper2 - к классу Research), а справа - некоторые имена, являющиеся частью класса Author.

  1. Как фильтровать на метаанализе? Чтобы отображались только отношения «MetaAnalysis wasAttributedTo (имя автора)», а не «Paper2».
  2. Как мне выполнить фильтрацию по Author, например, Biederman? Таким образом, появляется только отношение «MetaAnalysis wasAttributedTo Biederman».

Следующее является индивидуальным: enter image description here

У меня также есть индивид CImin, также принадлежит классу ConfidenceInterval, имеет такое же отношение wasGeneratedBy, значение равно 0,12 и определяется так же, как CImax.

Я хочу вывод, который дает мне значение (0,39) CImax и значение (0,12) CImin. Можно ли получить только оба этих вывода одним запросом? Как будет выглядеть этот запрос? И если это невозможно с одним запросом, как будет выглядеть запрос только для значения CImax?

Заранее спасибо. Файл Turtle был очень, очень большой, поэтому я решил не загружать его сюда, но, если это необходимо, пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 02 мая 2020

Как я могу фильтровать на MetaAnalysis? Таким образом, отображаются только отношения «MetaAnalysis wasAttributedTo (имя автора)», а не «Paper2».

Это можно сделать с помощью выражений фильтра . Например, в вашем случае вы можете добавить что-то вроде:

FILTER(?property = lol:MetaAnalysis)

Я говорю «что-то вроде» этого, потому что на ваших скриншотах не ясно, в каком пространстве имен находится ресурс MetaAnalysis. Я догадываясь это пространство имен онтологии по умолчанию, созданное Protege (сокращенно lol по первому изображению), но вам может потребоваться перепроверить это.

Как мне отфильтровать по автору скажем к примеру бидерман? Таким образом, появляется только отношение «MetaAnalysis wasAttributedTo Biederman».

Та же идея, просто другая переменная и значение:

FILTER(?object = lol:Biederman) 

(это предполагает, что Biederman является URI ресурса в ваших данных, а не буквальное значение - это не ясно из ваших скриншотов)

Поместите любое условие фильтра в предложение WHERE (после шаблона оператора), и вам должно быть хорошо go.

Я хочу вывод, который дает мне значение (0,39) CImax и значение (0,12) CImin. Можно ли получить только оба этих вывода одним запросом? Как будет выглядеть этот запрос? И если это невозможно с одним запросом, как будет выглядеть запрос только для значения CImax?

Да, это возможно несколькими способами. Одна вещь, которую вы можете сделать, это создать запрос SPARQL, который получает всех лиц типа ConfidenceInterval (что-то вроде ?ci rdf:type lol:ConfidenceInterval .) и захватывает их значения (например, ?ci lol:value ?value). Объедините оба шаблона в одном запросе SPARQL, чтобы получить все, что соответствует обоим шаблонам. Добавьте дополнительные фильтры и шаблоны, как вы go, чтобы сделать ваш запрос более точным c, при необходимости.

В более общем плане: это действительно основа c SPARQL, который вы просите здесь. Я бы порекомендовал вам сделать учебник, в Интернете есть несколько действительно хороших, быстрый Google разберется с вами.

...