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

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

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

Могу ли я использовать любую из первых трех строк вместо четвертой снизу (<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 .

person hoijui    schedule 04.11.2019    source источник
comment
<> a owl:Ontology . должен работать, но : a owl:Ontology . нет   -  person UninformedUser    schedule 04.11.2019


Ответы (2)


ПРИМЕЧАНИЕ. @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 создается путем избавления от локальной части базы, которая появляется после последнего / пути. ИРИ. Например.,

@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 .

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

person Antoine Zimmermann    schedule 04.11.2019
comment
Если я заменю @base <http://my-url.com/ontologies/0.1/entity#> . на @base <http://my-url.com/ontologies/0.1/entity> . (удалив #), ваши примеры по-прежнему будут работать так же, или часть entity будет отсутствовать во всех относительных IRI? - person hoijui; 05.11.2019
comment
Насколько я знаю, хеш в объявлении @base действительно не имеет никакого значения. - person Antoine Zimmermann; 06.11.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: без необходимости повторять base-IRI.

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

person hoijui    schedule 06.11.2019