То, что вам нужно, это любой предмет, обладающий свойством owl:hasKey
, независимо от значения. Таким образом, и объект, и объект являются символами подстановки, вы просто хотите фильтровать по имени свойства. Способ сделать это так:
model.filter(null, OWL.HASKEY, null)
Теперь, кроме того, вы говорите, что хотите знать свойства, которые использовались в качестве аннотации, используя это свойство owl:hasKey
. В вашем примере это будет ex:isDataProperty
. Обратите внимание, что в вашей модели это не предмет отношения owl:hasKey
, а значения объекта:
model.filter(null, OWL.HASKEY, null).objects()
Чтобы еще больше усложнить ситуацию, значения объектов в вашем примере - это не просто отдельные значения. Вместо этого каждый класс аннотируется с помощью списка свойств, поэтому значением объекта является объект списка (например, коллекция RDF). Для обработки этого списка есть несколько служебных методов, предоставляемых классами Models
и RDFCollections
.
Для каждого из объектов вы можете сделать это, чтобы получить фактический список значений:
RDFCollections.asValues(model, objectNode, new ArrayList<Value>())
(где objectNode
- одно из значений, которые вернул .objects()
)
Редактировать , поскольку objects()
возвращает объекты типа Value
и RDFCollections
ожидает Resource
, вам придется либо выполнить приведение, либо, если вы хотите сделать все это бегло, вы можете использовать Models.objectResources
вместо. Все это становится:
Models.objectResources(model.filter(null, OWL.HASKEY, null))
.asScala.map(o => RDFCollections.asValues(model, o, new ArrayList[Value]()));
(у меня могут быть некоторые специфичные для Scala биты, но, надеюсь, вы понимаете суть)
Для получения дополнительной информации о работе с API модели rdf4j и с коллекциями RDF см. Документацию rdf4j .