在表示法3中定义类层次结构

时间:2015-07-20 05:58:53

标签: class dotnetrdf n3

我正在尝试开发一个简单的Notation3本体文件。

到目前为止,我在notation3文件中的代码是

@prefix my: <http://www.codeproject.com/KB/recipes/n3_notation#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .



my:batterycs a my:spec;
    my:preferedby my:BusinessPerson, my:LoveBird, my:MusicLover, my:Travelar;

    my:name "batteryCS".

    rdfs:Person a rdfs:Class.

我使用dotNetRdf库来读取和查询本体文件。 n3文件中的上述代码工作正常。但是当我插入

 rdfs:Woman a rdfs:Class; rdfs:subClassOf :Person .

在本体文件的末尾发生错误Unable to resolve the QName ':Person'似乎甚至无法将本体加载到解析器。

我从http://www.w3.org/2000/10/swap/Primer.html研究了n3语法 我可以帮助我解决这个问题 提前谢谢

1 个答案:

答案 0 :(得分:1)

您的数据无效,您需要定义空前缀才能在QName中引用它,例如:Person

QName(限定名称)是一种语法快捷方式,允许您缩短以prefix:name形式编写的URI,其中prefix必须引用通过先前@prefix定义的已定义的名称空间前缀声明。然后,解析器只需查找前缀并将其与name部分连接起来,因此例如rdfs:Class在示例数据中扩展为http://www.w3.org/2000/01/rdf-schema#Person

如果未定义前缀,则预期RDF解析器会抛出错误。

因此,您需要修复数据,根据您的意图,有几种方法可以执行此操作。

您的意思是将:Person放在您自己的my:命名空间

只需将:Person替换为my:Person

即可

请注意,您还提到了rdfs:Person,因此您的数据看起来有点不一致

您打算定义一个空命名空间

只需添加以下@prefix定义:

@prefix : <http://example.org/namespace#> .

URI是所需的名称空间URI

<强>除了

您使用的是哪种版本的dotNetRDF?并且是您引用完整错误消息的错误消息吗?

dotNetRDF的更新版本应该提供更多信息性错误消息,应该告诉您可能缺少前缀声明