0

次のクラスと DataType プロパティを含む Jena API を使用してオノロジーを作成しました。

public class Onto {
 OntClass USER,...;

 OntModel model;

        String uriBase;
        DatatypeProperty Name,Surname,..;
 ObjectProperty has_EDUCATION_LEVEL;
public Onto (){
            model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF );
            uriBase = "http://www.something.com/";
            model.createOntology(uriBase);

            //Classes
 USER=model.createClass(uriBase+"USER");

...

   //DatatTypesProperties   
            Name= model.createDatatypeProperty(uriBase+"Name"); 
            Name.setDomain(USER_AUTNENTIFICATION);
            Name.setRange(XSD.xstring);

Surname= model.createDatatypeProperty(uriBase+"Surname"); 
            Surname.setDomain(USER_AUTNENTIFICATION);
            Surname.setRange(XSD.xstring);
...

   //ObjectProperties
            has_EDUCATION_LEVEL= model.createObjectProperty(uriBase+"has_EDUCATION_LEVEL");
            has_EDUCATION_LEVEL.setDomain(USER);
            has_EDUCATION_LEVEL.setRange(EDUCATION_LEVEL);}

次に、Web を介して DataType プロパティの「名前」と「姓」の値を挿入した「USER」クラスのインスタンスを作成しました。私のコードの出力は .owl ファイルですが、Protege でそれを読むと、すべての Data Properties 、Object Properties 、さらにはクラスに 2 つの接頭辞 j.1 と j.0 が含まれていることがわかりました。OWL ファイルのインスタンスのコードは次のとおりです。

 <j.1:USER rdf:about="http://www.something.com/#Jhon">
    <j.0:has_EDUCATION_LEVEL rdf:resource="http://www.something.com/HIGH_EDUCATION_LEVEL"/>
    <j.0:Surname>Smith</j.0:Surname>
    <j.0:Name>Jhon</j.0:Name>
  </j.1:USER>

私はどんな助けや提案にも感謝します

4

1 に答える 1

2

RDF/XML ドキュメントの冒頭のどこかに、接頭辞j.1j.0が適切に定義されていることがわかります。これhttp://www.something.com/has_EDUCATION_LEVELは と同じj.0:has_EDUCATION_LEVELです。Jena はプロパティ URI を変更するようなことはしていません。そのため、モデルを読み戻したり、他の人に送信したりしても、まったく同じデータが表示されます。使用されるプレフィックスは、XML テキストを読む人間にとってのみ重要です。

つまり、Jena モデルはPrefixMappingsetNsPrefixであるため、モデルを記述するときに使用される名前とプレフィックスを定義するために使用できます。あなたが提供したデータに大まかに基づいた例を次に示します。

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.rdf.model.Resource;

public class PrefixDemo {
  public static void main(String[] args) {
    Model model = ModelFactory.createDefaultModel();
    String base = "http://www.something.com/";

    Resource john = model.createResource( base + "John" );
    Property hasSurname = model.createProperty( base + "hasSurname" );

    model.add( john, hasSurname, "Smith" );

    // Before defining a prefix
    model.write( System.out, "RDF/XML" );

    // After defining a prefix
    model.setNsPrefix( "something", base );
    model.write( System.out, "RDF/XML" );
  }
}

出力 (モデル間に追加の改行を含む) は次のとおりです。

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:j.0="http://www.something.com/" > 
  <rdf:Description rdf:about="http://www.something.com/John">
    <j.0:hasSurname>Smith</j.0:hasSurname>
  </rdf:Description>
</rdf:RDF>

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:something="http://www.something.com/" > 
  <rdf:Description rdf:about="http://www.something.com/John">
    <something:hasSurname>Smith</something:hasSurname>
  </rdf:Description>
</rdf:RDF>

モデルを初めて印刷すると、自動的に生成された名前空間プレフィックスが表示されますj.0。ただし、接頭辞を明示的に定義すると、2 番目の例のように使用されます。

于 2013-05-17T02:45:42.043 に答える