SPARQL:如何列出和计算 RDF 数据集中的每种数据类型?
SPARQL: How do I List and count each data type in an RDF dataset?
我正在尝试计算数据集中每种数据类型的实例。这是一个简单的数据集,只有三种数据类型:整数、字符串和日期时间。
我可以通过查询得到数据类型的数量(3):
SELECT (COUNT(DISTINCT datatype(?o))
AS ?dTypeCount) {?s ?p ?o. FILTER (isLiteral(?o)) }
GROUP BY ?dTypeCount
结果如下:
--------------
| dType计数 |
==============
| 3 |
--------------
我可以通过查询获得数据类型(字符串、整数、日期时间)的列表:
SELECT DISTINCT (datatype(?o) AS ?dType)
{?s ?p ?o. FILTER (isLiteral(?o)) }
结果如下:
-----------------------------------------------
| dType |
===============================================
| <http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.w3.org/2001/XMLSchema#string> |
| <http://www.w3.org/2001/XMLSchema#integer> |
-----------------------------------------------
我可以通过查询获得每种数据类型的计数:
SELECT (COUNT(?o) AS ?dTypeCount)
{?s ?p ?o. FILTER (isLiteral(?o)) }
GROUP BY datatype(?o)
结果如下:
--------------
| dTypeCount |
==============
| 23494 |
| 93548 |
| 228942 |
--------------
但我无法在计数旁边显示数据类型的名称,即看起来像这样:
-------------------------------------------------------------
| dType || dTypeCount |
=============================================================
| <http://www.w3.org/2001/XMLSchema#dateTime> || 23494 |
| <http://www.w3.org/2001/XMLSchema#string> || 93548 |
| <http://www.w3.org/2001/XMLSchema#integer> || 228942 |
-------------------------------------------------------------
我已经尝试了子查询、联合、多个 GROUP BY 绑定变量的各种组合,但都没有得到想要的结果
或出现 "Non-group key variable in SELECT: " 错误。非常感谢所有帮助。
由于您已按 ?o 的数据类型分组,因此您知道组中的所有 ?o 值都具有相同的数据类型。您可以只 采样 来获取这些值之一,然后获取它的数据类型:
select (datatype(sample(?o)) as ?datatype)
(count(?o) AS ?dTypeCount)
where {
?s ?p ?o
filter isLiteral(?o)
}
group by datatype(?o)
如果您不喜欢周围有太多复杂的表达式,您可以绑定查询中的数据类型:
select ?datatype (count(?o) AS ?dTypeCount)
where {
?s ?p ?o
filter isLiteral(?o)
bind (datatype(?o) as ?datatype)
}
group by ?datatype
你几乎成功了。
SELECT (COUNT(?o) AS ?dTypeCount) (MAX(?datatype) AS ?dtype)
{?s ?p ?o.
BIND (datatype(?o) AS ?datatype)
FILTER (isLiteral(?o)) }
GROUP BY datatype(?o)
因为您已经按数据类型分组,所以您只需要一个分组函数来引用它。
我正在尝试计算数据集中每种数据类型的实例。这是一个简单的数据集,只有三种数据类型:整数、字符串和日期时间。
我可以通过查询得到数据类型的数量(3):
SELECT (COUNT(DISTINCT datatype(?o))
AS ?dTypeCount) {?s ?p ?o. FILTER (isLiteral(?o)) }
GROUP BY ?dTypeCount
结果如下: -------------- | dType计数 | ============== | 3 | --------------
我可以通过查询获得数据类型(字符串、整数、日期时间)的列表:
SELECT DISTINCT (datatype(?o) AS ?dType)
{?s ?p ?o. FILTER (isLiteral(?o)) }
结果如下:
-----------------------------------------------
| dType |
===============================================
| <http://www.w3.org/2001/XMLSchema#dateTime> |
| <http://www.w3.org/2001/XMLSchema#string> |
| <http://www.w3.org/2001/XMLSchema#integer> |
-----------------------------------------------
我可以通过查询获得每种数据类型的计数:
SELECT (COUNT(?o) AS ?dTypeCount)
{?s ?p ?o. FILTER (isLiteral(?o)) }
GROUP BY datatype(?o)
结果如下:
--------------
| dTypeCount |
==============
| 23494 |
| 93548 |
| 228942 |
--------------
但我无法在计数旁边显示数据类型的名称,即看起来像这样:
-------------------------------------------------------------
| dType || dTypeCount |
=============================================================
| <http://www.w3.org/2001/XMLSchema#dateTime> || 23494 |
| <http://www.w3.org/2001/XMLSchema#string> || 93548 |
| <http://www.w3.org/2001/XMLSchema#integer> || 228942 |
-------------------------------------------------------------
我已经尝试了子查询、联合、多个 GROUP BY 绑定变量的各种组合,但都没有得到想要的结果 或出现 "Non-group key variable in SELECT: " 错误。非常感谢所有帮助。
由于您已按 ?o 的数据类型分组,因此您知道组中的所有 ?o 值都具有相同的数据类型。您可以只 采样 来获取这些值之一,然后获取它的数据类型:
select (datatype(sample(?o)) as ?datatype)
(count(?o) AS ?dTypeCount)
where {
?s ?p ?o
filter isLiteral(?o)
}
group by datatype(?o)
如果您不喜欢周围有太多复杂的表达式,您可以绑定查询中的数据类型:
select ?datatype (count(?o) AS ?dTypeCount)
where {
?s ?p ?o
filter isLiteral(?o)
bind (datatype(?o) as ?datatype)
}
group by ?datatype
你几乎成功了。
SELECT (COUNT(?o) AS ?dTypeCount) (MAX(?datatype) AS ?dtype)
{?s ?p ?o.
BIND (datatype(?o) AS ?datatype)
FILTER (isLiteral(?o)) }
GROUP BY datatype(?o)
因为您已经按数据类型分组,所以您只需要一个分组函数来引用它。