1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2024-10-27 20:34:16 +00:00

Wikibase: Serialize 'references' [#587]

This commit is contained in:
gnosygnu 2019-10-03 06:34:11 -04:00
parent 73eb42c0ba
commit 4955748f6d
9 changed files with 100 additions and 10 deletions

View File

@ -136,6 +136,7 @@ public class Scrib_lib_wikibase_srl {
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));
Srl_root(list, Wdata_dict_claim.Itm__references.Key_str(), Srl_references(prop_mgr, visitor, itm.References(), 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) {
@ -166,6 +167,19 @@ public class Scrib_lib_wikibase_srl {
}
return (Keyval[])rv.To_ary_and_clear(Keyval.class);
}
private static Keyval[] Srl_references(Wbase_prop_mgr prop_mgr, Scrib_lib_wikibase_srl_visitor visitor, Wbase_references_grp[] 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) {
Wbase_references_grp references_grp = list[i];
Keyval[] references_kvs = new Keyval[2];
references_kvs[0] = Keyval_.new_("snaks", Srl_qualifiers(prop_mgr, visitor, references_grp.Snaks(), base_adj, page_url));
references_kvs[1] = Keyval_.new_("snaks-order", Srl_qualifiers_order(prop_mgr, visitor, references_grp.Snaks_order(), base_adj, page_url));
rv.Add(Keyval_.int_(i + base_adj, references_kvs));
}
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;

View File

@ -386,6 +386,66 @@ public class Srl__tst {// see also FOOTNOTE:VIEWING_WIKIDATA_JSON
, ""
);
}
@Test public void References() {
Wdata_wiki_mgr_fxt wdata_fxt = fxt.Wdata_fxt();
fxt.Init_prop
( wdata_fxt.Make_claim_string(2, "Earth")
.References_
( wdata_fxt.Make_references
( wdata_fxt.Make_reference_grp
( Int_ary_.New(3, 1)
, wdata_fxt.Make_reference_itm(3, wdata_fxt.Make_claim_time(3, "2001-02-03 04:05:06"))
, wdata_fxt.Make_reference_itm(1, wdata_fxt.Make_claim_string(1, "val1"))
)
)
)
)
;
fxt.Test
( "claims:"
, " P2:"
, " 1:"
, " id:'P2'"
, " mainsnak:"
, " datavalue:"
, " type:'string'"
, " value:'Earth'"
, " property:'P2'"
, " snaktype:'value'"
, " datatype:'string'"
, " rank:'normal'"
, " type:'statement'"
, " references:"
, " 1:"
, " snaks:"
, " P3:"
, " 1:"
, " datavalue:"
, " type:'time'"
, " value:"
, " time:'+00000002001-02-03T04:05:06Z'"
, " precision:'14'"
, " before:'0'"
, " after:'0'"
, " timezone:'0'"
, " calendarmodel:'http://www.wikidata.org/entity/Q1985727'"
, " property:'P3'"
, " snaktype:'value'"
, " datatype:'time'"
, " P1:"
, " 1:"
, " datavalue:"
, " type:'string'"
, " value:'val1'"
, " property:'P1'"
, " snaktype:'value'"
, " datatype:'string'"
, " snaks-order:"
, " 1:'P3'"
, " 2:'P1'"
, ""
);
}
@Test public void Claims_time_typed() {
Wbase_claim_time claim = (Wbase_claim_time)fxt.Wdata_fxt().Make_claim_time(2, "2001-02-03 04:05:06", 9);
Scrib_lib_wikibase_srl_visitor visitor = new Scrib_lib_wikibase_srl_visitor();

View File

@ -69,6 +69,18 @@ public class Wdata_wiki_mgr_fxt {
rv.Add(ary[i]);
return rv;
}
public Wbase_references_grp[] Make_references(Wbase_references_grp... ary) {
return ary;
}
public Wbase_references_grp Make_reference_grp(int[] snaks_order, Wbase_claim_grp... snaks) {
Wbase_claim_grp_list list = new Wbase_claim_grp_list();
for (Wbase_claim_grp itm : snaks)
list.Add(itm);
return new Wbase_references_grp(list, snaks_order);
}
public Wbase_claim_grp Make_reference_itm(int id, Wbase_claim_base... itms) {
return new Wbase_claim_grp(Int_obj_ref.New(id), itms);
}
public Wdata_doc_bldr Wdoc(String qid) {return wdoc_bldr.Qid_(qid);}
public Wdata_doc doc_(String qid, Wbase_claim_base... props) {return wdoc_bldr.Qid_(qid).Add_claims(props).Xto_wdoc();}

View File

@ -15,7 +15,10 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.xtns.wbases.claims; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wbases.*;
public class Wbase_references_grp {
public Wbase_references_grp(Wbase_claim_grp_list references, int[] references_order) {this.references = references; this.references_order = references_order;}
public Wbase_claim_grp_list References() {return references;} private Wbase_claim_grp_list references;
public int[] References_order() {return references_order;} private int[] references_order;
public Wbase_references_grp(Wbase_claim_grp_list snaks, int[] snaks_order) {
this.snaks = snaks;
this.snaks_order = snaks_order;
}
public Wbase_claim_grp_list Snaks() {return snaks;} private final Wbase_claim_grp_list snaks;
public int[] Snaks_order() {return snaks_order;} private final int[] snaks_order;
}

View File

@ -35,7 +35,7 @@ public abstract class Wbase_claim_base implements CompareAble {
public void Wguid_(byte[] v) {this.wguid = v;}
public Wbase_claim_base Qualifiers_(Wbase_claim_grp_list v) {qualifiers = v; return this;}
public Wbase_claim_base Qualifiers_order_(int[] v) {qualifiers_order = v; return this;}
public void References_(Wbase_references_grp[] v) {references = v;}
public Wbase_claim_base References_(Wbase_references_grp[] v) {references = v; return this;}
public int compareTo(Object obj) {
Wbase_claim_base comp = (Wbase_claim_base)obj;

View File

@ -261,7 +261,7 @@ class Wdata_fmtr__ref_row implements gplx.core.brys.Bfr_arg {
claim_html_wtr.Init(tmp_bfr, wdata_mgr, msgs, lbl_mgr, lang, ttl);
for (int i = 0; i < len; ++i) {
Wbase_references_grp grp_itm = ref_grps[i];
Wbase_claim_grp_list grp = grp_itm.References();
Wbase_claim_grp_list grp = grp_itm.Snaks();
int grp_len = grp.Len();
for (int j = 0; j < grp_len; ++j) {
Wbase_claim_grp grp2 = grp.Get_at(j);

View File

@ -101,7 +101,7 @@ public class Wdata_lbl_mgr {
int ref_grp_ary_len = ref_grp_ary.length;
for (int k = 0; k < ref_grp_ary_len; ++k) {
Wbase_references_grp ref_grp = ref_grp_ary[k];
Wbase_claim_grp_list ref_list = ref_grp.References();
Wbase_claim_grp_list ref_list = ref_grp.Snaks();
int ref_list_len = ref_list.Len();
for (int m = 0; m < ref_list_len; ++m) {
Wbase_claim_grp claim_grp = ref_list.Get_at(m);

View File

@ -64,13 +64,14 @@ class Wdata_claims_parser_v2 {
return rv;
}
private Wbase_references_grp Parse_references_grp(byte[] qid, Json_nde owner) {
Wbase_claim_grp_list snaks = null;
int[] snaks_order = null;
int len = owner.Len();
Wbase_claim_grp_list snaks = null; int[] snaks_order = null;
for (int i = 0; i < len; ++i) {
Json_kv sub = Json_kv.cast(owner.Get_at(i));
byte tid = Wdata_dict_reference.Reg.Get_tid_or_max_and_log(qid, sub.Key().Data_bry()); if (tid == Byte_.Max_value_127) continue;
switch (tid) {
case Wdata_dict_reference.Tid__hash: break; // ignore: "b923b0d68beb300866b87ead39f61e63ec30d8af"
case Wdata_dict_reference.Tid__hash: break; // ignore: "b923b0d68beb300866b87ead39f61e63ec30d8af"
case Wdata_dict_reference.Tid__snaks: snaks = Parse_qualifiers(qid, Json_nde.cast(sub.Val())); break;
case Wdata_dict_reference.Tid__snaks_order: snaks_order = Parse_pid_order(Json_ary.cast_or_null(sub.Val())); break;
}

View File

@ -71,8 +71,8 @@ abstract class Wdata_doc_parser_fxt_base {
Json_ary owner = Json_ary.cast_or_null(Json_kv.cast(jdoc.Root_nde().Get_at(0)).Val());
Wbase_references_grp[] actl = wdoc_parser.Parse_references(Q1_bry, owner);
Wbase_references_grp actl_grp = actl[0];
Tfds.Eq_ary(expd_order, actl_grp.References_order());
Tfds.Eq_ary_str(expd_itms, To_ary(actl_grp.References()));
Tfds.Eq_ary(expd_order, actl_grp.Snaks_order());
Tfds.Eq_ary_str(expd_itms, To_ary(actl_grp.Snaks()));
}
public void Test_pid_order(String raw, int... expd) {
Json_doc jdoc = json_parser.Parse_by_apos(raw);