如何以编程方式通过使用Jena Ontology API将数值注入RDF图中的节点来计算路径长度?

时间:2013-08-13 11:20:59

标签: rdf semantic-web jena

根据前面提出的问题(How can I programmatically compute path length using Jena RDF/Ontology API?)构建,我需要将一个数值(例如3.5)乘以一个特定的类(它的类大小,如前一个问题中所详述)并且能够计算RDF图中的总路径长度。请注意,落在此特定节点下的每个路径都将生成新的路径权重结果。

我尝试做的是创建一个名为nValue的方法并将classSize传递给它,然后将此数值变量添加到pathSize方法中以计算{ {1}},方法如下:

pathLength

然后尝试在public static double nValue (int classWeight, double nv ) { double numValue = classWeight*nv; if ( nv < 1 ){ numValue = 1.0; } return numValue; } 方法中调用此方法来徒劳。我的问题是我是耶拿的新手。所以我在RDF图中获取单个类并对其执行乘法并将其与pathSize计算结合起来时遇到问题。

1 个答案:

答案 0 :(得分:0)

上一个问题的答案代码是

public static int classSize( final Resource klass ) {
    return klass.getModel().listSubjectsWithProperty( RDFS.subClassOf, klass ).toList().size();
}

public static double pathSize( final List<Resource> path ) {
    int prevSize = classSize( path.get( 0 )); 
    double pathSum = prevSize;
    for ( int i = 1; i < path.size(); i++ ) {
        int currSize = classSize( path.get( i ));
        double linkWeight = currSize < prevSize ? 0.5 : 1.0;
        pathSum += linkWeight + currSize;
        prevSize = currSize;
    }
    return pathSum;
}

我不清楚你要做的是什么,但听起来你正试图调整currSize中某些类的pathSize(即值由path.get( i )返回,但你在比较该类是否是应该发生的类之一时遇到了麻烦。如果我理解正确,你可以这样做:

private static Resource specialClass = ResourceFactory.createResource( "http://.../specialClass" );

public static double pathSize( final List<Resource> path ) {
    // ...
    for ( int i = 1; i < path.size(); i++ ) {
        final Resource klass = path.get( i );
        int currSize = classSize( klass );
        if ( specialClass.equals( klass ) ) {      // When klass is specialClass
          currSize = ...; // something different   // do the additional modification
        }
        // ...
    }
    // ...
}