diff --git a/cesareBrowse.html b/cesareBrowse.html
new file mode 100644
index 0000000..863528d
--- /dev/null
+++ b/cesareBrowse.html
@@ -0,0 +1,79 @@
+
+
+
+
+
+browsing La Divina Commedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/css/browsingldc.css b/css/browsingldc.css
new file mode 100644
index 0000000..1b6b56e
--- /dev/null
+++ b/css/browsingldc.css
@@ -0,0 +1,184 @@
+@charset "UTF-8";
+/* stylelint-disable selector-list-comma-newline-after, property-no-vendor-prefix */
+
+/*
+ * Globals
+ */
+
+body {
+ font-family: Georgia, "Times New Roman", Times, serif;
+ color: #555;
+}
+
+h1, .h1,
+h2, .h2,
+h3, .h3,
+h4, .h4,
+h5, .h5,
+h6, .h6 {
+ margin-top: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-weight: 400;
+ color: #333;
+}
+
+
+/*
+ * Override Bootstrap's default container.
+ */
+
+@media (min-width: 1200px) {
+ .container {
+ width: 970px;
+ }
+}
+
+
+/*
+ * Masthead for nav
+ */
+
+.blog-masthead {
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -2px 5px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 -2px 5px rgba(0, 0, 0, .1);
+}
+
+/* Nav links */
+.blog-nav-item {
+ position: relative;
+ display: inline-block;
+ padding: 10px;
+ font-weight: 500;
+ color: #cdddeb;
+}
+.blog-nav-item:hover,
+.blog-nav-item:focus {
+ color: #fff;
+ text-decoration: none;
+}
+
+/* Active state gets a caret at the bottom */
+.blog-nav .active {
+ color: #fff;
+}
+.blog-nav .active:after {
+ position: absolute;
+ bottom: 0;
+ left: 50%;
+ width: 0;
+ height: 0;
+ margin-left: -5px;
+ vertical-align: middle;
+ content: " ";
+ border-right: 5px solid transparent;
+ border-bottom: 5px solid;
+ border-left: 5px solid transparent;
+}
+
+
+/*
+ * Blog name and description
+ */
+
+.blog-header {
+ padding-top: 20px;
+ padding-bottom: 20px;
+}
+.blog-title {
+ margin-top: 30px;
+ margin-bottom: 0;
+ font-size: 60px;
+ font-weight: 400;
+}
+.blog-description {
+ font-size: 20px;
+ color: #999;
+}
+
+
+/*
+ * Main column and sidebar layout
+ */
+
+.blog-main {
+ font-size: 18px;
+ line-height: 1.5;
+}
+
+/* Sidebar modules for boxing content */
+.sidebar-module {
+ padding: 15px;
+ margin: 0 -15px 15px;
+}
+.sidebar-module-inset {
+ padding: 15px;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+.sidebar-module-inset p:last-child,
+.sidebar-module-inset ul:last-child,
+.sidebar-module-inset ol:last-child {
+ margin-bottom: 0;
+}
+
+
+/* Pagination */
+.pager {
+ margin-bottom: 60px;
+ text-align: left;
+}
+.pager > li > a {
+ width: 140px;
+ padding: 10px 20px;
+ text-align: center;
+ border-radius: 30px;
+}
+
+
+/*
+ * Blog posts
+ */
+
+.blog-post {
+ margin-bottom: 60px;
+}
+.blog-post-title {
+ margin-bottom: 5px;
+ font-size: 40px;
+}
+.blog-post-meta {
+ margin-bottom: 20px;
+ color: #999;
+}
+
+/*
+ * Canto
+ */
+
+.canto {
+ margin-bottom: 60px;
+}
+.titolo-canto {
+ margin-bottom: 5px;
+ font-size: 40px;
+}
+.canto-meta {
+ margin-bottom: 20px;
+ color: #999;
+}
+
+/*
+ * Footer
+ */
+
+.blog-footer {
+ padding: 40px 0;
+ color: #999;
+ text-align: center;
+ background-color: #f9f9f9;
+ border-top: 1px solid #e5e5e5;
+}
+.blog-footer p:last-child {
+ margin-bottom: 0;
+}
\ No newline at end of file
diff --git a/js/cesareBrowse.js b/js/cesareBrowse.js
new file mode 100644
index 0000000..e856ed4
--- /dev/null
+++ b/js/cesareBrowse.js
@@ -0,0 +1,121 @@
+/**
+ *
+ */
+ $(document).ready(function() {
+
+
+ const sparqlGenerator = sparqljs.Generator;
+ const myEngine = new Comunica.QueryEngine();
+ const sparqlEndpoint = "https://hdnlab1.isti.cnr.it/fuseki/commediaontosintgra/query";
+ var listaVersi = new Set()
+
+ $('#cantica1').on('click', function() {
+
+ alert("test fava")
+ activateMenuItem ('#cantica1')
+ jsonQuery = versiCantica("cantica1");
+ execQuery = new sparqlGenerator().stringify(jsonQuery);
+ executeQueryVersi(execQuery);
+
+ });
+
+ jQuery(document).delegate('.navig-canto', 'click', function(e) {
+ $('.canto').each(function() {
+ $(this).attr("style", 'display:none');
+ });
+ $("#"+$(this).attr('name').replace(" ","_")).attr('style','display:block')
+
+
+ });
+
+ //Utility functions
+
+ //activate navigation menu items
+
+ function activateMenuItem(menuItem){
+ $('.blog-nav-item').each(function() {
+ $(this).attr("class", $(this).attr("class").replace(' active',''));
+ });
+ $(menuItem).attr("class", $(menuItem).attr("class")+' active');
+ }
+
+ async function executeQueryVersi(query){
+ bindingsStream = await myEngine.queryBindings(query, { sources: [ { type: 'sparql', value: sparqlEndpoint }, ], });
+ alert(query)
+ try {
+ var listaCanti = new Set()
+ listaVersi = new Set()
+
+ bindingsStream.on('data', (binding) => {
+ //console.log(binding.toString()); // Quick way to print bindings for testing
+ //console.log(binding.has('sub')); // Will be true
+
+ //la lista dei canti
+ listaCanti.add( binding.get('Canto').value)
+ //la lista dei versi
+ var obj = new Object();
+ obj.numverso = binding.get('NumeroVerso').value;
+ obj.verso = binding.get('Verso').value;
+ obj.canto = binding.get('Canto').value;
+ obj.from = binding.get('from').value;
+ obj.to = binding.get('to').value;
+ listaVersi.add(obj)
+
+ });
+ bindingsStream.on('end', () => {
+
+ var orderedListaCanti = Array.from(listaCanti)
+ orderedListaCanti = orderedListaCanti.sort((a, b) => {
+ if (parseInt(a.split(" ")[1]) < parseInt(b.split(" ")[1])) {
+ return -1;
+ }
+ });
+
+ var orderedListaVersi = Array.from(listaVersi)
+ orderedListaVersi = orderedListaVersi.sort((a, b) => {
+ if (parseInt(a.numverso) < parseInt(b.numverso)) {
+ return -1;
+ }
+ });
+
+
+ for (canto of orderedListaCanti){
+ var licanto = $('')
+ licanto.attr('name', canto)
+ licanto.attr('href', "#")
+ licanto.append(canto)
+
+ licanto.appendTo('#listacanti')
+ var divcanto=$('')
+ var titolocanto=$('')
+ titolocanto.append(canto)
+ divcanto.attr('class', 'canto')
+ divcanto.attr('style', 'display:none')
+ divcanto.attr('id', canto.replace(" ","_"))
+ titolocanto.appendTo(divcanto)
+ divcanto.appendTo(' .blog-main')
+ }
+
+ for (verso of orderedListaVersi){
+ var elementoverso=$('')
+ elementoverso.append(verso.numverso+". "+verso.verso)
+ elementoverso.attr("style", "line-height: 0.5em")
+
+ elementoverso.appendTo('#'+verso.canto.replace(" ","_"))
+
+
+ }
+
+
+ });
+ }
+ catch(err) {
+ console.log(err.message);
+ $("#loader").hide();
+ };
+ };
+
+
+
+});
+
\ No newline at end of file
diff --git a/js/utils.js b/js/utils.js
index 5bb6464..22ff022 100644
--- a/js/utils.js
+++ b/js/utils.js
@@ -75,7 +75,29 @@ WHERE {
LIMIT 10
`
-//ORDER BY (?Cantica) (?Canto)
+// Per restituire i versi di una cantica
+var qVersiCantica=`
+ PREFIX ecrm:
+ PREFIX orl:
+ PREFIX ontolex:
+ PREFIX olires:
+ PREFIX xsd:
+ PREFIX text:
+ PREFIx hdn:
+
+ SELECT (?textver AS ?Verso) (?NumVerso AS ?NumeroVerso) (?t_canto AS ?Canto) (?t_cantica AS ?Cantica) ?from ?to
+ WHERE {
+ ?ver ecrm:P190_Has_Symbolic_Content ?textver;
+ olires:hasNumber ?NumVerso;
+ olires:OccursInRegion ?reg;
+ ecrm:P148i_is_component_of ?canto.
+ ?reg olires:fragmentRegionFrom ?from;
+ olires:fragmentRegionTo ?to .
+ ?canto ecrm:P102_has_title ?t_canto;
+ ecrm:P148i_is_component_of ?cantica.
+ ?cantica ecrm:P102_has_title ?t_cantica.
+ FILTER regex(?t_cantica,"Inferno","i") .
+ }`
var hdnquerygrammar = `
Expression
@@ -181,7 +203,17 @@ function writesearchValue(form) {
return `Cerco: ${strq} ${form.query.value}, ${form.tipo.value}, ${strcategoria}`
}
-// the basic initial query is parsed
+//restituisce la query per ottenere tutti i versi di una cantica
+
+function versiCantica(cantica) {
+ var SparqlParser = sparqljs.Parser;
+ var parser = new SparqlParser();
+ return parser.parse(qVersiCantica);
+
+
+}
+
+// the basic initial query is parsed RIMUOVERE
function gimmespq() {
var SparqlParser = sparqljs.Parser;