sparql - 使用字符串形式的非负整数对 sparql 中的结果进行升序排列

标签 sparql rdf triplestore graphdb

我的三重存储 (GraphDB) 中有超过 2000 个资源,我想根据它们的 IRI 按升序排序,而 IRI 如下所示:

http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#3
...
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2345

在我的图表中,所有上述 IRI 都通过“DE6:complex_Data_Type_has_Member”连接到一个资源。为了获得所有上述 IRI,我执行以下操作:

PREFIX DE6: <http://DE6/DINEN61360#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?IRIs_to_Sort WHERE{
         ?Array a DE6:Data_Element;
         DE6:complex_Data_Type_has_Member ?IRIs_to_Sort .


} ORDER BY ?IRIs_to_Sort 

如果我只使用“ORDER BY ?IRIs_to_Sort”解决方案序列修饰符,如https://www.w3.org/TR/2013/REC-sparql11-query-20130321/#modOrderBy所示

然后我得到以下结果(仅显示前十个结果):

http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#10
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#100
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1000
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1001
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1002
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1003
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1004
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1005
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1006
...
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1999
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#20
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#200
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2000
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2001
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2002
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2003
...

相反,我希望得到类似的结果:

http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#1
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#3
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#4
...
http://TABLE/240b9f63-66b9-47f1-9e02-bfd03794bbd9#2099

我在这里缺少什么?

最佳答案

IRIs 被视为 ORDER BY 的词汇值,这意味着片段 id 中的数字被视为文本,并且不会单独考虑它们。

我认为完整的ORDER BY对您有用,无论您的结果集包含一个或多个IRI,每个IRI具有一个或多个frag-ID,但仅当所有frag-ID都有效时是数字,将是 -

ORDER BY ( xsd:string ( STRBEFORE ( STR ( ?IRIs_to_Sort ), "#" ) ) )
         ( xsd:long ( STRAFTER ( STR ( ?IRIs_to_Sort ), "#" ) ) ) 

如果您的 frag-ID 是数字和字母数字的混合,事情会变得更加复杂。

关于sparql - 使用字符串形式的非负整数对 sparql 中的结果进行升序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55399306/

相关文章:

rdf - 查询 dbpedia 以查找可能的上下文来消除单词的歧义

rdf - 如何编写在忽略大小写的情况下有效匹配字符串文字的 SPARQL 查询

java - 将年龄(整数文字)添加到 Jena RDF 三元组,并使用 SPARQL 对其进行查询

c# - 如何使用 sparql 使用 dotNetRDF 库从我自己的 rdf 文件中查询?

rdf - 用于构建 RDF 三元组的 RDF 术语指南

docker - 具有Blazegraph Triple Store的Docker容器可能由于联网而无法正常工作

sparql - ARQ 从头开始​​查询

SPARQL - 返回主题列表的相互对象

sparql - 在 SPARQL 中过滤投影表达式

java - 如何使用 Jena API、Fuseki 和 TDB 基于现有 OWL 文件创建 Jena Triple Store?