2012-03-16 117 views
1

我使用jena 2.6.4,并且我注意到命名空间有一个奇怪的行为。我使用下面的代码:奇怪的命名空间声明

public static void main(String[] args) { 
    String myUri = "http://www.example.com/1.0/myUri#"; 
    OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); 

    model.setNsPrefix("myuri", myUri); 

    OntClass c616 = model.createClass(myUri + "616"); 
    OntClass c123 = model.createClass(myUri + "123"); 

    Individual a = c616.createIndividual(myUri + "a"); 
    a.addOntClass(c123); 

    model.write(System.out); 
} 

输出是:

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:j.0="http://www.example.com/1.0/myUri#616" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:j.1="http://www.example.com/1.0/myUri#123" 
    xmlns:myuri="http://www.example.com/1.0/myUri#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" > 
    <rdf:Description rdf:about="http://www.example.com/1.0/myUri#123"> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://www.example.com/1.0/myUri#a"> 
    <rdf:type rdf:resource="http://www.example.com/1.0/myUri#123"/> 
    <rdf:type rdf:resource="http://www.example.com/1.0/myUri#616"/> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://www.example.com/1.0/myUri#616"> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/> 
    </rdf:Description> 
</rdf:RDF> 

我不明白,为什么下面的命名空间声明:

xmlns:j.0="http://www.example.com/1.0/myUri#616" 
xmlns:j.1="http://www.example.com/1.0/myUri#123" 

奇怪的是,如果我改变序列号为TURTLE(model.write(System.out, "TURTLE");),然后我得到如下输出:

@prefix myuri: <http://www.example.com/1.0/myUri#> . 
@prefix owl:  <http://www.w3.org/2002/07/owl#> . 
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 

<http://www.example.com/1.0/myUri#123> 
     a  owl:Class . 

myuri:a 
     a  <http://www.example.com/1.0/myUri#123> , <http://www.example.com/1.0/myUri#616> . 

<http://www.example.com/1.0/myUri#616> 
     a  owl:Class . 

其中名称空间声明符合我的预期。

public static void main(String[] args) { 
    String myUri = "http://www.example.com/1.0/myUri#"; 
    OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); 

    model.setNsPrefix("myuri", myUri); 

    OntClass c616 = model.createClass(myUri + "c616"); 
    OntClass c123 = model.createClass(myUri + "c123"); 

    Individual a = c616.createIndividual(myUri + "a"); 
    a.addOntClass(c123); 

    model.write(System.out); 
} 

输出:

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:myuri="http://www.example.com/1.0/myUri#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" > 
    <rdf:Description rdf:about="http://www.example.com/1.0/myUri#c123"> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://www.example.com/1.0/myUri#a"> 
    <rdf:type rdf:resource="http://www.example.com/1.0/myUri#c123"/> 
    <rdf:type rdf:resource="http://www.example.com/1.0/myUri#c616"/> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://www.example.com/1.0/myUri#c616"> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/> 
    </rdf:Description> 
</rdf:RDF> 

和乌龟格式:

@prefix myuri: <http://www.example.com/1.0/myUri#> . 
@prefix owl:  <http://www.w3.org/2002/07/owl#> . 
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 

myuri:c123 
     a  owl:Class . 

myuri:a 
     a  myuri:c123 , myuri:c616 . 

myuri:c616 
     a  owl:Class . 

改变OntClass名从616c616123c123的时候我也注意到我不同的行为

我做错了什么?有人能解释这种奇怪的行为吗? 谢谢!

回答

2

这两个前缀不会被使用,也不会影响RDF图的“性质”。 所谓 'localnames' 不能以数字开头,请参阅:

在你的第一个例子中的两个前缀(J.0和J. 1)不实际使用,为什么他们关心你这么多?

+0

我不知道本地名称不能以数字开头:感谢您的链接!我关心的是(i)理解为什么这些名称空间是由jena添加的(如果它们不被使用),以及(ii)它们为什么只出现在RDF/XML序列化中。无论如何,我认为我的外卖课是我不能使用以数字开头的本地名称:) – MarcoS 2012-03-19 09:11:34