...
...
<owl:DatatypeProperty rdf:about="http://www.semanticweb.org/administrator/ontologies/2014/2/untitled-ontology-5#fileName">
<rdfs:label>fileName</rdfs:label>
<rdfs:comment>Name of File</rdfs:comment>
<rdfs:domain rdf:resource="http://www.semanticweb.org/administrator/ontologies/2014/2/untitled-ontology-5#File"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="http://www.semanticweb.org/administrator/ontologies/2014/2/untitled-ontology-5#fileLastAccessed">
<rdfs:label>fileLastAccessed</rdfs:label>
<rdfs:comment>Time when the file was last accessed.</rdfs:comment>
<rdfs:domain rdf:resource="http://www.semanticweb.org/administrator/ontologies/2014/2/untitled-ontology-5#File"/>
<rdfs:range rdf:resource="&xsd;dateTime"/>
</owl:DatatypeProperty>
...
...
以上是我在保护中开发的本体论的一部分。
您可以看到#fileName
属性的数据类型为&xsd;string
,#fileLastAccessed
的数据类型为&xsd;dateTime
我正在开发一个应用程序,我需要以编程方式读取属性的数据类型。
我的问题是我如何以编程方式知道属性的数据类型。
答案 0 :(得分:2)
正如您在示例本体中演示的那样,属性的范围由rdfs:range
/ rdf:Property
实例上的owl:DatatypeProperty
值指定。
假设您的Jena Model
包含示例中的数据:
final Property fileName = model.getResource("http://www.semanticweb.org/administrator/ontologies/2014/2/untitled-ontology-5#fileName")
.as(Property.class);
final StmtIterator definedRanges = fileName.listProperties(RDFS.range)
在前面的代码中,如果没有定义范围,definedRanges
将是一个空的迭代器。如果它非空,则应指明您的财产范围。如果您的属性是owl:DatatypeProperty
,则 应该是安全的,假设它指定了一个文字数据类型。