2015-02-11 4 views
1

Я работаю над онтологией о ветвях семейств Эльфов Толкина. Here - это файл OWL.Обновление моего запроса SPARQL

Теперь я добавил префиксы для вкладки SPARQL в Protégé так:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX gene: <http://www.semanticweb.org/kayurin/ontologies/2015/1/casata_di_finwe#> 

А потом начал работать над моими первыми запросами, первого успешного один существом:

SELECT ?Prole 
WHERE 
{ 
?x gene:nomeCompleto ?Prole; 
gene:haGenitore gene:Finwe. 
} 

Это означало вернуть меня под столбцом «Prole» (Offspring) Data Data NomeCompleto (строковое значение, которое я использовал, потому что не знаю, как использовать символы privatecase для членов класса Individuo.) для всех членов класса «Individuo »(Лицо), у которого была собственность haGenitore Finwe (имеет Finwe как родителя.).

Он работает, чувствует себя немного слишком многословны, но (в то же время.), Это хорошая база для меня работать на других связанных запросов, как:

SELECT ?FigliMaschi 
WHERE 
{ 
?x gene:nomeCompleto ?FigliMaschi; 
gene:haGenitore gene:Finwe; 
gene:haSesso gene:MaschioSesso. 
} 

Который успешно возвращает мне все строки NomeCompleto для мужские дети из Финляндии.

Теперь, моя первая проблема:

Строки возвращаются ко мне именно в таком формате . "[insertnamehere]" @

У них есть "" и @, о которых я действительно не знаю, откуда они пришли.

Вторая проблема:

Я попробовал эволюционировали запрос:

SELECT ?Prole 
WHERE 
{ 
?x gene:nomeCompleto ?Prole; 
gene:haGenitore gene:Finwe; 
gene:haSesso gene:MaschioSesso. 
?y gene:nomeCompleto ?FiglieFemmine; 
gene:haGenitore gene:Finwe; 
gene:haSesso gene:FemminaSesso. 
} 

Идея состояла в том, чтобы получить две колонки, одна с сыновьями, а другой с дочерьми нашего prolificating эльфа.

Это так, но имена в мужской колонке копируются три раза, а те, что в женском столбце, копируются два раза, так что числа записей в обоих столбцах равны.

Невозможно исправить это?

Третий вопрос:

Я хотел бы получить две колонки: падре и Figli, первый предполагалось иметь имя только Финвэ, а второй все его потомках.

запрос был:

SELECT ?Padre ?Figli 
WHERE 
{ 
?a gene:nomeCompleto ?Padre; 
gene:Finwe. 
?x gene:nomeCompleto ?Figli; 
gene:haGenitore gene:Finwe. 
} 

Не работает, пустое поле.

Наконец, я хотел улучшить свойства данных, разделив nomeCompleto на nomeFormale и nomeComune (чтобы добавить второе имя для каждого члена списка.) Я попытался сделать запрос, который будет возвращать nomeCompleto два раза, но единственное одна работала так:

SELECT ?Nome1 ?Nome2 
WHERE 
{ 
?x gene:nomeCompleto ?Nome1; 
gene:haGenitore gene:Finwe. 
?y gene:nomeCompleto ?Nome2; 
gene:haGenitore gene:Finwe. 
} 

И даже при этом список беспорядок.

Любой, кто мог бы дать руку, решая эту вещь?

Заранее благодарен всем.

Примечание:

Я использую Protégé беты 5.0. (Единственная версия, которая работает на моем компьютере.) HermiT 1.3.8.3 как Reasoner. Обновление Java версии 8 31 Windows 8.1 64bit

+0

Язык помечено RDF литералы имеют лексическую форму и тег языка. Например, Мое имя может быть представлено как «Джошуа Тейлор» @en. Это строка «Джошуа Тейлор», а язык - английский. Это тот результат, которого вы должны ожидать. –

+0

Если у вас есть три разных вопроса, вы должны задать три разных вопроса. Stack Overflow - это помощь всем, у кого есть подобные проблемы, и объединение таких вопросов затрудняет поиск отдельных вопросов и ответов. –

+0

Для вторых вопросов вам просто нужно сделать 'select? Son? Daugher где {{... sons query ...} union {... daughters query ...}}'. –

ответ

2

Я думаю, вам действительно нужно прочитать на SPARQL. Вы должны перестать думать, будто это база данных.

  1. NomeCompleto - это свойство данных типа String. Именно по этой причине вы видите результат для вашего первого запроса в виде строковой переменной.
  2. Вы можете создать объединение двух запросов, чтобы у вас были пустые ячейки, но вы не получите повторения.

    SELECT distinct ?Prole ?FiglieFemmine WHERE { {?x gene:nomeCompleto ?Prole; gene:haGenitore gene:Finwe; gene:haSesso gene:MaschioSesso. } Union{ ?y gene:nomeCompleto ?FiglieFemmine; gene:haGenitore gene:Finwe; gene:haSesso gene:FemminaSesso. } }

  3. Первый ваш запрос является неполным, вы теряете имущество, которое я предполагал быть haProle. Поэтому вам нужно найти всех людей с отцами, а затем отфильтровать их на основе отца, о котором вы имеете в виду. Что-то вроде этого:

    SELECT distinct * WHERE { ?padre gene:haProle ?figili. ?padre gene:nomeCompleto ?n1. ?figili gene:nomeCompleto ?n2. Filter (?padre=gene:Finwe) }

  4. Если вы хотите, чтобы вернуть то, что в два раза (то же самое), вы урожденная быть использовать один и тот же объект (в вашем запросе х). Я действительно не уверен, что вы хотите сделать, но вот как получить имя дважды.

    SELECT ?Nome1 ?Nome2 WHERE { ?x gene:nomeCompleto ?Nome1; gene:haGenitore gene:Finwe. ?x gene:nomeCompleto ?Nome2; gene:haGenitore gene:Finwe. }

+0

Да, я читаю об этом, но материал, предоставленный моим университетом (И на самом деле то, что я нашел в Интернете тоже.) Немного смущало меня, поэтому я немного начал экспериментировать, чтобы понять, что они сказали. Если вы можете направить меня на некоторые материальные источники, которые, по вашему мнению, могут быть полезными, я бы очень признателен. – Kay

+0

@Kay [Стандарт] (http://www.w3.org/TR/sparql11-query/) содержит множество примеров. Часть трюка состоит в том, чтобы сфотографировать вещи на высоком уровне, а затем перечитать немного подробнее. –

+0

@ Joshua: Спасибо, сделаю это. Когда я впервые посмотрел на него, он почувствовал, что что-то больше нацелено на экспертов, а не на новичков, я попробую следовать вашим советам. – Kay