2

我知道我可以使用 来从我的模型中检索现有属性model.getProperty,例如:

Model model;
Property description_property = model.getProperty(NS.dcterms + "description");

但是假设我没有可用的模型,但想创建一个我被迫使用的本地模型:

Property descriptionProperty= 
               ResourceFactory.createProperty(NS.dcterms + "description");

有人可以很好地解释何时以及为什么使用model.getPropertyvsResourceFactory.createProperty及其含义。

4

1 回答 1

3

这两种形式实际上几乎是等价的。主要区别在于,当您执行 amodel.getXXX以获取属性或资源对象时,该对象随后包含一个指向创建它的模型的指针。这可能会有所帮助,因为在 Jena 中,实际上只有模型对象保持状态。Java 类如ResourceProperty表示资源和属性标识,但真正的内容是Statement模型中的三元组(即 s)。

具体来说,如果您执行以下操作:

Resource s = ... ;
Property p = ... ;
RDFNode o = ... ;
p.getModel().addStatement( s, p, o );

这将在您的第一种情况下成功(即 with Model.getProperty)并在第二种情况下失败(即ResourceFactory),因为在第二种情况下getModel()将返回null。但是,这是否是您的应用程序中的实际问题,只有您可以说。老实说,我认为这在我的代码中并不是什么大问题。

顺便说一句,您可能想知道 Jena 有一个名为schemagen的实用程序,它可以自动生成 Java 源代码,其中包含与您的本体中的类、属性和个体相对应的常量。它比在代码中手动创建此类常量更清晰、更易于维护。

于 2013-08-07T21:35:16.970 回答