Sparql查询获取属于"属性类的子类的所有类"

时间:2015-06-05 17:05:59

标签: sparql semantic-web owl protege

我需要"注释"一些类通过向它们添加属性。我需要这样做,以便让我的应用程序的视图层提取正确的类。

我所做的是:

创建一个名为 uiProperty 的对象属性,并编辑这些类以使其成为此类的子类:

uiProperty some

所以我的类的最终OWL代码是这样的:

rdfs:subClassOf owebs:RealEstate ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty owebs:uiProperty ;
                                  owl:someValuesFrom owl:Thing
                                ] ;

现在我想构建一个sparql查询来获取这些类。我做了以下事情:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owbes: <http://www.isep.org/desco/2015/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT $uri $label WHERE {
    $uri rdfs:subClassOf owbes:RealEstate.
    $uri rdfs:subClassOf $x.
    $x owl:onProperty owbes:uiProperty.
    $uri rdfs:label $label
}

问题

该查询的结果是太多的类。同一个班级重复多次。例如:

enter image description here

我的问题

为什么会这样? 以及如何解决它?

1 个答案:

答案 0 :(得分:4)

  

我需要通过向它们添加属性来“注释”某些类。我需要   这样做是为了让我的应用程序的视图层提取   正确的课程。

这实际上是注释属性,例如rdfs:label,用于。您可以定义自己的注释属性,然后通过查询更直接地使用SPARQL检索类。例如,这是一个有三个特殊类的本体:

CREATE FUNCTION ufn_Last24Hrs
(
    @start DateTime2(7)
)
RETURNS @Result TABLE (d char(10), h int)
AS
BEGIN
    DECLARE @current DateTime2(7) = @start

    WHILE (@current > DateAdd(hour, -24, @start))
    BEGIN
        INSERT INTO @Result
        VALUES
        (
            REPLACE(CONVERT(char(10), @current, 102) , '.', '-'),
            DATEPART(hour, @current)
        )

        SET @current = DateAdd(hour, -1, @current)
    END

    RETURN;
END;
GO

SELECT * FROM ufn_Last24Hrs(SYSDATETIME());

SELECT 
    d,h,COUNT(1)cnt 
FROM 
    ufn_Last24Hrs(SYSDATETIME()) hrs
    left join msgs 
        ON msgs.d = hrs.d
        and msgs.h = hrs.h
WHERE dt>= DateAdd(hour, -24, SYSDATETIME()) 
GROUP BY d,h 
ORDER BY 1 DESC, 2 DES