SPARQL-запрос для поиска всех подклассов и суперкласса данного класса - PullRequest
4 голосов
/ 26 сентября 2011

Мне нужно написать SPARQL-запрос, чтобы найти суперкласс / подклассы данного класса.

Например, для данного файла словаря http://139.91.183.30:9090/RDF/VRP/Examples/Phenomenon.rdf RDFS я хочу найти суперкласс 'AcousticWave'(это «Волна»).

Точно так же, если пользователь вводит «Волна», я хочу получить все подклассы «Волны» (это «AcousticWave», «GravityWave», «InternalWave» и Tide).').

enter image description here

Как написать такой запрос SPARQL?

1 Ответ

11 голосов
/ 26 сентября 2011

Предикат, используемый в rdfs для отношений подкласса / суперкласса состояния, равен rdfs:subClassOf.Имея это в виду, вам просто нужно написать тройные шаблоны в запросе SPARQL, которые связывают этот предикат и тему или объект, которому вы хотите соответствовать --- AcousticWave в вашем случае.

Я надеюсь, что следующеезапросы не требуют пояснений.

для суперклассов ...

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ns: <http://www.domain.com/your/namespace/>

SELECT ?superClass WHERE { ns:AcousticWave rdfs:subClassOf ?superClass . }

И для подклассов ...

SELECT ?subClass WHERE { ?subClass rdfs:subClassOf ns:Wave . }

Если вы хотите получить меткидля каждого подкласса ns:Wave вы должны сделать что-то вроде ...

SELECT ?subClass ?label WHERE { 
        ?subClass rdfs:subClassOf ns:Wave . 
        ?subClass rdfs:label ?label . 
}

Если вам нужно транзитивное замыкание подклассов / суперклассов, тогда у вас есть два варианта:

  1. Итеративно повторяйте эти запросы до тех пор, пока не соберете замыкание.
  2. Передайте данные RDF через рассуждение RDF / RDFS, чтобы переадресовать цепочки всех соединений и утвердить их в базе данных RDF.
...