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())); 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.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__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); 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) { 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); 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) { 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 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; 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() { @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); 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(); 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]); rv.Add(ary[i]);
return rv; 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_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();} 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.*; 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 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_references_grp(Wbase_claim_grp_list snaks, int[] snaks_order) {
public Wbase_claim_grp_list References() {return references;} private Wbase_claim_grp_list references; this.snaks = snaks;
public int[] References_order() {return references_order;} private int[] references_order; 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 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_(Wbase_claim_grp_list v) {qualifiers = v; return this;}
public Wbase_claim_base Qualifiers_order_(int[] v) {qualifiers_order = 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) { public int compareTo(Object obj) {
Wbase_claim_base comp = (Wbase_claim_base)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); claim_html_wtr.Init(tmp_bfr, wdata_mgr, msgs, lbl_mgr, lang, ttl);
for (int i = 0; i < len; ++i) { for (int i = 0; i < len; ++i) {
Wbase_references_grp grp_itm = ref_grps[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(); int grp_len = grp.Len();
for (int j = 0; j < grp_len; ++j) { for (int j = 0; j < grp_len; ++j) {
Wbase_claim_grp grp2 = grp.Get_at(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; int ref_grp_ary_len = ref_grp_ary.length;
for (int k = 0; k < ref_grp_ary_len; ++k) { for (int k = 0; k < ref_grp_ary_len; ++k) {
Wbase_references_grp ref_grp = ref_grp_ary[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(); int ref_list_len = ref_list.Len();
for (int m = 0; m < ref_list_len; ++m) { for (int m = 0; m < ref_list_len; ++m) {
Wbase_claim_grp claim_grp = ref_list.Get_at(m); Wbase_claim_grp claim_grp = ref_list.Get_at(m);

View File

@ -64,8 +64,9 @@ class Wdata_claims_parser_v2 {
return rv; return rv;
} }
private Wbase_references_grp Parse_references_grp(byte[] qid, Json_nde owner) { 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(); int len = owner.Len();
Wbase_claim_grp_list snaks = null; int[] snaks_order = null;
for (int i = 0; i < len; ++i) { for (int i = 0; i < len; ++i) {
Json_kv sub = Json_kv.cast(owner.Get_at(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; byte tid = Wdata_dict_reference.Reg.Get_tid_or_max_and_log(qid, sub.Key().Data_bry()); if (tid == Byte_.Max_value_127) continue;

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()); 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 = wdoc_parser.Parse_references(Q1_bry, owner);
Wbase_references_grp actl_grp = actl[0]; Wbase_references_grp actl_grp = actl[0];
Tfds.Eq_ary(expd_order, actl_grp.References_order()); Tfds.Eq_ary(expd_order, actl_grp.Snaks_order());
Tfds.Eq_ary_str(expd_itms, To_ary(actl_grp.References())); Tfds.Eq_ary_str(expd_itms, To_ary(actl_grp.Snaks()));
} }
public void Test_pid_order(String raw, int... expd) { public void Test_pid_order(String raw, int... expd) {
Json_doc jdoc = json_parser.Parse_by_apos(raw); Json_doc jdoc = json_parser.Parse_by_apos(raw);