Wikibase: Add wbase_prop table for datatype

v3.3.4
gnosygnu 8 years ago
parent b1ad1411e4
commit b3566def7e

@ -20,6 +20,7 @@ import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.wikis.data.tbls.*; i
import gplx.xowa.wikis.data.site_stats.*; import gplx.xowa.wikis.data.site_stats.*;
import gplx.xowa.htmls.core.dbs.*; import gplx.xowa.addons.wikis.searchs.dbs.*; import gplx.xowa.htmls.core.dbs.*; import gplx.xowa.addons.wikis.searchs.dbs.*;
import gplx.xowa.addons.wikis.htmls.css.dbs.*; import gplx.xowa.addons.wikis.htmls.css.dbs.*;
import gplx.xowa.xtns.wbases.dbs.*;
public class Xow_db_file { public class Xow_db_file {
protected Xow_db_file(Db_cfg_tbl cfg_tbl, Xowd_core_db_props props, Xob_info_session info_session, Xob_info_file info_file, Xow_db_file_schema_props schema_props, int id, byte tid, Io_url url, String ns_ids, int part_id, Guid_adp guid, Db_conn conn, byte cmd_mode) { protected Xow_db_file(Db_cfg_tbl cfg_tbl, Xowd_core_db_props props, Xob_info_session info_session, Xob_info_file info_file, Xow_db_file_schema_props schema_props, int id, byte tid, Io_url url, String ns_ids, int part_id, Guid_adp guid, Db_conn conn, byte cmd_mode) {
this.id = id; this.tid = tid; this.url = url; this.ns_ids = ns_ids; this.part_id = part_id; this.guid = guid; this.db_props = props; this.id = id; this.tid = tid; this.url = url; this.ns_ids = ns_ids; this.part_id = part_id; this.guid = guid; this.db_props = props;
@ -39,6 +40,7 @@ public class Xow_db_file {
this.tbl__cat_link = new Xowd_cat_link_tbl(conn, schema_is_1); this.tbl__cat_link = new Xowd_cat_link_tbl(conn, schema_is_1);
this.tbl__wbase_qid = new Xowd_wbase_qid_tbl(conn, schema_is_1, schema_props == null ? Bool_.N : schema_props.Wbase__qid__src_ttl_has_spaces()); this.tbl__wbase_qid = new Xowd_wbase_qid_tbl(conn, schema_is_1, schema_props == null ? Bool_.N : schema_props.Wbase__qid__src_ttl_has_spaces());
this.tbl__wbase_pid = new Xowd_wbase_pid_tbl(conn, schema_is_1); this.tbl__wbase_pid = new Xowd_wbase_pid_tbl(conn, schema_is_1);
this.tbl__wbase_prop = new Xowb_prop_tbl(conn);
this.info_session = info_session; this.info_session = info_session;
this.info_file = info_file; this.info_file = info_file;
this.schema_props = schema_props; this.schema_props = schema_props;
@ -69,6 +71,7 @@ public class Xow_db_file {
public Xowd_site_stats_tbl Tbl__site_stats() {return tbl__site_stats;} private final Xowd_site_stats_tbl tbl__site_stats; public Xowd_site_stats_tbl Tbl__site_stats() {return tbl__site_stats;} private final Xowd_site_stats_tbl tbl__site_stats;
public Xowd_wbase_qid_tbl Tbl__wbase_qid() {return tbl__wbase_qid;} private final Xowd_wbase_qid_tbl tbl__wbase_qid; public Xowd_wbase_qid_tbl Tbl__wbase_qid() {return tbl__wbase_qid;} private final Xowd_wbase_qid_tbl tbl__wbase_qid;
public Xowd_wbase_pid_tbl Tbl__wbase_pid() {return tbl__wbase_pid;} private final Xowd_wbase_pid_tbl tbl__wbase_pid; public Xowd_wbase_pid_tbl Tbl__wbase_pid() {return tbl__wbase_pid;} private final Xowd_wbase_pid_tbl tbl__wbase_pid;
public Xowb_prop_tbl Tbl__wbase_prop() {return tbl__wbase_prop;} private final Xowb_prop_tbl tbl__wbase_prop;
public Xob_info_session Info_session() { public Xob_info_session Info_session() {
if (info_session == null) // NOTE: null when load; !null when make if (info_session == null) // NOTE: null when load; !null when make
info_session = Xob_info_session.Load(tbl__cfg); info_session = Xob_info_session.Load(tbl__cfg);

@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package gplx.xowa.xtns.wbases.claims.enums; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wbases.*; import gplx.xowa.xtns.wbases.claims.*; package gplx.xowa.xtns.wbases.claims.enums; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wbases.*; import gplx.xowa.xtns.wbases.claims.*;
public class Wbase_claim_type_ { public class Wbase_claim_type_ {
public static final byte // NOT_SERIALIZED public static final byte // SERIALIZED:wbase_prop|datatype
Tid__unknown = 0 Tid__unknown = 0
, Tid__value = 1 , Tid__value = 1
, Tid__bad = 1 , Tid__bad = 1
@ -27,8 +27,13 @@ public class Wbase_claim_type_ {
, Tid__globecoordinate = 5 , Tid__globecoordinate = 5
, Tid__monolingualtext = 6 , Tid__monolingualtext = 6
, Tid__entity = 7 , Tid__entity = 7
, Tid__property = 8
, Tid__math = 9
, Tid__url = 10
, Tid__externalid = 11
, Tid__commonsmedia = 12
; ;
public static final Wbase_enum_hash Reg = new Wbase_enum_hash("claim.data_type", 8); public static final Wbase_enum_hash Reg = new Wbase_enum_hash("claim.data_type", 13);
public static final Wbase_enum_itm public static final Wbase_enum_itm
Itm__unknown = New(Tid__unknown , "unknown") Itm__unknown = New(Tid__unknown , "unknown")
, Itm__bad = New(Tid__bad , "bad") // NOTE: wikidata identifies several entries as "bad"; Q1615351|'s-Graveland, Q107538|Baco; DATE:2013-10-20 , Itm__bad = New(Tid__bad , "bad") // NOTE: wikidata identifies several entries as "bad"; Q1615351|'s-Graveland, Q107538|Baco; DATE:2013-10-20
@ -38,6 +43,11 @@ public class Wbase_claim_type_ {
, Itm__globecoordinate = New(Tid__globecoordinate , "globecoordinate" , "globe-coordinate") , Itm__globecoordinate = New(Tid__globecoordinate , "globecoordinate" , "globe-coordinate")
, Itm__monolingualtext = New(Tid__monolingualtext , "monolingualtext") , Itm__monolingualtext = New(Tid__monolingualtext , "monolingualtext")
, Itm__entity = New(Tid__entity , "wikibase-entityid" , "wikibase-item") , Itm__entity = New(Tid__entity , "wikibase-entityid" , "wikibase-item")
, Itm__property = New(Tid__property , "wikibase-property") // EX:wd:Property:P1646
, Itm__url = New(Tid__url , "url") // EX:wd:Property:P1019
, Itm__commonsmedia = New(Tid__commonsmedia , "commonsMedia") // EX:wd:Property:P14
, Itm__externalid = New(Tid__externalid , "external-id") // EX:wd:Property:P1003
, Itm__math = New(Tid__math , "math") // EX:wd:Property:P2534
; ;
private static Wbase_enum_itm New(byte tid, String key) {return New(tid, key, key);} private static Wbase_enum_itm New(byte tid, String key) {return New(tid, key, key);}
private static Wbase_enum_itm New(byte tid, String key, String scrib) {return Reg.Add(new Wbase_claim_type(tid, key, scrib));} private static Wbase_enum_itm New(byte tid, String key, String scrib) {return Reg.Add(new Wbase_claim_type(tid, key, scrib));}

@ -25,6 +25,7 @@ public class Wbase_enum_hash {
this.ary_len = ary_len; this.ary_len = ary_len;
} }
public String Name() {return name;} private final String name; public String Name() {return name;} private final String name;
public int Len() {return ary_len;}
public Wbase_enum_itm Add(byte tid, String key) {return Add(new Wbase_enum_itm(tid, key));} public Wbase_enum_itm Add(byte tid, String key) {return Add(new Wbase_enum_itm(tid, key));}
public Wbase_enum_itm Add(Wbase_enum_itm rv) { public Wbase_enum_itm Add(Wbase_enum_itm rv) {
hash_by_bry.Add(rv.Key_bry(), rv); hash_by_bry.Add(rv.Key_bry(), rv);

@ -0,0 +1,62 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.xtns.wbases.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wbases.*;
import gplx.dbs.*; import gplx.dbs.utls.*;
import gplx.xowa.xtns.wbases.claims.enums.*;
public class Xowb_prop_tbl implements Db_tbl {
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
private final String fld__wbp_pid, fld__wbp_datatype;
private final Db_conn conn;
private Db_stmt stmt_insert;
public Xowb_prop_tbl(Db_conn conn) {
this.conn = conn;
this.tbl_name = "wbase_prop";
this.fld__wbp_pid = flds.Add_str("wbp_pid", 16); // EX: "p1"; NOTE: String, not int to conform to wbase_pid
this.fld__wbp_datatype = flds.Add_int("wbp_datatype"); // EX: 12=commonsMedia; SEE:Wbase_claim_type_
conn.Rls_reg(this);
}
public String Tbl_name() {return tbl_name;} private final String tbl_name;
public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds));}
public void Insert_bgn() {conn.Txn_bgn("wbase_prop__insert"); stmt_insert = conn.Stmt_insert(tbl_name, flds);}
public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
public void Insert_cmd_by_batch(byte[] pid, int datatype) {
stmt_insert.Clear().Val_bry_as_str(fld__wbp_pid, pid).Val_int(fld__wbp_datatype, datatype).Exec_insert();
}
public Ordered_hash Select_all() {
Ordered_hash rv = Ordered_hash_.New();
Db_rdr rdr = conn.Stmt_select_all(tbl_name, flds).Exec_select__rls_auto();
try {
while (rdr.Move_next()) {
Select_all__add(rv, rdr);
}
}
finally {rdr.Rls();}
return rv;
}
private void Select_all__add(Ordered_hash hash, Db_rdr rdr) {
byte[] pid = rdr.Read_bry_by_str(fld__wbp_pid);
byte datatype_id = (byte)rdr.Read_int(fld__wbp_datatype);
Wbase_enum_itm datatype_itm = Wbase_claim_type_.Reg.Get_itm_or((byte)datatype_id, null);
if (datatype_itm == null) {
Gfo_usr_dlg_.Instance.Warn_many("", "", "wbase:invalid prop datatype_id; pid=~{0} datatype=~{1}", pid, datatype_id);
datatype_itm = Wbase_claim_type_.Itm__string;
}
hash.Add(pid, datatype_itm);
}
public void Rls() {}
}

@ -23,7 +23,7 @@ public abstract class Xob_wdata_pid_base extends Xob_itm_dump_base implements Xo
public Xob_wdata_pid_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); return this;} public Xob_wdata_pid_base Ctor(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); return this;}
public abstract String Page_wkr__key(); public abstract String Page_wkr__key();
public abstract void Pid_bgn(); public abstract void Pid_bgn();
public abstract void Pid_add(byte[] src_lang, byte[] src_ttl, byte[] trg_ttl); public abstract void Pid_add(byte[] src_lang, byte[] src_ttl, byte[] trg_ttl, byte[] datatype);
public abstract void Pid_end(); public abstract void Pid_end();
public void Page_wkr__bgn() { public void Page_wkr__bgn() {
this.Init_dump(this.Page_wkr__key(), wiki.Tdb_fsys_mgr().Site_dir().GenSubDir_nest("data", "pid")); // NOTE: must pass in correct make_dir in order to delete earlier version (else make_dirs will append) this.Init_dump(this.Page_wkr__key(), wiki.Tdb_fsys_mgr().Site_dir().GenSubDir_nest("data", "pid")); // NOTE: must pass in correct make_dir in order to delete earlier version (else make_dirs will append)
@ -43,11 +43,12 @@ public abstract class Xob_wdata_pid_base extends Xob_itm_dump_base implements Xo
public void Parse_jdoc(Json_doc jdoc) { public void Parse_jdoc(Json_doc jdoc) {
Wdata_doc_parser wdoc_parser = app.Wiki_mgr().Wdata_mgr().Wdoc_parser(jdoc); Wdata_doc_parser wdoc_parser = app.Wiki_mgr().Wdata_mgr().Wdoc_parser(jdoc);
byte[] qid = wdoc_parser.Parse_qid(jdoc); byte[] qid = wdoc_parser.Parse_qid(jdoc);
byte[] datatype = jdoc.Root_nde().Get_as_bry(Wdata_dict_mainsnak.Itm__datatype.Key_str());
Ordered_hash list = wdoc_parser.Parse_langvals(qid, jdoc, Bool_.Y); Ordered_hash list = wdoc_parser.Parse_langvals(qid, jdoc, Bool_.Y);
int len = list.Count(); int len = list.Count();
for (int i = 0; i < len; ++i) { for (int i = 0; i < len; ++i) {
Wdata_langtext_itm label = (Wdata_langtext_itm)list.Get_at(i); Wdata_langtext_itm label = (Wdata_langtext_itm)list.Get_at(i);
this.Pid_add(label.Lang(), label.Text(), qid); this.Pid_add(label.Lang(), label.Text(), qid, datatype);
} }
} }
public void Page_wkr__end() {this.Pid_end();} public void Page_wkr__end() {this.Pid_end();}

@ -59,6 +59,7 @@ public class Xob_wdata_pid_base_tst {
public static String json_(String entity_id, String grp_key, String[] grp_vals) { public static String json_(String entity_id, String grp_key, String[] grp_vals) {
Bry_bfr bfr = Bry_bfr_.New(); Bry_bfr bfr = Bry_bfr_.New();
bfr.Add_str_a7("{ 'entity':'").Add_str_u8(entity_id).Add_byte(Byte_ascii.Apos).Add_byte_nl(); bfr.Add_str_a7("{ 'entity':'").Add_str_u8(entity_id).Add_byte(Byte_ascii.Apos).Add_byte_nl();
bfr.Add_str_a7(", 'datatype':'commonsMedia'\n");
bfr.Add_str_a7(", '").Add_str_u8(grp_key).Add_str_a7("':").Add_byte_nl(); bfr.Add_str_a7(", '").Add_str_u8(grp_key).Add_str_a7("':").Add_byte_nl();
int len = grp_vals.length; int len = grp_vals.length;
for (int i = 0; i < len; i += 2) { for (int i = 0; i < len; i += 2) {

@ -17,20 +17,42 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package gplx.xowa.xtns.wbases.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wbases.*; package gplx.xowa.xtns.wbases.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wbases.*;
import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.wikis.dbs.*; import gplx.xowa.wikis.data.tbls.*;
import gplx.xowa.xtns.wbases.dbs.*; import gplx.xowa.xtns.wbases.claims.enums.*;
public class Xob_wdata_pid_sql extends Xob_wdata_pid_base { public class Xob_wdata_pid_sql extends Xob_wdata_pid_base {
private Xowd_wbase_pid_tbl tbl; private Xowd_wbase_pid_tbl tbl__pid;
private Xowb_prop_tbl tbl__prop;
private final Ordered_hash datatype_hash = Ordered_hash_.New_bry();
@Override public String Page_wkr__key() {return gplx.xowa.bldrs.Xob_cmd_keys.Key_wbase_pid;} @Override public String Page_wkr__key() {return gplx.xowa.bldrs.Xob_cmd_keys.Key_wbase_pid;}
@Override public void Pid_bgn() { @Override public void Pid_bgn() {
Xow_db_mgr db_mgr = wiki.Data__core_mgr(); Xow_db_mgr db_mgr = wiki.Data__core_mgr();
tbl = db_mgr.Db__wbase().Tbl__wbase_pid();
tbl.Create_tbl(); // init datatype_hash
tbl.Insert_bgn(); Wbase_enum_hash enum_hash = Wbase_claim_type_.Reg;
byte len = (byte)enum_hash.Len();
for (byte i = 0; i < len; i++) {
Wbase_claim_type claim_type = (Wbase_claim_type)enum_hash.Get_itm_or(i, null);
datatype_hash.Add(Bry_.new_u8(claim_type.Key_for_scrib()), claim_type);
}
// init wbase_pid
tbl__pid = db_mgr.Db__wbase().Tbl__wbase_pid();
tbl__pid.Create_tbl();
tbl__pid.Insert_bgn();
// init wbase_prop
tbl__prop = db_mgr.Db__wbase().Tbl__wbase_prop();
tbl__prop.Create_tbl();
tbl__prop.Insert_bgn();
} }
@Override public void Pid_add(byte[] lang_key, byte[] ttl, byte[] pid) { @Override public void Pid_add(byte[] lang_key, byte[] ttl, byte[] pid, byte[] datatype_bry) {
tbl.Insert_cmd_by_batch(lang_key, ttl, pid); tbl__pid.Insert_cmd_by_batch(lang_key, ttl, pid);
Wbase_claim_type claim_type = (Wbase_claim_type)datatype_hash.Get_by_or_fail(datatype_bry);
tbl__prop.Insert_cmd_by_batch(pid, claim_type.Tid());
} }
@Override public void Pid_end() { @Override public void Pid_end() {
tbl.Insert_end(); tbl__pid.Insert_end();
tbl.Create_idx(); tbl__pid.Create_idx();
tbl__prop.Insert_end();
} }
} }

@ -22,7 +22,7 @@ public class Xob_wdata_pid_txt extends Xob_wdata_pid_base {
@Override public void Pid_bgn() { @Override public void Pid_bgn() {
pid_bldr = new Wdata_idx_bldr_pid(this, bldr, wiki, dump_fil_len); pid_bldr = new Wdata_idx_bldr_pid(this, bldr, wiki, dump_fil_len);
} Wdata_idx_bldr_pid pid_bldr; } Wdata_idx_bldr_pid pid_bldr;
@Override public void Pid_add(byte[] lang_key, byte[] prop_key, byte[] qid) { @Override public void Pid_add(byte[] lang_key, byte[] prop_key, byte[] qid, byte[] datatype) {
pid_bldr.Add(lang_key, prop_key, qid); pid_bldr.Add(lang_key, prop_key, qid);
} }
@Override public void Pid_end() { @Override public void Pid_end() {

Loading…
Cancel
Save