Rdf SPARQL 1.1中的最大值?

Rdf SPARQL 1.1中的最大值?,rdf,sparql,Rdf,Sparql,我是SPARQL 1.1的初学者。我有一个N-Triples文件,如下所示。我想找到Work_RVU最后一个属性的最大值,以及相关代码第四个属性的最大值 <file://PPRVU12.xlsx/69540> <http://www.w3.org/1999/02/22-rdf-syntax-ns?#type> <http://cms.gov/HCPCS> . <file://PPRVU12.xlsx/69540> <http://www.w3

我是SPARQL 1.1的初学者。我有一个N-Triples文件,如下所示。我想找到Work_RVU最后一个属性的最大值,以及相关代码第四个属性的最大值

<file://PPRVU12.xlsx/69540> <http://www.w3.org/1999/02/22-rdf-syntax-ns?#type> <http://cms.gov/HCPCS> .
<file://PPRVU12.xlsx/69540> <http://www.w3.org/2000/01/rdf-schema#label> "Remove ear lesion" .
<file://PPRVU12.xlsx/69540> <file://PPRVU12.xlsx#Status_Code> "A" .
<file://PPRVU12.xlsx/69540> <file://PPRVU12.xlsx#Code> "69540" .
<file://PPRVU12.xlsx/69540> <file://PPRVU12.xlsx#Work_RVU> "1.25" .

<file://PPRVU12.xlsx/69550> <http://www.w3.org/1999/02/22-rdf-syntax-ns?#type> <http://cms.gov/HCPCS> .
<file://PPRVU12.xlsx/69550> <http://www.w3.org/2000/01/rdf-schema#label> "Remove ear lesion" .
<file://PPRVU12.xlsx/69550> <file://PPRVU12.xlsx#Status_Code> "A" .
<file://PPRVU12.xlsx/69550> <file://PPRVU12.xlsx#Code> "69550" .
<file://PPRVU12.xlsx/69550> <file://PPRVU12.xlsx#Work_RVU> "11.15" .

<file://PPRVU12.xlsx/69552> <http://www.w3.org/1999/02/22-rdf-syntax-ns?#type> <http://cms.gov/HCPCS> .
<file://PPRVU12.xlsx/69552> <http://www.w3.org/2000/01/rdf-schema#label> "Remove ear lesion" .
<file://PPRVU12.xlsx/69552> <file://PPRVU12.xlsx#Status_Code> "A" .
<file://PPRVU12.xlsx/69552> <file://PPRVU12.xlsx#Code> "69552" .
<file://PPRVU12.xlsx/69552> <file://PPRVU12.xlsx#Work_RVU> "19.81" .
最大RVU应为19.81,代码应为“69552”。我可以打印19.81,但总是打印“69540”,这意味着它总是选择每次遇到的第一个代码

我的SPARQL代码如下:

PREFIX pre: <file://PPRVU12.xlsx#>
SELECT ?code (MAX (?val) AS ?Max_RVU)
WHERE{
    ?code pre:Work_RVU ?val .
}
这个查询有错误吗?我还试过另一个问题

PREFIX pre: <file://PPRVU12.xlsx#>
PREFIX head: <http://www.w3.org/1999/02/22-rdf-syntax-ns?#>
SELECT ?code (MAX (?val) AS ?Max_RVU)
WHERE{
    ?d head:type <http://cms.gov/HCPCS> .
    ?d pre:Code ?code .
    ?d pre:Work_RVU ?val .
}

但结果是一样的

我无法重现你描述的行为。当我尝试使用Jena的ARQ对您的数据运行任何一个查询时,我得到一个错误:

$ arq --query query.sparql --data data.nt 
Non-group key variable in SELECT: ?code
然而,这是很容易纠正的。我认为,将GROUPBY?代码添加到第一个查询中会使输出更接近您想要的结果

PREFIX pre: <file://PPRVU12.xlsx#>

