MediaWiki
Difference between revisions of "LexemeQueriesGenerator.js"
Line 58: | Line 58: | ||
} ); | } ); | ||
− | $( | + | $("#qglexems" ).append( dropDown.$element ); |
// Get the menu from the dropdown using the getMenu() method. | // Get the menu from the dropdown using the getMenu() method. |
Revision as of 15:42, 14 December 2021
console.log("User:Yug/MediaWiki:OOUI.js script loaded/ran");
// An example of a fieldset with horizontal layout.
var fieldset = new OO.ui.FieldsetLayout( {
label: 'HorizontalLayout'
} );
// Add an horizontal field layout
fieldset.addItems( [
new OO.ui.FieldLayout(
new OO.ui.Widget( {
content: [ new OO.ui.HorizontalLayout( {
items: [
new OO.ui.ButtonWidget( { label: 'Button' } ),
new OO.ui.ButtonGroupWidget( { items: [
new OO.ui.ToggleButtonWidget( { label: 'A' } ),
new OO.ui.ToggleButtonWidget( { label: 'B' } )
] } ),
new OO.ui.ButtonInputWidget( { label: 'ButtonInput' } ),
new OO.ui.TextInputWidget( { value: 'TextInput' } ),
new OO.ui.CheckboxInputWidget( { selected: true } ),
new OO.ui.RadioInputWidget( { selected: true } ),
new OO.ui.LabelWidget( { label: 'Label' } )
]
} ) ]
} ),
{
label: 'Multiple widgets shown as a single line, ' +
'as used in compact forms or in parts of a bigger widget.',
align: 'top'
}
)
] );
$( "#qglexems" ).append( fieldset.$element );
// Example: Create a DropdownWidget and use the getMenu() method to get the
// contained menu and modify it.
var dropDown = new OO.ui.DropdownWidget( {
label: 'Dropdown menu: Select one option',
menu: {
items: [
new OO.ui.MenuOptionWidget( {
data: 'a',
label: 'First'
} ),
new OO.ui.MenuOptionWidget( {
data: 'b',
label: 'Second'
} ),
new OO.ui.MenuOptionWidget( {
data: 'c',
label: 'Third'
} )
]
}
} );
$("#qglexems" ).append( dropDown.$element );
// Get the menu from the dropdown using the getMenu() method.
// In this example, the getItemFromData() method returns a reference to the option
// that contains the specified data (i.e., 'a', which is the first menu option).
// This option is then disabled with the setDisabled() method.
dropDown.getMenu().getItemFromData( 'a' ).setDisabled( true );
/* ***************************************************************************** */
/* ***************************************************************************** */
/* ***************************************************************************** */
/* ***************************************************************************** */
$("#qgold").html(`<link rel="stylesheet" href="https://maxcdn.boots_trapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<form>
<div class="row">
<div class="col">
<label for="lemma">Lemma</label>
<input type="text" class="form-control" placeholder="lemma" id="lemma" maxlength="15" name="lemma" id="lemma" value="book">
</div>
<div class="col">
<div class="form-group">
<label for="source_language">Source language</label>
<select class="form-control" id="source_language" name="source_language">
<option value="en">English</option>
<option value="fr">French</option>
<option value="es">Spanish</option>
<option value="pt">Portuguese</option>
<option value="de">German</option>
<option value="it">Italian</option>
</select>
</div>
</div>
<div class="col">
<div class="form-group">
<label for="part_of_speech_tag">Part-of-speech tag</label>
<select class="form-control" id="part_of_speech_tag" name="part_of_speech_tag">
<option>Noun</option>
<option>Adjective</option>
<option>Adverb</option>
<option>Verb</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="form-group">
<label for="information_categories">Information to retrieve (if available)</label>
<select class="form-control" id="information_categories" name="information_categories">
<option value="1">Just look it up!</option>
<option value="2">Senses</option>
<option value="3">Senses & Definitions</option>
<option value="4">Senses, Deinitions & Examples</option>
</select>
</div>
</div>
<div class="col">
<div class="form-group">
<label for="translation_languages">Translation language (only with Wikidata)</label>
<select class="form-control" id="translation_languages" name="translation_languages">
<option value="null"></option>
<option value="en">English</option>
<option value="fr">French</option>
<option value="es">Spanish</option>
<option value="pt">Portuguese</option>
<option value="de">German</option>
<option value="it">Italian</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<label for="exampleFormControlSelect2">Specify your target SPARQL endpoint: </label>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="target_SPARQL" id="Wikidata" checked>
<label class="form-check-label" for="Wikidata">Wikidata</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="target_SPARQL" id="Dbnary">
<label class="form-check-label" for="Dbnary">Dbnary</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="target_SPARQL" id="lingualibre">
<label class="form-check-label" for="lingualibre">LinguaLibre</label>
</div>
</div>
<div class="form-group">
<div class="row">
<div class="col">
<button type="button" class="btn btn-primary" onclick="generateQuery()" id="generate_query">Generate</button>
</div>
<div class="col">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="limit_100" name="limit_100">
<label class="form-check-label" for="limit_100">LIMIT 100 (for faster running)</label>
</div>
</div>
</div>
</div>
<div class="form-group">
<!-- <label for="generated_sparql_query">Generated SPARQL query</label> -->
<textarea class="form-control bg-light" id="generated_sparql_query" rows="20" name="generated_sparql_query"></textarea>
</div>
<button type="button" class="btn btn-primary" id="run_query" onclick="runQuery()">Run the query!</button>
</form>`);
// SOURCE: https://github.com/sinaahmadi/sinaahmadi.github.io/blob/master/_posts/2021-10-04-sparql-query-generator-for-lexicographical-data.md
// Author: Sina Ahmadi @sinaahmadi
// LICENSE: MIT
/* ********************************************************************** */
/* LANGUAGES & POS ****************************************************** */
// Current: Wikidata, Dbnary.
// List: https://www.wikidata.org/wiki/Help:Wikimedia_language_codes/lists/all
var languages_wiki = {
"en": "Q1860",
"fr": "Q150",
"es": "Q1321",
"pt": "Q5146",
"de": "Q188",
"it": "Q652"
};
// List:
var languages_dbnary = {
"en": "en",
"fr": "fr",
"es": "es",
"pt": "pt",
"de": "de",
"it": "it"
};
// List :
var posTags = {
"Noun": "Q1084",
"Adjective": "Q34698",
"Adverb": "Q380057",
"Verb": "Q24905"
};
/* ********************************************************************** */
/* QUERIES BASIS ******************************************************** */
// Current: Wikidata, Dbnary.
// Queries for Wikidata
var values = "\n\tVALUES ?word {'book'@GLWSSA}",
queryBasicWiki = "SELECT * WHERE {VALUESTOBEADDEDHERE\n\t?l a ontolex:LexicalEntry ;\n\t\tdct:language wd:LNGCDE ;\n\t\tontolex:lexicalForm ?form ;\n\t\twikibase:lexicalCategory wd:POSTAG ;\n\t\twikibase:lemma ?lemma .\n\t?form ontolex:representation ?word .\n}",
querySensesWiki = "SELECT * WHERE {VALUESTOBEADDEDHERE\n\t?l a ontolex:LexicalEntry ;\n\t\tdct:language wd:LNGCDE ;\n\t\tontolex:lexicalForm ?form ;\n\t\twikibase:lexicalCategory wd:POSTAG ;\n\t\twikibase:lemma ?lemma ;\n\t\tontolex:sense ?sense .\n\t?form ontolex:representation ?word .\n}",
queryDefWiki = "SELECT * WHERE {VALUESTOBEADDEDHERE\n\t?l a ontolex:LexicalEntry ;\n\t\tdct:language wd:LNGCDE ;\n\t\twikibase:lemma ?lemma ;\n\t\tontolex:lexicalForm ?form ;\n\t\twikibase:lexicalCategory ?category ;\n\t\tontolex:sense ?sense .\n\t?form ontolex:representation ?word .\n\t?language wdt:P218 \"GLWSSA\" .\n\t?sense skos:definition ?gloss .\n\tFILTER EXISTS {?l ontolex:sense ?sense }\n\tFILTER(LANG(?gloss) = \"GLWSSA\")\n}",
queryExamplesWiki = "SELECT * WHERE {VALUESTOBEADDEDHERE\n\t?l a ontolex:LexicalEntry ;\n\t\tdct:language wd:LNGCDE ;\n\t\twikibase:lemma ?lemma ;\n\t\tontolex:lexicalForm ?form ;\n\t\twikibase:lexicalCategory ?category ;\n\t\tontolex:sense ?sense .\n\t\t?language wdt:P218 \"GLWSSA\" .\n\t?form ontolex:representation ?word .\n\t?sense skos:definition ?gloss .\n\tOPTIONAL{\n\t\t?l p:P5831 ?statement .\n\t\t?statement ps:P5831 ?example .\n\t}\n\tFILTER EXISTS {?l ontolex:sense ?sense }\n\tFILTER(LANG(?gloss) = \"GLWSSA\")\n}",
queryTranslationWiki = "SELECT DISTINCT * WHERE {\n\t?sourec dct:language wd:LNGCDE;\n\t\twikibase:lemma ?sourceLemma;\n\t\tontolex:sense [ wdt:P5137 ?sense ].\n\t?target dct:language wd:LNGCDETRG;\n\t\twikibase:lemma ?targetLemma;\n\t\tontolex:sense [ wdt:P5137 ?sense ].\n}\nORDER BY ASC(UCASE(str(?sourceLemma)))\nLIMIT 100 ",
queryTranslationWikiLemma = "SELECT DISTINCT * WHERE {VALUESTOBEADDEDHERE\n\t?source dct:language wd:LNGCDE;\n\t\twikibase:lemma ?sourceLemma;\n\t\tontolex:lexicalForm ?form ;\n\t\twikibase:lexicalCategory wd:POSTAG ;\n\t\tontolex:sense [ wdt:P5137 ?sense ].\n\t?target dct:language wd:LNGCDETRG;\n\t\twikibase:lemma ?targetLemma;\n\t\tontolex:sense [ wdt:P5137 ?sense ].\n\t?form ontolex:representation ?word .\n}\nORDER BY ASC(UCASE(str(?sourceLemma))) ";
// Queries for Dbnary
var valuesDbnary = "\n\tVALUES ?label {'book'@GLWSSA}\n\tVALUES ?pos {<http://www.lexinfo.net/ontology/2.0/lexinfo#POSTAGNM>}",
queryBasicWikiDbnary = `SELECT * WHERE {VALUESTOBEADDEDHERE
?lexeme a ontolex:LexicalEntry ;
rdfs:label ?label ;
ontolex:canonicalForm ?form ;
lime:language ?lang ;
lexinfo:partOfSpeech ?pos .
FILTER(?lang = "GLWSSA")
}`,
querySensesWikiDbnary = `SELECT * WHERE {VALUESTOBEADDEDHERE
?lexeme a ontolex:LexicalEntry ;
rdfs:label ?label ;
ontolex:canonicalForm ?form ;
lime:language ?lang ;
lexinfo:partOfSpeech ?pos ;
ontolex:sense ?sense .
FILTER(?lang = "GLWSSA")
}`,
queryDefWikiDbnary = `SELECT ?lexeme ?label ?pos ?sense ?definition
WHERE {
?sense a ontolex:LexicalSense ;
skos:definition ?def .
?def rdf:value ?definition .
FILTER(lang(?definition) = "GLWSSA")
{
SELECT * WHERE {VALUESTOBEADDEDHERE
?lexeme a ontolex:LexicalEntry ;
rdfs:label ?label ;
ontolex:canonicalForm ?form ;
lime:language ?lang ;
lexinfo:partOfSpeech ?pos ;
ontolex:sense ?sense .
FILTER(?lang = "GLWSSA")
}
}
}`,
queryExamplesWikiDbnary = ``,
queryTranslationWikiDbnary = ``,
queryTranslationWikiLemmaDbnary = ``;
/* ********************************************************************** */
/* GENERATE QUERY STRING ************************************************ */
// Current: Wikidata, Dbnary.
function generateQuery() {
var lemma = document.getElementById("lemma").value;
var posTag = document.getElementById("part_of_speech_tag").value;
var sourceLanguage = document.getElementById("source_language").value;
var translationLanguage = document.getElementById("translation_languages").value;
var query = "";
var formValid = false;
if (document.getElementById('Wikidata').checked) {
if (translationLanguage != "null") {
if (lemma.length == 0) {
query = queryTranslationWiki;
} else {
query = queryTranslationWikiLemma;
}
} else {
switch (document.getElementById('information_categories').value) {
case "1":
query = queryBasicWiki;
break;
case "2":
query = querySensesWiki;
break;
case "3":
query = queryDefWiki;
break;
case "4":
query = queryExamplesWiki;
break;
}
}
} else {
switch (document.getElementById('information_categories').value) {
case "1":
query = queryBasicWikiDbnary;
break;
case "2":
query = querySensesWikiDbnary;
break;
case "3":
query = queryDefWikiDbnary;
break;
}
}
if (lemma.length != 0) {
val = document.getElementById('Wikidata').checked? values : valuesDbnary;
query = query.replace("VALUESTOBEADDEDHERE", val.replace("book", lemma));
} else {
query = query.replace("VALUESTOBEADDEDHERE", "");
}
query = query.replace("WORD", lemma);
query = query.replace("LNGCDE", languages_wiki[sourceLanguage]);
query = query.replaceAll("LNGCDETRG", languages_wiki[translationLanguage]);
query = query.replaceAll("GLWSSA", sourceLanguage);
query = query.replace("POSTAGNM", posTag.toLowerCase());
query = query.replace("POSTAG", posTags[posTag]);
// query = query.replace(";;", ";").concat("\n}").replace(";\n}", ".\n}");
if (document.getElementById('limit_100').checked) {
query = query.concat("\nLIMIT 100");
}
document.getElementById("generated_sparql_query").innerHTML = query;
}
/* ********************************************************************** */
/* OPENS EXTERNAL QUERY SERVICE ***************************************** */
// Current: Wikidata, Dbnary. Broken: lingualibre.
function runQuery() {
if (document.getElementById("generated_sparql_query").value != '') {
if (document.getElementById('Wikidata').checked) {
window.open("https://query.wikidata.org/#".concat(encodeURIComponent(document.getElementById("generated_sparql_query").value)), '_blank');
}
if (document.getElementById('Dbnary').checked) {
window.open("http://kaiko.getalp.org/sparql?default-graph-uri=&query=".concat(encodeURIComponent(document.getElementById("generated_sparql_query").value)), '_blank');
}
if (document.getElementById('lingualibre').checked) {
window.open("https://lingualibre.org/bigdata/#query".concat(encodeURIComponent(document.getElementById("generated_sparql_query").value)), '_blank');
}
}
}