2012-03-16 97 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