SELECT ?code (MAX (?val) AS ?Max_RVU)
WHERE {
    ?code pre:Work_RVU ?val .
}
GROUP BY ?code
这确实显示了与每个代码相关的最大值。然而,由于数据中的每个代码只有一个RVU值,我想知道您所寻找的代码是否不是所有代码中具有最大RVU值的代码。如果是这种情况,可以通过选择代码及其RVU、按RVU排序以及仅选择第一个结果来完成。例如,我们可以使用此查询按?val降序排序:

PREFIX pre: <file://PPRVU12.xlsx#>

SELECT ?code ?val 
WHERE {
    ?code pre:Work_RVU ?val .
}
ORDER BY DESC(?val)
产生

$ arq --query query.sparql --data data.nt 
-----------------------------------------
| code                        | val     |
=========================================
| <file://PPRVU12.xlsx/69552> | "19.81" |
| <file://PPRVU12.xlsx/69550> | "11.15" |
| <file://PPRVU12.xlsx/69540> | "1.25"  |
-----------------------------------------
$ arq --query query.sparql --data data.nt 
-----------------------------------------
| code                        | val     |
=========================================
| <file://PPRVU12.xlsx/69552> | "19.81" |
-----------------------------------------

您可能会遇到以下问题:RVU值被存储为字符串,这意味着您从SPARQL查询获得的顺序不是数字顺序,而是词汇顺序。最好的解决方案是清理数据,使其实际包含数字。但是,只要您只是尝试获取最大值,并且字符串都具有相同的格式,您仍然会得到想要的结果,因为值越高,需要的字符串就越长,数字字符的词汇顺序与数字顺序一致。

我无法重现您描述的行为。当我尝试使用Jena的ARQ对您的数据运行任何一个查询时,我得到一个错误:

$ arq --query query.sparql --data data.nt 
Non-group key variable in SELECT: ?code
然而,这是很容易纠正的。我认为,将GROUPBY?代码添加到第一个查询中会使输出更接近您想要的结果

PREFIX pre: <file://PPRVU12.xlsx#>

SELECT ?code (MAX (?val) AS ?Max_RVU)
WHERE {
    ?code pre:Work_RVU ?val .
}
GROUP BY ?code
这确实显示了与每个代码相关的最大值。然而,由于数据中的每个代码只有一个RVU值,我想知道您所寻找的代码是否不是所有代码中具有最大RVU值的代码。如果是这种情况,可以通过选择代码及其RVU、按RVU排序以及仅选择第一个结果来完成。例如,我们可以使用此查询按?val降序排序:

PREFIX pre: <file://PPRVU12.xlsx#>

SELECT ?code ?val 
WHERE {
    ?code pre:Work_RVU ?val .
}
ORDER BY DESC(?val)
产生

$ arq --query query.sparql --data data.nt 
-----------------------------------------
| code                        | val     |
=========================================
| <file://PPRVU12.xlsx/69552> | "19.81" |
| <file://PPRVU12.xlsx/69550> | "11.15" |
| <file://PPRVU12.xlsx/69540> | "1.25"  |
-----------------------------------------
$ arq --query query.sparql --data data.nt 
-----------------------------------------
| code                        | val     |
=========================================
| <file://PPRVU12.xlsx/69552> | "19.81" |
-----------------------------------------

您可能会遇到以下问题:RVU值被存储为字符串,这意味着您从SPARQL查询获得的顺序不是数字顺序,而是词汇顺序。最好的解决方案是清理数据,使其实际包含数字。但是,只要您只是尝试获取最大值,并且字符串都具有相同的格式,您仍然会得到想要的结果,因为更高的值将需要更长的字符串,并且数字字符的词法顺序与数字的数字顺序一致。

感谢您的帮助,约书亚。我现在就试试:@YuchunCui这个答案对你有用吗?如果是这样的话,你可以让别人知道这对你有好处,也可以用一点声誉来奖励回答者@乔舒亚·泰勒谢谢你,这真的帮了大忙。抱歉迟到了,请接受!谢谢你的善意和详细的帮助,约书亚。我现在就试试:@YuchunCui这个答案对你有用吗?如果是这样的话,你可以让别人知道这对你有好处,也可以用一点声誉来奖励回答者@乔舒亚·泰勒谢谢你,这真的帮了大忙。抱歉迟到了,请接受!