迭代同一属性中的多个推理文字

时间:2018-01-12 03:08:34

标签: jena reasoning pellet

标题可能有点令人困惑,但基本上这就是问题所在:我使用 Jena Pellet推理器从名为的资源中生成属性文字Patient_Doug 。三重看起来像这样:  Patient_Doug-> hasSuggestion-> Literal推断出建议。

问题是Protege Pellet推理器 Doug 提出了三个建议,因为 Doug 在医院里的方式非常糟糕。 Protege推理器表明 Doug 需要 Hi-Lo bed RF ID频段靠近护士站的床铺。不幸的是,在 Jena 中,我只能打印 Hi-lo bed 。只有3个文字中的一个。

以下是一些代码。

    OntModel model = ModelFactory.createOntologyModel( PelletReasonerFactory.THE_SPEC );

    String ns = "http://altervista.org/owl/unit.owl#";
    String inputFile = "c:\\jena\\acuity.owl";  
    InputStream in = FileManager.get().open(inputFile);
    if (in == null) {
        throw new IllegalArgumentException("File: " + inputFile + " not found");
    }
    model.read(in,"");

    model.prepare();

    //inf and reasoner wont run unless i use hp libraries!

    //asserted data properties
    Individual ind = model.getIndividual(ns+"Patient_Doug");
    OntProperty abcValue = model.getOntProperty("http://example.org/hasABCValue");


    //inferred data properties
    OntProperty suggestion = model.getOntProperty(ns+"hasSuggestion");

    //print asserted data properties
    System.out.println("Properties for patient "+ind.getLocalName().toString());
    System.out.println( abcValue.getLocalName()+"= "+ind.getPropertyValue(abcValue).asLiteral().getInt());

    //print inferenced data properties      
    StmtIterator it = ind.listProperties(suggestion);

     //this iterator only prints one suggestion in an infinite loop
    while (it.hasNext()) {
        System.out.println("A posible suggestion= "+ind.getPropertyValue(suggestion).asLiteral().getString());
    }

    }

代码工作正常,但最后的迭代器只在无限循环中打印只有一个子消化

如果有任何建议,我将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:0)

此代码用于迭代和打印许多推断的hasSuggestions。 hasSuggestion SWRL规则在OWL本体

    OntModel model = ModelFactory.createOntologyModel( PelletReasonerFactory.THE_SPEC );

String ns = "http://altervista.org/owl/unit.owl#";
String inputFile = "c:\\jena\\acuity.owl";  
InputStream in = FileManager.get().open(inputFile);
if (in == null) {
    throw new IllegalArgumentException("File: " + inputFile + " not found");
}
model.read(in,"");

model.prepare();

//inf and reasoner wont run unless i use hp libraries!

//asserted data properties
Individual ind = model.getIndividual(ns+"Patient_Doug");
OntProperty abcValue = model.getOntProperty("http://example.org/hasABCValue");


//inferred data properties
OntProperty suggestion = model.getOntProperty(ns+"hasSuggestion");

//print asserted data properties
System.out.println("Properties for patient "+ind.getLocalName().toString());
System.out.println( abcValue.getLocalName()+"= "+ind.getPropertyValue(abcValue).asLiteral().getInt());

    for (StmtIterator j = ind.listProperties(suggestion); j.hasNext(); ) {
            Statement s = j.next();
            //System.out.println( "    " + s.getPredicate().getLocalName() + " -> " );
            System.out.println( "A possible suggestion... " + s.getLiteral().getLexicalForm());

        }