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 ответа
Есть несколько способов игнорировать результаты, поэтому неясно, какой из них вы хотите использовать, тем более что некоторые из них совершенно очевидны. Вот два варианта:
- Как вы отметили его с Jena, используйте Java и игнорируйте ресурсы, чьи URI совпадают
owl:NamedIndividual
, - Использовать
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]") )
}