SPARQL Как узнать тип личности

Я сделал эту онтологию:

SensorOntology:MedicalCabinet-01 rdf:type owl:NamedIndividual ,
                                   SensorOntology:MedicalCabinetSensor ;
                          SensorOntology:hasId "57"^^xsd:int ;
                          SensorOntology:hasValue "0"^^xsd:int .

Я пытаюсь написать запрос, чтобы получить тип MedicalCabinet-01, который является MedicalCabinetSensor по указанному идентификационному номеру. Тем не менее, я печатаю сову: NamedIndividual и SensorOntology: MedicalCabinetSensor. В любом случае я печатаю только SensorOntology: MedicalCabinetSensor. Это мой запрос:

SELECT DISTINCT  ?sensor ?sensorclass
       WHERE {?sensor :hasId  "100"^^xsd:int.
              ?sensor rdf:type ?sensorclass}

2 ответа

Есть несколько способов игнорировать результаты, поэтому неясно, какой из них вы хотите использовать, тем более что некоторые из них совершенно очевидны. Вот два варианта:

  1. Как вы отметили его с Jena, используйте Java и игнорируйте ресурсы, чьи URI совпадают owl:NamedIndividual,
  2. Использовать FILTER в SPARQL, т.е. добавить FILTER(?sensorclass != owl:NamedIndividual) к графической структуре запроса SPARQL.

Действительно, есть несколько способов. Вот еще один:

SELECT DISTINCT  ?sensor ?sensorclass
WHERE {?sensor :hasId  "100"^^xsd:int.
              ?sensor rdf:type ?sensorclass

FILTER ( strstarts(str(?sensorclass), "[sensor ontology URI]") )

}
Другие вопросы по тегам