如何检索OWL枚举数据类型表达式的元素?

时间:2016-05-05 11:58:52

标签: sparql rdf owl

我应该使用什么SPARQL查询来显示两种数据类型的union的所有值?另外,我如何计算此数据类型联合中的值的数量?每种数据类型都使用SELECT NON EMPTY [Measures].[Internet Sales Amount] ON 0 ,NON EMPTY { Order ( { [Customer].[Customer Geography].[COUNTRY].MEMBERS , [Customer].[Customer Geography].[COUNTRY].&[GERMANY].CHILDREN } ,( [Measures].[Internet Sales Amount] ,[Customer].[Customer Geography].[COUNTRY] ) ,BDESC ) } ON 1 FROM [Adventure Works]; 公理定义。

编辑:从某事开始:我应该使用什么SPARQL查询来显示所选数据类型的所有值?

1 个答案:

答案 0 :(得分:3)

将来,如果您能提供我们可以使用的最少数据,那将会容易得多。这也会使问题更加清晰。据我了解,您已使用dataOneOf构造定义了一些数据类型以枚举多个文字。首先,让我们创建一些示例数据。这是一个带有两个属性的OWL本体,每个属性都有一个enmerated数据类型表达式作为其范围。其中一个有{“一个”,“两个”}作为范围,另一个有{1,2}:

@prefix :      <http://example.org/datatypes#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

:p1     a           owl:DatatypeProperty ;
        rdfs:range  [ a          rdfs:Datatype ;
                      owl:oneOf  [ a          rdf:List ;
                                   rdf:first  1 ;
                                   rdf:rest   [ a          rdf:List ;
                                                rdf:first  2 ;
                                                rdf:rest   ()

                                              ]
                                 ]
                    ] .

:p2     a           owl:DatatypeProperty ;
        rdfs:range  [ a          rdfs:Datatype ;
                      owl:oneOf  [ a          rdf:List ;
                                   rdf:first  "one" ;
                                   rdf:rest   [ a          rdf:List ;
                                                rdf:first  "two" ;
                                                rdf:rest   ()

                                              ]
                                 ]
                    ] .

请注意,数据类型表达式中的可能值列表以RDF列表的形式给出。使用属性路径查询RDF列表最简单,Stack Overflow上还有很多其他示例。以下是查询的外观,它将检索数据类型及其每个元素和这些元素的数据类型(如果您也想要这样)。

prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix owl:   <http://www.w3.org/2002/07/owl#>
prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

select ?dt ?element ?elementType {
  ?dt a rdfs:Datatype ;
      owl:oneOf/rdf:rest*/rdf:first ?element .
  bind(datatype(?element) as ?elementType)
}
---------------------------------------------------------------
| dt   | element | elementType                                |
===============================================================
| _:b0 | "one"   | <http://www.w3.org/2001/XMLSchema#string>  |
| _:b0 | "two"   | <http://www.w3.org/2001/XMLSchema#string>  |
| _:b1 | 1       | <http://www.w3.org/2001/XMLSchema#integer> |
| _:b1 | 2       | <http://www.w3.org/2001/XMLSchema#integer> |
---------------------------------------------------------------

请注意,此类数据类型通常由空白节点表示,这意味着它们具有关联的IRI。例如,在这种情况下,它们显示为_:b0和_:b1。但是,希望您可以通过某种方式识别您感兴趣的特定数据类型表达式,例如,通过询问某些特定属性的范围或类似属性。