Онтология Turtle-RDF (OWL) - возможно ли повторное использование базы? - PullRequest
0 голосов
/ 04 ноября 2019

Вместо того, чтобы копировать полный IRI при определении онтологии в Turtle, есть ли способ использовать вместо него @base, : или my-base:?

ПРИМЕЧАНИЕ: @base предоставляет префикс для относительных IRI с использованием <...>. Таким образом, в приведенном ниже примере <Entity> расширяется до <http://my-url.com/ontologies/0.1/entity#Entity>.

Могу ли я использовать любую из первых трех строк вместо 4-й строки снизу (<http://my-url.com/ontologies/0.1/entity>)?

@base          <http://my-url.com/ontologies/0.1/entity#> .
@prefix :      <http://my-url.com/ontologies/0.1/entity#> .
@prefix ent:   <http://my-url.com/ontologies/0.1/entity#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .

<http://my-url.com/ontologies/0.1/entity>
  a owl:Ontology .

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

ПРИМЕЧАНИЕ: @base предоставляет префикс для относительных IRI с использованием <...>. Таким образом, в приведенном ниже примере <Entity> расширяется до <http://my-url.com/ontologies/0.1/entity#Entity>.

Откуда вы взяли эту идею? Это не вариант. @base не имеет префикса между тем, что находится между < и >. @base определяет базовый IRI, по которому разрешаются относительные IRI. Разрешить относительные IRI сложнее, чем объединить две строки.

Во-первых, базовый IRI обязательно удаляется из его конечного # и любого идентификатора фрагмента. Итак, если вы напишите:

@base <http://my-url.com/ontologies/0.1/entity#> .
<> a owl:Ontology .

, вы имеете в виду:

<http://my-url.com/ontologies/0.1/entity> a owl:Ontology .

, вам придется явно добавить #, чтобы иметь его в IRI:

@base <http://my-url.com/ontologies/0.1/entity#> .
<#> a owl:Ontology .

означает:

<http://my-url.com/ontologies/0.1/entity#> a owl:Ontology .

Если вы хотите добавить непустой идентификатор фрагмента, вам также понадобится #:

@base <http://my-url.com/ontologies/0.1/entity#> .
<#Entity> a owl:Ontology .

означает:

<http://my-url.com/ontologies/0.1/entity#Entity> a owl:Ontology .

Во-вторых, если вы используете непустую строку между < и >, и она не является идентификатором фрагмента, то IRI создается путем избавления от локальной части базы, которая является любойпоявляются после последнего / пути IRI. Например,

@base <http://my-url.com/ontologies/0.1/entity#> .
<Entity> a owl:Ontology .

означает:

<http://my-url.com/ontologies/0.1/Entity> a owl:Ontology .

Другой пример:

@base <http://my-url.com/something/?uri=http://example.com/anything> .
<Entity> a owl:Ontology .

означает:

<http://my-url.com/something/Entity> a owl:Ontology .

Это не совсем правильноговоря, прямой ответ на ваш вопрос (ы), но должно быть достаточно, чтобы вы могли принять правильное решение.

0 голосов
/ 06 ноября 2019

Благодаря ответу Антонины Циммерманн я пришел к такому решению:

@base          <http://my-url.com/ontologies/0.1/entity> .
@prefix ent:   <#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .

<>
  a owl:Ontology .

ent:MyClass
  a owl:Class .

Таким образом, я могу использовать как @base, так и названный префикс ent:без необходимости повторять базовый IRI.

Я выбрал именованный префикс пустым, потому что он делает код более переносимым и создает более приятный вывод с помощью rdf2dot (и, возможно, других инструментов).

...