如何使用Wikidata获取某些软件的最新版本



i使用以下命令从命令行中获取(最新)从命令行中获取某些软件的(最新)版本,使用jq作为JSON PARSER。

curl -sL "http://www.wikidata.org/w/api.php?action=wbgetentities&ids=$QID&languages=en&format=json" |
jq ".entities.$QID.claims.$PID""[0].mainsnak.datavalue.value" 

其中 $QID是Wikidata条目的ID,而$PID我们要打印的属性的ID(在这种情况下为软件版本" P348")。

通常可以正常工作,因为P348的第一个索赔([0])是最新版本,但是例如" Q13166"(WordPress),我们对软件版本有几个主张。如何获得最新的稳定而不是第一个主张?

我可能应该(在我们有多个主张的情况下),找到ITH主张,其中版本类型" P548"等于稳定版本" Q12355314"。或找出更喜欢排名的蛤。如何使用JQ做到这一点?是否有更简单的方法,例如,将SPARQL查询发送到查询.wikidata.org?

以下收集所有相关版本号,并使用此处定义为" lexmax"的过滤器确定"最大"值:

jq --arg QID "$QID" --arg PID "$PID" '
  def lexmax:
    map( split(".")
         | map(if test("^[0-9]*$") then tonumber else . end) )
  | max | map(tostring) | join(".");
  .entities | .[$QID] | .claims | .[$PID]
  | map(.mainsnak.datavalue.value)
  | lexmax'

qid = q13166 pid = p348的结果是

"4.5.2"

如果要使用.rank == "preferred"作为选择标准,则可以使用以下内容:

def lexmax:
  map( split(".")
       | map(if test("^[0-9]*$") then tonumber else . end) )
  | max | map(tostring) | join(".");
def when(condition; action):
  if condition? // null then action else . end;
.entities | .[$QID] | .claims | .[ $PID ]
| map( select(when(has("rank"); .rank == "preferred"))
       | .mainsnak.datavalue.value)
| lexmax

或者也许您不需要使用Lexmax ...

相关内容

  • 没有找到相关文章

最新更新