遍历本体属性的方法说明

Posted on 2011-09-02 08:38  语义网博客  阅读(315)  评论(0)    收藏  举报

通过model的liststatement获取的是所有在该本体文件中的所有断言statement
然后一个断言都是由主谓宾的形式存在的
通过statement的方法可以获取所有的
s : getSubject() 返回一个Resource  extends RDFNode
p : getPredicate() 返回一个Property extends Resource extends RDFNode
o : getObject() 返回一个RDFNode

例如:
        <owl: DatatypeProperty rdf:about="#age">

                <rdfs:domain rdf:resource="#staff"/>

                <rdfs:range rdf:resource="&xsd;integer"/>

        </owl: DatatypeProperty>

该范例中:
如果通过一个model的liststatement来获取的所有断言,那么其中就包含了

liststatement获取的statement
  针对一个sta:name资源就大概包括如下三个statement:
  sta:name rdf:type owl:datatypeProperty
  sta:name rdf:range owl:string
  sta:name rdf:domain sta:staff

所以在第一次循环的时候就可以name这个属性获取主谓宾时,主语获取3次,
谓语获取3次,宾语获取3次,以下是分别3次获取到的数据
代码:
        StmtIterator iterator = model.listStatements();
        List<String> strlist=new ArrayList<String>();
        Statement node;
        Resource s;
        Property p;
        RDFNode o;
        //假设获取到sta:name 这个statement的时候
        while(iterator.hasNext()){
                        node=iterator.next(); //获取到的statement
                        s = node.getSubject(); //3次都是name
                        p = node.getPredicate(); // type range domain 3次
                        o=node.getObject(); //datatypeProperty string staff 3次
        }


需要保存的结果是:
        同一个主语:
        获取谓语为type 断言的主语,主要为了找到具体哪个owl类型的属性,例如:datatypeproperty或者是ObjectProperty
        获取谓语为range 断言的宾语 主要是为了获取如 string,integer之类的类型


while虚拟循环: 分别每个statement所表示的断言如下  注意:对照上面代码中的 s p o,主要看sta:name
  ...
  sta:age rdf:type owl: DatatypeProperty       
  sta:name rdf:type owl: datatypeProperty
  sta:name rdf:domain sta:staff
  sta:address rdf:type owl: DatatypeProperty
  sta:name rdf:range owl:string
  ...
可以看出单主语为name的时候是作为循环的3次出现的,由于出现的顺序不是一定的,
所以不能进行当主语为name,谓语为rdf:type的时候 记录主语
然后在当循环到主语为name谓语为range的时候记录宾语

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3