2016-05-05 4 views
1

У меня есть класс с именем WeatherPatterns, он имеет много подклассов, а подклассы имеют имена Individuals/Instances.Получите отношения между прямым и косвенным экземплярами класса?

Я хочу запрос sparql для извлечения всех экземпляров WeatherPatterns, которые имеют отношение друг к другу. Например, выходные тройки должны быть перечислены следующим образом.

Cloud produces Rain 
Rain causes Flood 

Как сделать запрос? спасибо заранее

+0

" подклассы/экземпляры WeatherPatterns, которые имеют отношение друг к другу, «подклассы и экземпляры - это не одно и то же. И обычно только экземпляры имеют отношения между ними; классов нет. Как в ваших данных вы говорите, что «облако производит дождь»? Без примера ваших данных мы не можем написать запрос, который извлекает из него информацию. –

ответ

3

Без ваших данных, мы не можем сделать точный запрос, но если вы ищете для отношений между вещами, которые являются прямыми или косвенными экземплярами WeatherPatterns, что это не так уж трудно:

select ?s ?p ?o { 
    #-- Make sure that ?s and ?o are 
    #-- instance of WeatherPatterns 
    #-- or its subclasses. 
    ?s a/rdfs:subClassOf* :WeatherPatterns . 
    ?o a/rdfs:subClassOf* :WeatherPatterns . 

    #-- Find relationships between 
    #-- ?s and ?o. 
    ?s ?p ?o . 
} 
?

пути свойства са/RDFS: subClassOf *: WeatherPatterns использует в в качестве стандартной аббревиатуры для ФРРА: типа, и матчи, когда s принадлежит к классу, который Relat? ed по цепочке rdfs: subClassOf Свойства: : WeatherPatterns. (Цепь может быть нулевой длины, что означает, что s является прямым экземпляром :. WeatherPatterns) Если вы хотите, чтобы объединить две проверки в один, вы также можете сделать:

:WeatherPatterns ^(a/rdfs:subClassOf*) ?s, ?o . 
+0

спасибо Джошуа, это сработало! –