耶拿:属性名称无法解析为变量?

时间:2013-05-22 03:10:25

标签: rdf jena ontology protege

我正在使用Jena查询我的本体,我正在关注第8步:查询this tutorial的模型。此处查询的RDF文件 vc-db-1.rdf 是从步骤3:编写RDF 生成的,如下所示:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#" > 
  <rdf:Description rdf:nodeID="A0">
    <vcard:Family>Smith</vcard:Family>
    <vcard:Given>John</vcard:Given>
  </rdf:Description>
  <rdf:Description rdf:about="http://somewhere/JohnSmith">
    <vcard:N rdf:nodeID="A0"/>
    <vcard:FN>John Smith</vcard:FN>
  </rdf:Description>
</rdf:RDF>

示例代码为 tutorial 7 ,可以下载here

我注意到了

ResIterator iter = model.listResourcesWithProperty(VCARD.FN);

VCARD.FN 只是RDF的属性名,但不是我代码中定义的变量。但是,它可以在这里成功识别,代码运行没有任何问题。

但我自己的RDF文件不是这种情况。我用Protege创建了一个本体 pottery.owl ,并用RDF / XML语言保存。文件内容如下:

<?xml version="1.0"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
    xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:swrl="http://www.w3.org/2003/11/swrl#"
    xmlns="http://www.owl-ontologies.com/Ontology1369190090.owl#"
    xmlns:swrlb="http://www.w3.org/2003/11/swrlb#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xml:base="http://www.owl-ontologies.com/Ontology1369190090.owl" > 
  <rdf:Description rdf:about="">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Ontology"/>
  </rdf:Description>
  <rdf:Description rdf:about="#pottery">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
  </rdf:Description>
  <rdf:Description rdf:about="#pottery_instance_1">
    <rdf:type rdf:resource="#pottery"/>
    <pottery.colors rdf:datatype="http://www.w3.org/2001/XMLSchema#string">blue</pottery.colors>
  </rdf:Description>
  <rdf:Description rdf:about="#pottery.colors">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
    <rdfs:domain rdf:resource="#pottery"/>
  </rdf:Description>
</rdf:RDF>

<!-- Created with Protege (with OWL Plugin 3.4.8, Build 629)  http://protege.stanford.edu -->

本体包含一个类 pottery ,一个实例 pottery_instance_1 ,以及一个数据类型属性 pottery.colors

我在原始代码中修改了这些行:

static final String inputFileName = "pottery.owl";
// ...
ResIterator iter = model.listResourcesWithProperty(pottery.colors);
// ...
System.out.println("  " + iter.nextResource()
                              .getProperty(pottery.colors)
                              .getString());

这次我收到错误“陶器无法解析为变量。”

这里的诀窍是什么?它与两个RDF格式之间的差异有什么关系吗?或者是其他东西?谢谢。

1 个答案:

答案 0 :(得分:1)

VCARD是包com.hp.hpl.jena.vocabulary中的java类定义。它包含(现在,旧的)VCard词汇表中所有项目的Java常量。

如果您想从本体生成自己的类,请查看Jena附带的schemagen应用程序。