иерархия классов Notation3

у меня есть простая онтология notation3

@prefix my: <http://www.codeproject.com/KB/recipes/n3_notation#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .



    my:spec a rdfs:Class.
    my:security a rdfs:Class; rdfs:subClassOf my:spec .

    my:bluetooth a my:security;
    my:preferedby my:BusinessPerson;
    my:name "bluetooth".

Я пытаюсь определить класс spec и определить класс security как подкласс spec.

это мой запрос sparql, который я использую с помощью библиотеки dotNetRdf

PREFIX my: <http://www.codeproject.com/KB/recipes/n3_notation#>
SELECT ?name
WHERE {
    [ a my:spec;
        my:preferedby my:BusinessPerson;
        my:name ?name].
}";

в соответствии с иерархией классов этот запрос должен возвращать «Bluetooth» в качестве ответа, поскольку security является подклассом spec (насколько мне известно). но пока никакого результата. может ли кто-нибудь помочь мне с этим, где я сделал свою ошибку? заранее спасибо


person Ravindu Kottahachchi    schedule 22.07.2015    source источник


Ответы (1)


Я пытаюсь определить спецификацию класса и определить класс безопасности как подкласс спецификации.

Я думаю, что вы сделали эту часть правильно.

в соответствии с иерархией классов этот запрос должен возвращать «Bluetooth» в качестве ответа, поскольку безопасность является подклассом спецификации (насколько мне известно).

Чтобы сделать вывод о том, что экземпляр, который, как утверждается, имеет тип security, также является экземпляром типа spec, вам потребуется как минимум вывод RDFS. SPARQL не предоставляет этого напрямую, хотя многие конечные точки и тройные хранилища могут иметь некоторую поддержку для этого. Однако некоторые базовые формы вывода могут быть закодированы с помощью SPARQL, и в этом случае вы можете заставить свой запрос работать. Вам просто нужно настроить свой запрос (и добавить префикс rdfs:):

SELECT ?name WHERE {
    [ a rdfs:subClassOf*/my:spec;
        my:preferedby my:BusinessPerson;
        my:name ?name].
}

Это буквально говорит о том, что вы хотите найти экземпляр класса C, где C соединен цепочкой ссылок rdfs:subClassOf нулевой или более длины с my:spec. В данном случае это означает все, что является либо ценной бумагой, либо спецификацией.

Для получения дополнительной информации о выводе RDFS и OWL в SPARQL вам могут быть полезны некоторые из этих вопросов и ответов:

person Joshua Taylor    schedule 22.07.2015
comment
Первый тройной паттерн выглядит странно, значит, проблема с форматированием? - person UninformedUser; 22.07.2015
comment
@Joshua Taylor Я изменил свой запрос в соответствии с вашими инструкциями, он показывает ошибку «VDS.RDF.Parsing.Tokens.MultiplyToken» Токен, который действителен только после предиката для указания мощности пути - person Ravindu Kottahachchi; 23.07.2015
comment
@ Джошуа Тейлор, должен ли я изменить пространство имен rdfs: на мое и оставить только пространство имен my:? - person Ravindu Kottahachchi; 23.07.2015