[a :Foo] :p [a :Bar]
не влечет за собой :p rdfs:domain :Foo; rdfs:range :Bar
. Это должно быть правило уровня RDFS, и такого правила нет .
Вы должны прямо сказать:
:p rdfs:domain :Foo .
:p rdfs:range :Bar .
Тогда вы получите что-то вроде этого image .
Кстати, при построении графа диапазона доменов, GraphDB выполняет следующий запрос:
SELECT DISTINCT ?prop ?propertyType ?objectPropClass (?c != :Bar as ?implicit) {
{
:Bar rdfs:subClassOf ?c
}
UNION
{
VALUES ?c { :Bar }
}
{
?prop a owl:ObjectProperty ;
rdfs:domain ?c ;
rdfs:range ?objectPropClass ;
rdfs:domain ?objectPropClass ;
rdfs:range ?c .
BIND ("objectLeftRight" as ?propertyType)
BIND (1 as ?order)
}
UNION
{
?prop a owl:ObjectProperty ;
rdfs:domain ?c ;
rdfs:range ?objectPropClass .
BIND ("objectRight" as ?propertyType)
BIND (2 as ?order)
}
UNION
{
?prop a owl:DatatypeProperty ;
rdfs:domain ?c .
BIND ("datatype" as ?propertyType)
BIND (3 as ?order)
}
UNION
{
?prop a owl:ObjectProperty ;
rdfs:domain ?objectPropClass ;
rdfs:range ?c .
BIND ("objectLeft" as ?propertyType)
BIND (4 as ?order)
}
FILTER(?objectPropClass != :Bar || ?propertyType != "objectRight"
&& ?propertyType != "objectLeft")
} ORDER BY ?order ?objectPropClass ?prop
Обновление
... после быстрого просмотра документов я понял, что GraphDB провел своего рода анализ, основанный на фактическом использовании свойств с экземплярами классов.
Похоже, что представление Связи классов предоставляет такую информацию на левой панели.
Кроме того, вы можете создать свою визуальную конфигурацию графика. Я смог CONSTRUCT
это изображение: