У меня есть вопрос: в sparql что делает префикс @:
@prefix : http://example.org/animals/
а зачем так писать?
У меня есть вопрос: в sparql что делает префикс @:
@prefix : http://example.org/animals/
а зачем так писать?
ответ Джин Брокстра правильный; @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, до которого он расширяется, одинакова. Строго говоря, префиксы предназначены для удобства человека; они не являются строго необходимыми.
«@PREFIX» ничего не делает в SPARQL, за исключением, возможно, генерации синтаксической ошибки.
Однако «PREFIX» (без «@») — это инструкция SPARQL для объявления префикса пространства имен. Это позволяет вам писать в запросах префиксные имена вместо использования полных URI. везде. Таким образом, это механизм удобства синтаксиса для более коротких и удобных для чтения (и написания) запросов.
@prefix <...>
— это не что иное, как синтаксическая ошибка в SPARQL. В комментарии к этому ответу вы упоминаете, что делаете что-то с Protégé. Если вы сможете уточнить, что вы делаете в Protégé, и где вы столкнулись с@prefix <...>
(возможно, со скриншотами из Protégé), возможно, вы сможете получить некоторые ответы, более близкие к тому, что вы хотите. - person Joshua Taylor   schedule 18.08.2013