MediaWiki

Difference between revisions of "LexemeQueriesGenerator.js"

Line 1: Line 1:
$( function (){
+
console.log("User:Yug/MediaWiki:OOUI.js script loaded/ran");
console.log("User:Yug/MediaWiki:OOUI.js script loaded/ran");
+
 
});
 
 
// An example of a fieldset with horizontal layout.
 
// An example of a fieldset with horizontal layout.
 
var fieldset = new OO.ui.FieldsetLayout( {
 
var fieldset = new OO.ui.FieldsetLayout( {
Line 35: Line 34:
  
 
$( "#qglexems" ).append( fieldset.$element );
 
$( "#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'
 +
} )
 +
]
 +
}
 +
} );
 +
 +
$( document.body ).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 );
  
 
/* ***************************************************************************** */
 
/* ***************************************************************************** */

Revision as of 12:05, 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'
				} )
			]
		}
	} );
 
$( document.body ).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');
     }
   }
 }