То, что вам нужно, — это любой предмет, который имеет свойство 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. а>.
person
Jeen Broekstra
schedule
11.07.2019
model.filter(null, RDF.PROPERTY, OWL.HASKEY)
? Я имею в виду, что сам предикатOWL.HASKEY
, поэтому он должен бытьmodel.filter(null, OWL.HASKEY, null)
, чтобы получить все триплеты с этим предикатом. - person UninformedUser   schedule 10.07.2019ex:Article owl:hasKey ( ex:isDataProperty ) .
- это также означает, что само свойство является объектом в тройке, которая на самом деле является списком, поскольку может быть составным ключом в OWL. Таким образом,model.filter(null, OWL.HASKEY, null).objects()
приведет к узлам, представляющим коллекции RDF. Как обратно преобразовать эти коллекции RDF, можно найти здесь: rdf4j.eclipse.org /documentation/programming/model/ — поэтому используйтеRDFCollections.asValues
илиRDFCollections.getCollection
с аргументами - person UninformedUser   schedule 10.07.2019