循环本身很好。您拨打.localName()
的电话将取出URI(通常是)prefix:name
qname对的名称部分的URI部分。这通常是一个有意义的字符串,如myontology:Wheel
或myontology:Truck
,但它在RDF标准中没有正式定义,并且严格来说,RDF将整个URI视为没有任何内部结构的单个标记。
当您在代码中处理本体时,资源(或类,属性,个人等)的URI就是您需要引用该资源的内容。但是,通过某种用户界面将资源呈现给人类时,您需要更易读的东西。在RDF中有很多约定(不幸的是,这是约定的复数)。通常情况下,你会发现连接到资源的以下属性中的一个或多个:
rdfs:label
- 通常用于紧凑可读的名字
rdfs:comment
- 通常用于更长,更具描述性术语
skos:prefLabel
- '优选' 标签
skos:altLabel
- '替代' 标签
大多数本体或数据集将使用任一rdfs:comment
和rdfs:label
,或SKOS条款。有些会使用两者。请记住,标签可能有语言标记的变体,以及:
<http://example.org/terms#Cat>
a owl:Class ;
rdfs:label "cat"@en ;
rdfs:label "chat"@fr ;
rdfs:comment "denotes the set of all cats"@en ;
rdfs:comment "désigne l'ensemble de tous les chats"@fr .
那么门徒会做的是希望看到这些属性都在本体中使用被编辑,选择一个较好的,然后显示它。你可以做同样的,例如:
OntClass oc = model.getOntClass(NS + "ClassName");
for (ExtendedIterator<? extends OntResource> i = oc.listInstances(); i.hasNext();)
{
OntResource or = i.next();
Property labelProp = null;
if (or.hasProperty(RDFS.label)) {
labelProp = RDFS.label;
}
else if (or.hasProperty(SKOS.prefLabel)) {
labelProp = SKOS.prefLabel;
}
// note: does not deal with lang tags
String label = (labelProp != null) ? or.getProperty(labelProp).getString() : "unknown";
System.out.println("Resource " + or.getURI() + " is labelled: " + label);
}
@Alexis鸽子 好,严重的是,什么是对努力是很好的问题? 我知道没有人有义务帮助我或什么,这就是为什么我想说,感谢任何人困扰....为什么你必须纠正? – missrg