странные объявления пространств имен - PullRequest
1 голос
/ 16 марта 2012

Я использую 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 .

Там, где объявления пространств имен соответствуют ожиданиям.

Я также заметил, что меняю поведение при изменении имен OntClass с 616 на c616 и 123 на c123:

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>

и в формате 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#> .

myuri:c123
      a       owl:Class .

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

myuri:c616
      a       owl:Class .

Я что-то не так делаю? Может кто-нибудь объяснить это странное поведение? Спасибо!

1 Ответ

2 голосов
/ 16 марта 2012

Два префикса не используются и не влияют на «характер» вашего графа RDF.Так называемые «локальные имена» не могут начинаться с цифры, см .:

Два префикса в вашем первомпример (j.0 и j.1) на самом деле не используется, почему они вас так волнуют?

...