JENA RDF / XML格式的rdfs示例

时间:2013-11-25 13:32:17

标签: java rdf jena rdfs

有人可以给我一个工作示例(在Java代码中)如何使用Jena创建如下所示的RDFS相关语句?

<rdf:Property rdf:about="http://www.help.me/confused/PropertyName">
    <rdfs:domain rdf:resource="http://www.help.me/confused/ClassName"/>
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>

我手动创建了一个RDF / XML模式,它验证了正确但不知何故实体在SPARQL中不能一起工作(即使启用了推理引擎)。所以,我决定从一开始就使用Jena API来创建整个事情,以确保它是正确的。

1 个答案:

答案 0 :(得分:3)

我已经改变了命名空间,只是为了让这段代码最终指向这篇文章,但无论如何,我得到了这个输出:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <rdf:Property rdf:about="http://stackoverflow.com/q/20194409/1281433/PropertyName">
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
    <rdfs:domain rdf:resource="http://stackoverflow.com/q/20194409/1281433/ClassName"/>
  </rdf:Property>
</rdf:RDF>

来自此代码:

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.vocabulary.RDFS;

public class JenaPropertyExample {
    public static void main(String[] args) {
        final String NS = "http://stackoverflow.com/q/20194409/1281433/";
        final Model model = ModelFactory.createDefaultModel();

        final Property p = model.createResource( NS+"PropertyName", RDF.Property ).as( Property.class );
        p.addProperty( RDFS.domain, model.createResource( NS+"ClassName" ));
        p.addProperty( RDFS.range, RDFS.Literal );

        model.write( System.out, "RDF/XML-ABBREV" );
    }
}

通常,仅仅因为输出是合法的RDF并不意味着您正在以预期的方式使用属性和类。 Jena的普通Model界面无法帮助你,因为你仍然可以错误地使用这些属性,但至少,如果你使用Jena预定义的词汇表类,你将获得正确的IRI。如果你可以使用OntModel,你可以获得一个稍微好一点的抽象层。例如,以下方法生成相同的RDF / XML输出,但允许您使用createOntProperty之类的方法并免费获取p rdf:type rdf:Property三元组,以及addRangeaddDomain等方法:

public static void main2( String[] args ) {
    final String NS = "http://stackoverflow.com/q/20194409/1281433/";
    final OntModel model = ModelFactory.createOntologyModel( OntModelSpec.RDFS_MEM );
    OntProperty p = model.createOntProperty( NS+"PropertyName" );
    p.addDomain( model.getOntClass( NS+"ClassName" ));
    p.addRange( RDFS.Literal );
    model.write( System.out, "RDF/XML-ABBREV" );
}