From d4a28d3ffe3a181545f345746b091e71dad9d9dd Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sat, 22 Jun 2019 21:53:07 -0400 Subject: [PATCH] Wikibase: Add qualifiers-order to GetEntityStatements [#374] --- .../libs/Scrib_lib_wikibase_srl.java | 11 ++++++ .../scribunto/libs/wikibases/Srl__tst.java | 36 +++++++++++++++++-- .../wbases/claims/itms/Wbase_claim_base.java | 2 +- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl.java index 33e916030..becf081f9 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_srl.java @@ -135,6 +135,7 @@ public class Scrib_lib_wikibase_srl { list.Add(Keyval_.new_(Wdata_dict_claim_v1.Str_rank, Wbase_claim_rank_.Reg.Get_str_or_fail(itm.Rank_tid()))); list.Add(Keyval_.new_("type", itm.Prop_type())); Srl_root(list, Wdata_dict_claim.Itm__qualifiers.Key_str(), Srl_qualifiers(prop_mgr, visitor, itm.Qualifiers(), base_adj, page_url)); + Srl_root(list, Wdata_dict_claim.Itm__qualifiers_order.Key_str(), Srl_qualifiers_order(prop_mgr, visitor, itm.Qualifiers_order(), base_adj, page_url)); return (Keyval[])list.To_ary_and_clear(Keyval.class); } private static Keyval[] Srl_qualifiers(Wbase_prop_mgr prop_mgr, Scrib_lib_wikibase_srl_visitor visitor, Wbase_claim_grp_list list, int base_adj, byte[] page_url) { @@ -155,6 +156,16 @@ public class Scrib_lib_wikibase_srl { } return (Keyval[])rv.To_ary_and_clear(Keyval.class); } + private static Keyval[] Srl_qualifiers_order(Wbase_prop_mgr prop_mgr, Scrib_lib_wikibase_srl_visitor visitor, int[] list, int base_adj, byte[] page_url) { + if (list == null) return null; + int list_len = list.length; if (list_len == 0) return Keyval_.Ary_empty; + List_adp rv = List_adp_.New(); + for (int i = 0; i < list_len; ++i) { + String itm_pid = "P" + Int_.To_str(list[i]); + rv.Add(Keyval_.int_(i + base_adj, itm_pid)); + } + return (Keyval[])rv.To_ary_and_clear(Keyval.class); + } private static Keyval[] Srl_claims_prop_itm_core(Wbase_prop_mgr prop_mgr, Scrib_lib_wikibase_srl_visitor visitor, String pid, Wbase_claim_base itm, byte[] page_url) { boolean snak_is_valued = itm.Snak_tid() == Wbase_claim_value_type_.Tid__value; // PURPOSE: was != Wbase_claim_value_type_.Tid__novalue; PAGE:it.s:Autore:Anonimo DATE:2015-12-06 int snak_is_valued_adj = snak_is_valued ? 1 : 0; diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/wikibases/Srl__tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/wikibases/Srl__tst.java index d7519e597..f2e2fc9bc 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/wikibases/Srl__tst.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/wikibases/Srl__tst.java @@ -16,7 +16,7 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt package gplx.xowa.xtns.scribunto.libs.wikibases; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.libs.*; import org.junit.*; import gplx.core.tests.*; import gplx.langs.jsons.*; import gplx.xowa.xtns.wbases.*; import gplx.xowa.xtns.wbases.core.*; import gplx.xowa.xtns.wbases.claims.*; import gplx.xowa.xtns.wbases.claims.itms.*; import gplx.xowa.xtns.wbases.parsers.*; import gplx.xowa.xtns.wbases.stores.*; -public class Srl__tst { +public class Srl__tst {// see also FOOTNOTE:VIEWING_WIKIDATA_JSON @Before public void init() {fxt.Clear();} private Srl__fxt fxt = new Srl__fxt(); @Test public void Label() { fxt.Init_label("en", "Earth").Init_label("fr", "Terre").Init_label("de", "Erde"); @@ -328,7 +328,21 @@ public class Srl__tst { } @Test public void Qualifiers() { Wdata_wiki_mgr_fxt wdata_fxt = fxt.Wdata_fxt(); - fxt.Init_prop(wdata_fxt.Make_claim_string(2, "Earth").Qualifiers_(wdata_fxt.Make_qualifiers(wdata_fxt.Make_qualifiers_grp(3, wdata_fxt.Make_claim_time(3, "2001-02-03 04:05:06"))))); + fxt.Init_prop + ( wdata_fxt.Make_claim_string(2, "Earth") + .Qualifiers_ + ( wdata_fxt.Make_qualifiers + ( wdata_fxt.Make_qualifiers_grp + ( 3, wdata_fxt.Make_claim_time(3, "2001-02-03 04:05:06") + ) + , wdata_fxt.Make_qualifiers_grp + ( 1, wdata_fxt.Make_claim_string(1, "val1") + ) + ) + ) + .Qualifiers_order_(Int_ary_.New(3, 1)) + ) + ; fxt.Test ( "claims:" , " P2:" @@ -358,6 +372,17 @@ public class Srl__tst { , " property:'P3'" , " snaktype:'value'" , " datatype:'time'" + , " P1:" + , " 1:" + , " datavalue:" + , " type:'string'" + , " value:'val1'" + , " property:'P1'" + , " snaktype:'value'" + , " datatype:'string'" + , " qualifiers-order:" + , " 1:'P3'" + , " 2:'P1'" , "" ); } @@ -418,4 +443,9 @@ public class Srl__tst { Keyval keyval = Keyval_find_.Find(true, visitor.Rv(), "value", "numeric-id"); Gftest.Eq__int(456, (int)keyval.Val()); // NOTE: must be 456 not "456" } -} +} +/* +FOOTNOTE:VIEWING_WIKIDATA_JSON +* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=q2 +* https://www.wikidata.org/wiki/Special:Export/Q2 +*/ diff --git a/400_xowa/src/gplx/xowa/xtns/wbases/claims/itms/Wbase_claim_base.java b/400_xowa/src/gplx/xowa/xtns/wbases/claims/itms/Wbase_claim_base.java index 9cecdad7b..843d6fc0a 100644 --- a/400_xowa/src/gplx/xowa/xtns/wbases/claims/itms/Wbase_claim_base.java +++ b/400_xowa/src/gplx/xowa/xtns/wbases/claims/itms/Wbase_claim_base.java @@ -34,7 +34,7 @@ public abstract class Wbase_claim_base implements CompareAble { public Wbase_claim_base Rank_tid_(byte v) {this.rank_tid = v; return this;} public void Wguid_(byte[] v) {this.wguid = v;} public Wbase_claim_base Qualifiers_(Wbase_claim_grp_list v) {qualifiers = v; return this;} - public void Qualifiers_order_(int[] v) {qualifiers_order = v;} + public Wbase_claim_base Qualifiers_order_(int[] v) {qualifiers_order = v; return this;} public void References_(Wbase_references_grp[] v) {references = v;} public int compareTo(Object obj) {