【问题标题】:Turtle-RDF ontology (OWL) - is base re-use possible?Turtle-RDF 本体 (OWL) - 可以重用基础吗?
【发布时间】:2019-11-04 10:46:38
【问题描述】:

在 Turtle 中定义本体时不必复制完整的 IRI, 有没有办法重新使用@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 .

【问题讨论】:

  • &lt;&gt; a owl:Ontology . 应该可以工作,但: a owl:Ontology . 不行

标签: syntax owl turtle-rdf


【解决方案1】:

注意:@base 使用 &lt;...&gt; 为相关 IRI 提供前缀。所以在下面的例子中,&lt;Entity&gt; 扩展为&lt;http://my-url.com/ontologies/0.1/entity#Entity&gt;

您是从哪里得到这个想法的?不是这种情况。 @base 没有在 &lt;&gt; 之间添加前缀。 @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 .

其次,如果你在&lt;&gt;之间使用了一个非空字符串,并且它不是一个片段标识符,那么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 .

正确地说,这不是对您问题的直接回答,但应该足以让您做出正确的决定。

【讨论】:

  • 如果我将@base &lt;http://my-url.com/ontologies/0.1/entity#&gt; . 替换为@base &lt;http://my-url.com/ontologies/0.1/entity&gt; .(删除#),您的示例是否仍然有效,或者entity 部分是否会在所有相关IRI 中丢失?
  • 据我所知,@base 声明中的哈希确实没有任何区别。
【解决方案2】:

感谢the answer by Antonine Zimmermann, 我想出了这个解决方案:

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

我选择命名而不是空前缀,因为它使代码更具可移植性 并使用rdf2dot(可能还有其他工具)创建更好的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2020-12-21
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多