что делает @prefix в sparql?

У меня есть вопрос: в sparql что делает префикс @:

@prefix : http://example.org/animals/

а зачем так писать?


person sima412    schedule 17.08.2013    source источник
comment
ответ Джин Брокстра правильный; @prefix <...> — это не что иное, как синтаксическая ошибка в SPARQL. В комментарии к этому ответу вы упоминаете, что делаете что-то с Protégé. Если вы сможете уточнить, что вы делаете в Protégé, и где вы столкнулись с @prefix <...> (возможно, со скриншотами из Protégé), возможно, вы сможете получить некоторые ответы, более близкие к тому, что вы хотите.   -  person Joshua Taylor    schedule 18.08.2013


Ответы (2)


ответ Джин Брокстра правильный; @prefix <...> не является допустимым синтаксисом SPARQL и приведет только к синтаксическим ошибкам. Однако аналогичная конструкция используется в сериализациях RDF для Turtle и N3. В этих синтаксисах код

@prefix animals: <http://example.org/animals/>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.

animals:Moose rdfs:subClasof animals:Animal

граф с единственной тройкой:

<http://example.org/animals/Moose> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://example.org/animals/Animal>

Строки @prefix определяют префиксы, упрощающие обращение к IRI при сериализации графа. В SPARQL также есть объявления префиксов, но синтаксис немного отличается. В запросе SPARQL нет @ в начале строки и нет . в конце строки. Итак, продолжая приведенный выше пример, вы можете запросить все вещи подклассов animal:Animal с помощью следующего запроса:

prefix an: <http://example.org/animals/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?subclass where { 
  ?subclass rdfs:subClassOf an:Animal
}

Обратите внимание, что в первой сериализации мы использовали animals:, но в запросе SPARQL мы использовали an: с тем же префиксом. Конкретный префикс не имеет значения, если фактический (часть) URI, до которого он расширяется, одинакова. Строго говоря, префиксы предназначены для удобства человека; они не являются строго необходимыми.

person Joshua Taylor    schedule 18.08.2013

«@PREFIX» ничего не делает в SPARQL, за исключением, возможно, генерации синтаксической ошибки.

Однако «PREFIX» (без «@») — это инструкция SPARQL для объявления префикса пространства имен. Это позволяет вам писать в запросах префиксные имена вместо использования полных URI. везде. Таким образом, это механизм удобства синтаксиса для более коротких и удобных для чтения (и написания) запросов.

person Jeen Broekstra    schedule 17.08.2013
comment
Джин Брокстра Спасибо. но @prefix : ‹example.org/animals› — это первый код в моем проекте, который я хочу выполнить этот код (в протеже), но выдает мне ошибку. я не знаю, что это. - person sima412; 18.08.2013