User:Molarus/SPARQL-Endpoint-01.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
$(document).ready(function(){
var feature = (function() {
test = function() {
var d = "<div id='toptool' style='padding:3px;border:thin solid black;position:absolute;right:0px;top:15px;background-color:#ffe1bc'>SPARQL- und Infobox-Abfragetool V0.7<br/>" ;
d += "<tr id='description-d1'>";
d += "<input type='button' value='load SPARQL' id='button-SPARQL'>";
d += "<input type='button' value='load top WPdata' id='button-WPdata'>";
d += "<input type='button' value='compute' id='button-WPcompute'>";
d += "<input type='button' value='next WPdata' id='button-next-WPdata'>";
d += "<input type='button' value='info' id='button-info'></br>";
d += "Parameter: <input type='text' size='8' id='infobox_parameter_1' value='HÖHE'>";
d += " <select id='menu'><option selected value='datatype_quantity'>quantity</option><option value='datatype_item'>item</option></select>";
d += " Parameter (qual): <input type='text' size='10' id='infobox_parameter_2' value='HÖHE-BEZUG'>";
d += " Parameter (ref): <input type='text' size='15' id='infobox_parameter_nachweis' value='NACHWEIS-FLÄCHE'>";
d +="<p id='infobox_form'></p>";
d += "<tr><p align='center'><textarea id='message' cols='80' rows='5' lang='en'>begin with clicking the button 'load SPARQL'";
d += "</textarea>";
d +="<p id='weblink'></p>";
d += "</tr></div>" ;
$('#mw-content-text').append ( d ) ;
var WDproperty_statm = 'P2044'; // P64, Höhe über dem Meeresspiegel=P2044
var WDvalue_statm;
var WDvalue_statm_x = '+'; // '+' oder '-'
var WDvalue_statm_unit = 'Q11573'; // Q15, Meter=Q11573, Kilometer=Q828224, Hektar=Q35852, Quadratkilometer=Q712226, Kubikkilometer=Q4243638
var WDqualiproperty = 'P459'; // P48, Bestimmungsmethode=P459
var WDqualivalue = 'unknown'; // DE-NHN = 1398875 (Normalhöhennull), DE-NN, DE-HN, AT, CH
var WDrefproperty1 = 'P143'; // P143, importiert aus
var WDrefvalue1 = '48183'; // Q48183=deWP
var WDrefproperty2 = 'P1476'; // P48, Titel=P1476
var WDrefvalue2 = 'test ref 1';
var WDrefproperty3 = 'P854'; // P31, URL=P854
var WDrefvalue3 = 'https://www.wikidata.org';
var WDrefproperty4 = 'P813'; // P813= abgerufen am
var WDrefvalue4 = '+2020-01-01T00:00:00Z';
$('#button-WPcompute').click(function () { // 'button-WPcompute' geklickt
var el = document.getElementById('weblink');
var WDitem = el.firstChild.toString();
WDitem = 'Q'+WDitem.match(/\d+/);
console.log('WDqualivalue= '+WDqualivalue);
var quantity = " item = <input type='text' size='10' id='infobox_item' value='"+WDitem+"'></br>"; // 'Q1421'
quantity += " property (statm) = <input type='text' size='7' id='infobox_property' value='"+WDproperty_statm+"'>";
quantity += " value (statm): amount = <input type='text' size='10' id='infobox_amount' value='"+WDvalue_statm_x+WDvalue_statm+"'>"; //WDvalue '+395.23'
quantity += " unit = <input type='text' size='10' id='infobox_unit' value='"+WDvalue_statm_unit+"'>";
quantity += " <input type='button' value='OK' id='statement_OK'></br>";
quantity += " property (quali) = <input type='text' size='7' id='quali_property' value='"+WDqualiproperty+"'>";
quantity += " value (quali) = <input type='text' size='21' id='quali_value' value='"+WDqualivalue+"'>";
quantity += " <input type='button' value='OK' id='qualifier_OK'></br>";
quantity += " property (ref) = <input type='text' size='7' id='ref_property_1' value='"+WDrefproperty1+"'>";
quantity += " value (ref) = <input type='text' size='25' id='ref_value_1' value='"+WDrefvalue1+"'>";
quantity += " <input type='button' value='OK' id='references_1_OK'></br>";
quantity += " property (ref) = <input type='text' size='7' id='ref_property_2' value='"+WDrefproperty2+"'>";
quantity += " value (ref) = <input type='text' size='25' id='ref_value_2' value='"+WDrefvalue2+"'>";
quantity += " <input type='button' value='OK' id='references_2_OK'></br>";
quantity += " property (ref) = <input type='text' size='7' id='ref_property_3' value='"+WDrefproperty3+"'>";
quantity += " value (ref) = <input type='text' size='25' id='ref_value_3' value='"+WDrefvalue3+"'>";
quantity += " <input type='button' value='OK' id='references_3_OK'></br>";
quantity += " property (ref) = <input type='text' size='7' id='ref_property_4' value='"+WDrefproperty4+"'>";
quantity += " value (ref) = <input type='text' size='25' id='ref_value_4' value='"+WDrefvalue4+"'>";
quantity += " <input type='button' value='OK' id='references_4_OK'>";
quantity += " <input type='button' value='ref OK' id='references_all_OK'></br>";
quantity += " ref: <input type='text' size='70' id='var' value='{'>";
var item = "Parameter testWD: item = <input type='text' size='10' id='infobox_item' value='"+WDitem+"'></br>";
item += "Reference: property 1 = <input type='text' size='10' id='ref_property_1' value='"+WDrefproperty1+"'>";
item += "value = <input type='text' size='10' id='ref_value_1' value='test ref 1'></br>";
item += "Reference: property 2 = <input type='text' size='10' id='ref_property_2' value='"+WDrefproperty2+"'>";
item += "value = <input type='text' size='10' id='ref_value_2' value='test ref 2'>";
//console.log(document.getElementById('menu').value);
if (document.getElementById('menu').value == 'datatype_quantity') {
$('#infobox_form').empty();
$('#infobox_form').append(quantity);
}
if (document.getElementById('menu').value == 'datatype_item') {
$('#infobox_form').empty();
$('#infobox_form').append(item);
}
$('#references_1_OK').click(function () { // 'references_1_OK' geklickt
var string = '"'+document.getElementById("ref_property_1").value+'":[{"snaktype":"value","property":"';
string += document.getElementById("ref_property_1").value+'","datavalue":{"type":"wikibase-entityid","value":';
string += '{"entity-type":"item","numeric-id":'+document.getElementById("ref_value_1").value+'}}}]';
document.getElementById("var").value = document.getElementById("var").value + string;
$("#references_1_OK").css("background-color", "#FFFF00"); $("#references_1_OK").val('set');
});
$('#references_2_OK').click(function () { // 'references_2_OK' geklickt, monolingualtext
var string = ',"'+document.getElementById("ref_property_2").value + '":[{"snaktype":"value","property":"';
string += document.getElementById("ref_property_2").value+'","datavalue":{"value":{"text":"';
string += document.getElementById("ref_value_2").value+'","language":"de"},"type":"monolingualtext"},"datatype":"monolingualtext"}]';
document.getElementById("var").value = document.getElementById("var").value + string;
$("#references_2_OK").css("background-color", "#FFFF00"); $("#references_2_OK").val('set');
});
$('#references_3_OK').click(function () { // 'references_3_OK' geklickt
var string = ',"'+document.getElementById("ref_property_3").value+'":[{"snaktype":"value","property":"';
string += document.getElementById("ref_property_3").value+'","datavalue":{"value":"';
string += document.getElementById("ref_value_3").value+'","type":"string"},"datatype": "url"}]';
document.getElementById("var").value = document.getElementById("var").value + string;
$("#references_3_OK").css("background-color", "#FFFF00"); $("#references_3_OK").val('set');
});
$('#references_4_OK').click(function () { // 'references_3_OK' geklickt
var string = ',"'+document.getElementById("ref_property_4").value+'":[{"snaktype":"value","property":"';
string += document.getElementById("ref_property_4").value+'","datavalue":{"value":{"time":"';
string += document.getElementById("ref_value_4").value+'","timezone":0,"before":0,"after":0,"precision":11,"calendarmodel":';
string += '"http://www.wikidata.org/entity/Q1985727"},"type":"time"},"datatype":"time"}]';
document.getElementById("var").value = document.getElementById("var").value + string;
$("#references_4_OK").css("background-color", "#FFFF00"); $("#references_4_OK").val('set');
}); // "string" - string ist nicht OK
$('#references_all_OK').click(function () { // 'references_4_OK' geklickt
document.getElementById("var").value = document.getElementById("var").value + '}';
var string_all = document.getElementById("var").value ;
console.log(string_all); $('#message').val(string_all);
createClaim_ref ( document.getElementById('infobox_item').value, document.getElementById('infobox_property').value, string_all);
$("#references_all_OK").css("background-color", "#90EE90"); $("#references_all_OK").val('done');
});
$('#statement_OK').click(function () { // 'statement_OK' geklickt
var string1 = '{"amount":"'+document.getElementById("infobox_amount").value; // property-value pair
string1 += '","unit":"http://www.wikidata.org/entity/'+document.getElementById("infobox_unit").value+'",';
string1 += '"upperBound":"'+document.getElementById("infobox_amount").value+'",';
string1 += '"lowerBound":"'+document.getElementById("infobox_amount").value+'"}';
tryCreateClaim(document.getElementById('infobox_item').value, document.getElementById('infobox_property').value, string1);
}); // funktioniert, 30.11.2015
$('#qualifier_OK').click(function () { // 'qualifier_OK' geklickt
var string2 ='{"entity-type":"item","numeric-id":'+document.getElementById("quali_value").value+'}'; //'"'+document.getElementById("quali_value").value+'"'; //qualifier
createClaim_quali ( document.getElementById('infobox_item').value, document.getElementById('infobox_property').value, string2);
//console.log('qualifier_OK'); $('#message').val('qualifier_OK');
//$("#qualifier_OK").css("background-color", "#90EE90"); $("#qualifier_OK").val('done');
}); // funktioniert, 30.11.2015
});
function createClaim_ref( wd_entity , wd_property, ref3){
console.log ( "createClaim_ref " + wd_entity + " / " + wd_property + " / " + ref3) ;
//api = '/w/api.php' ;
$.post ('/w/api.php', { action: 'query', meta: 'tokens', type: 'csrf', titles: wd_entity, format: 'json' },
function ( data ) {
console.log(data);
var mytoken = data.query.tokens.csrftoken ;
if ( undefined === mytoken ) { console.log ( "Cannot get edit token for " + entity ); return; }
$.post ('/w/api.php', { action: 'wbgetclaims', entity: wd_entity, property: wd_property, format: 'json' },
function ( data ) {
console.log(data);
console.log('createClaim_ref '+ data.claims[wd_property][0].id);
$.post ('/w/api.php', { action: 'wbsetreference', statement: data.claims[wd_property][0].id, snaks: ref3, token: mytoken, format: 'json'},
function ( data ) {
console.log(data);
if (data.error !== undefined ) { console.log("Fehler-Code: "+data.error.code ); $('#message').val('Can´t create reference: '+data.error.code);}
if (data.success === 1) {
console.log ( "Creating reference 3 ", ref3 ) ;
$('#message').val('Creating ' + wd_entity + ' / ' + ref3);
$("#statement_OK").css("background-color", "#90EE90"); $("#statement_OK").val('done');
}
}, 'json' ) ;
}, 'json' ) ;
}, 'json' ) ;
}
$('#button-SPARQL').click(function () { // 'button-SPARQL' geklickt
//get_testsparql();
$('#message').val('Loading SPARQL-data. ');
get_sparql();
}); // funktioniert, 20.11.2015
$('#button-WPdata').click(function () { // 'button-WPdata' geklickt
//get_testWPdata();
get_WPdata();
}); // funktioniert, 21.10.2015
$('#button-info').click(function () {
newwindow2=window.open('','name','height=200,width=250');
var tmp = newwindow2.document;
tmp.write('<html><head><title>infos</title></head>');
tmp.write('<script></script>');
tmp.write('<body><ul><li>DE-NHN = Q1398875</li><li>DE-NN = Q268449</li><li>AT = Q23202</li><li>CH = Q694278</li></ul> ');
tmp.write('</body></html>');
tmp.close();
}); // funktioniert 14.12.2015
$('#button-next-WPdata').click(function () { // 'button-next-WP' geklickt
var verschwunden;
var el = document.getElementById('weblink');
verschwunden = el.removeChild(el.firstChild);
verschwunden = el.removeChild(el.firstChild);
verschwunden = el.removeChild(el.firstChild);
verschwunden = el.removeChild(el.firstChild);
$('#infobox_form').empty();
$('#message').val('press button "load top WPdata" until there is no top WPdata left');
}); // funktioniert, 30.11.2015
function tryCreateClaim( wd_entity , wd_property, value ) {
//console.log ( "tryCreateClaim " + wd_entity + " / " + wd_property + " / " + value) ;
api = '/w/api.php' ;
$.post ( api , { action: 'wbgetclaims', entity: wd_entity, property: wd_property, format: 'json' },
function ( data ) {
console.log(data);
if ( undefined === data.claims[wd_property] ) {
//console.log ( wd_property+' not exists for '+ wd_entity ) ;
createClaim ( wd_entity, wd_property, value);
} else {
console.log ( wd_property+' exists for '+ wd_entity ) ;
}
} ) ;
}
function createClaim( wd_entity , wd_property , val){
//console.log ( "createClaim " + wd_entity + " / " + wd_property + " / " + val) ;
api = '/w/api.php' ;
$.post ( api , { action: 'query', meta: 'tokens', type: 'csrf', titles: wd_entity, format: 'json' },
function ( data ) {
//console.log(data);
var mytoken = data.query.tokens.csrftoken ;
//console.log (data.query.tokens);
if ( undefined === mytoken ) { console.log ( "Cannot get edit token for " + entity ); return; }
$.post ( api , { action: 'wbcreateclaim', entity: wd_entity, snaktype: 'value', property: wd_property,
value: val, token: mytoken, format: 'json' },
function ( data ) {
console.log(data);
if (data.error !== undefined ) { console.log("Fehler-Code: "+data.error.code ); $('#message').val('Can´t create claim: '+data.error.code);}
if (data.success === 1) {
console.log ( "Creating " + wd_entity + " / " + wd_property + " / " + val ) ;
$('#message').val('Creating ' + wd_entity + ' / ' + wd_property + ' / ' + val);
$("#statement_OK").css("background-color", "#90EE90"); $("#statement_OK").val('done');
}
}, 'json' ) ;
}, 'json' ) ;
}
function createClaim_quali( wd_entity , wd_property, qualifier){
console.log ( "createClaim_quali " + wd_entity + " / " + wd_property + " / " + qualifier) ;
api = '/w/api.php' ;
$.post ( api , {
action : 'query' ,
meta : 'tokens' ,
type : 'csrf' ,
titles : wd_entity ,
format : 'json'
} , function ( data ) {
console.log(data);
var mytoken = data.query.tokens.csrftoken ;
//console.log (data.query.tokens);
if ( undefined === mytoken ) {
console.log ( "Cannot get edit token for " + entity ) ;
return ;
}
$.post ( api , {
action : 'wbgetclaims' ,
entity : wd_entity ,
property : wd_property ,
format : 'json'
} , function ( data ) {
//console.log(data);
//console.log('createClaim_quali '+data.claims[wd_property][0].id);
//console.log ( "try to creat qualifier ", qualifier ) ;
$.post ( api , {
action : 'wbsetqualifier' ,
claim : data.claims[wd_property][0].id ,
snaktype : 'value',
property : document.getElementById("quali_property").value,
value : qualifier, //für items '{"entity-type":"item","numeric-id":1421}', // für strings '"GdyjxP8I6XB3"',
token : mytoken ,
format : 'json'
} , function ( data ) {
console.log(data);
if (data.error !== undefined ) { console.log("Fehler-Code: "+data.error.code ); $('#message').val('Can´t create property: '+data.error.code);}
if (data.success === 1) {
console.log ( "Creating qualifier ", document.getElementById("quali_property").value, " ", qualifier ) ;
$('#message').val('Creating qualifier ' + wd_entity + ' / ' + document.getElementById("quali_property").value + ' / ' + qualifier);
$("#qualifier_OK").css("background-color", "#90EE90"); $("#qualifier_OK").val('done');
}
}, 'json' ) ;
}, 'json' ) ;
}, 'json' ) ;
}
function get_WPdata(){
var output;
var el = document.getElementById('weblink');
console.log(el.childNodes[2].textContent); // find WP-Lemma
console.log('Parameter 1 = ' + infobox_parameter_1.value);
console.log('Parameter 2 = ' + infobox_parameter_2.value);
console.log('Nachweis = ' + infobox_parameter_nachweis.value);
mw.loader.using( 'mediawiki.ForeignApi' ).done( function () {
var api = new mw.ForeignApi( 'https://de.wikipedia.org/w/api.php' );
api.get( {
action: 'parse',
format: 'json',
page: el.childNodes[2].textContent, // 'Bodensee',
prop: 'wikitext',
section: 0
} ).done( function ( data ) {
//console.log(data);
var string0 = data.parse.wikitext['*'];
// für Parameter 1
var re = new RegExp(infobox_parameter_1.value+' ?=.+\n');
var string1 = string0.match(re); //(/HÖHE = .+\n/);
console.log("string1:", string1);
if (string1 !== null) {
var pos1 = 1 + string1[0].indexOf('=');
var res1 = string1[0].slice(pos1);
console.log(string1[0], 'value of parameter is: ' +res1);
output = infobox_parameter_1.value + ' = ' + res1;
WDvalue_statm = res1.match(/\d+[.]?\d*/);
WDvalue_statm_x = res1.match(/[+,-]/); // '+' or '-'
if (WDvalue_statm_x === null) {WDvalue_statm_x = '+'}
console.log('>'+WDvalue_statm+'<');
} else {
console.log('Parameter 1 not found');
output = 'Parameter 1 not found\n';
}
// für Parameter (qualifier)
re = new RegExp(infobox_parameter_2.value+' ?=.+\n');
string1 = string0.match(re); //(/HÖHE = .+\n/);
if (string1 !== null) {
var pos2 = 1 + string1[0].indexOf('=');
var res2 = string1[0].slice(pos2);
console.log(string1[0], 'Value of parameter (qualifier) is: ' +res2);
output = output + infobox_parameter_2.value + ' =' + res2;
var str = res2.match(/CH|AT|DE-NHN|DE-NN/); // /\w+[-]?\w*/
WDqualivalue = '1398875'; // Standard
if (str=='CH') { WDqualivalue = '694278'; } //"Meter über Meer" für CH
if (str=='AT') { WDqualivalue = '23202' } //"Meter über Adria" für AT
if (str=='DE-NHN') { WDqualivalue = '1398875' } //"Normalhöhennull" für DE
if (str=='DE-NN') { WDqualivalue = '268449' } //"Normalnull" für DE
} else {
console.log('Parameter (qualifier) nicht gefunden');
output = output + 'Parameter (qualifier) nicht gefunden\n';
}
// für references
re = new RegExp(infobox_parameter_nachweis.value+' ?=.+\n');
var string2 = string0.match(re); //(/NACHWEIS-HÖHE = .+\n/);
if (string2 !== null) {
var pos3 = 1 + string2[0].indexOf('=');
var res3 = string2[0].slice(pos3);
console.log(string2[0], 'Value of parameter (ref) is: ' +res3);
output = output + infobox_parameter_nachweis.value + ' = ' + res3;
} else {
console.log('Nachweis nicht gefunden');
output = output +'Nachweis nicht gefunden';
}
$('#message').val(output);
} );
} );
}
function get_sparql(){
var query =
"PREFIX wikibase: <http://wikiba.se/ontology#>" +
"PREFIX wd: <http://www.wikidata.org/entity/>" +
"PREFIX wdt: <http://www.wikidata.org/prop/direct/>" +
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>" +
"PREFIX schema: <http://schema.org/>" +
"SELECT ?p ?pLabel ?p_article WHERE {" +
"VALUES ?z1 {wd:Q183 wd:Q40 wd:Q39}" +
"?p wdt:P31 wd:Q23397 FILTER NOT EXISTS {?p wdt:P2044 ?x }." +
"?p wdt:P17 ?z1." +
"SERVICE wikibase:label {bd:serviceParam wikibase:language 'en,de'}" +
"OPTIONAL {" +
"?p_article schema:about ?p ." +
"?p_article schema:inLanguage 'de' ." +
"FILTER (SUBSTR(str(?p_article), 1, 25) = 'https://de.wikipedia.org/')}" +
"} LIMIT 2000";
$.ajax({
method: 'GET',
url: 'https://query.wikidata.org/bigdata/namespace/wdq/sparql?query=' + encodeURIComponent( query ), //query,
headers: {Accept: 'application/sparql-results+json'},
success: function(data, textStatus, jqXHR) {
$('#message').val('SPARQL-data loaded ');
var length = data.results.bindings.length; //length of json
//console.log(length);
var output='';
var alias1, string1, string2, string3, uri_dec;
$('#weblink').empty();
for (i = 0; i < length; i++) {
string1 = data.results.bindings[i].p_article.value;
uri_dec = decodeURIComponent(string1); // decode a URI
string1 = uri_dec; // console.log(uri_dec);
string2 = string1.substring(string1.lastIndexOf('/')+1,string1.length);
string3 = data.results.bindings[i].p.value;
output = output + string3.substring(string3.lastIndexOf('/')+1,string1.length) + ' - ' +
data.results.bindings[i].pLabel.value + ' - ' + string2 + '\n';
alias1 = 'Q'+data.results.bindings[i].p.value.match(/\d+/ );
$('#weblink').append(alias1.link(data.results.bindings[i].p.value)+' - '+data.results.bindings[i].pLabel.value+' - ');
$('#weblink').append(string2+'</br>');
} // end for-loop
//$('#message').val(output);
}
});
}
}; // end function test
return {
test: test
};
})();
feature.test ();
});