123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- {% extends 'base.html' %}
- {% block title %}Term Search{% endblock %}
- {% block content %}
- <p>Enter terms to query:</p>
- <dl>
- <dt>Logic</dt>
- <dd>use "and" or "or" logic to concatenate multiple query criteria.</dd>
- <dt>Predicate</dt>
- <dd>a fully qualified or namespace-prefixed
- predicate URI in SPARQL notation, e.g.
- <code><http://www.w3.org/1999/02/22-rdf-syntax-ns#type></code>
- or
- <code>skos:prefLabel</code>.
- For a full list of namespace prefixes supported by this system,
- see the collapsable namespace reference at the bottom of this page.
- </dd>
- <dt>Operand</dt>
- <dd> Select an operand for the comparison. The "Matches Term" operand
- expects an RDF literal or URI, all others a string.</dd>
- <dt>Value</dt>
- <dd>Value to compare against. If "Matches Term" is selected, an RDF URI
- or literal in SPARQL notation should be used, e.g.
- <code><http://ex.org/ns/A></code>
- or
- <code>"title"^^xsd:string</code>.
- For other operands, use a plain string without quotes.</dd>
- </dd>
- </dl>
- <form id="term-search-form" method="POST" action="">
- <div class="my-sm-3 mb-2">
- <label for="logic">Logic</label>
- <select class="form-control" name="logic">
- <option value="and" selected>AND</option>
- <option value="or">OR</option>
- </select>
- </div>
- <div id="term-cont">
- <div class="term-block form-row">
- <div class="form-group col-md-4">
- <label for="pred[]">Predicate</label>
- <input type="text" class="form-control" name="pred[]">
- </div>
- <div class="form-group col-md-2">
- <label for="op[]">Operand</label>
- <select class="form-control" name="op[]">
- {% for op in operands %}
- <option value="{{op[0]}}">{{op[1]}}</option>
- {% endfor %}
- </select>
- </div>
- <div class="form-group col-md-5">
- <label for="val[]">Value</label>
- <input type="text" class="form-control" name="val[]">
- </div>
- <div class="form-group col-md-1">
- <a class="delete-row btn btn-danger" href="#">- Remove</a>
- </div>
- </div>
- </div>
- <div class="form-row my-sm-3">
- <a class="add-row btn btn-success" id="add-row" href="#">+ Add Row</a>
- </div>
- <div class="form-row my-sm-3">
- <input type="submit" id="submit-query" class="btn btn-primary btn-lg">
- </div>
- </form>
- <div id="search-results-wrap"></div>
- {% include 'namespaces.html' %}
- {% endblock %}
- {% block tail_js %}
- <script>
- function format_fields() {
- var conds = [];
- var terms = ['pred', 'op', 'val'];
- for (term of terms) {
- $(":input[name='" + term + "[]']").each(function(i) {
- if (typeof conds[i] == 'undefined') {
- conds[i] = {};
- }
- conds[i][term] = $(this).val();
- });
- }
- return conds
- }
- $(function(){
- $('.term-block').first().find('.delete-row').hide();
- $('#add-row').on('click', function(){
- var term = $('.term-block').last().clone(true, true);
- term.find('input[type="text"]').val('');
- term.find('select').val('');
- term.find('.delete-row').show();
- term.appendTo('#term-cont');
- });
- $('.delete-row').on('click', function(){
- $(this).closest('.term-block').remove();
- });
- $('#term-search-form').submit(function(ev) {
- $.ajax({
- type: 'POST',
- url: '',
- data: JSON.stringify({
- terms: format_fields(),
- logic: $('select[name="logic"]').val(),
- }),
- contentType: 'application/json; charset=utf-8',
- dataType: 'json',
- encode: true
- })
- .done(function(data) {
- //var cont = $('#search-results-wrap')
- $('#search-results-wrap').removeClass('bg-danger')
- .html('<h2>Search Results</h2>'
- + '<ul id="url-list"></ul>');
- for (url of data) {
- $('#url-list').append(
- '<li><a href="' + url + '">'
- + url + '</a></li>');
- }
- })
- .fail(function(data) {
- $('#search-results-wrap').addClass('bg-danger')
- .html(data.responseText);
- });
- ev.preventDefault();
- });
- });
- </script>
- {% endblock %}
|