2016-11-29 3 views
1

Я использую SPARQL-DL с OWL-API в приложении Java. The Maven зависимость является следующее:SPARQL-DL: запрос для литералов

<dependency> 
    <groupId>edu.stanford.protege</groupId> 
    <artifactId>de-derivo-sparqldlapi</artifactId> 
    <version>2.0.0</version> 
</dependency> 

Я предполагаю, что он загружает правильный (совместимый) версии OWL-API. У меня есть класс Person с некоторыми людьми. Каждый человек имеет свойство данных, называемое именем, которое охватывает строку.

При выполнении этого запроса:

SELECT ?x WHERE { PropertyValue(?y, my:name, ?x) } 

я получаю это:

[email protected] = ?"Andrea"^^xsd:string 
[email protected] = ?"Pippo"^^xsd:string 
[email protected] = ?"Pluto"^^xsd:string 

Я не в состоянии получить все лица, имеющие имя, совпадающее с Плутоном.

SELECT ?p WHERE { PropertyValue(?p, my:name, "Pluto") } 

возвращает пустой набор и

SELECT ?p WHERE { PropertyValue(?p, my:name, "Pluto^^xsd:string") } 

возвращает пустой набор

Любая помощь? Спасибо заранее.

ответ

1

Тип данных должен поставить вне кавычек, т.е. "Pluto"^^xsd:string

К сожалению, из исходного кода я могу видеть, что SPARQL-DL API не поддерживает типы данных, см here. Все литералы обрабатываются как простые литералы. Я думаю, вам следует открыть запрос функции или реализовать его самостоятельно, а затем сделать запрос на перенос.

+0

Я попытался 'ВЫБРАТЬ у WHERE {PropertyValue (у, мой: имя, "Плутон" ^^ строка)}' , но я получаю следующее сообщение об ошибке: Character ")" ждут в SPARQL-DL запроса , (Рядом с "^^ строки", позы: 140, колонок: 52, строка: 2) – Andrea

+0

Для получения дополнительной информации, которую я вставить фрагмент моей игрушечной онтологии: '...... <Класс МРИ =» #Person "/> <Литеральный тип данныхIRI = "&xsd; strin g "> Pluto ' – Andrea

+0

Теперь вы забыли префикс 'xsd'. У вас есть «Плутон» ^^ строка', но это должно быть «Плутон» ^^ xsd: string'. Попробуйте 'SELECT? Y WHERE {PropertyValue (? Y, my: name," Pluto "^^ xsd: string)}' – AKSW