Skip to content

Commit

Permalink
fixes for factgrid
Browse files Browse the repository at this point in the history
  • Loading branch information
situx committed Jun 14, 2024
1 parent d28ddda commit 2cedb9c
Show file tree
Hide file tree
Showing 8 changed files with 146 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
from ...tasks.query.discovery.findrelatedconceptquerytask import FindRelatedConceptQueryTask

FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), '../ui/clusterviewdialog.ui'))
os.path.dirname(__file__), '../ui/graphrelationviewdialog.ui'))

MESSAGE_CATEGORY = 'ClusterviewDialog'

class ClusterViewDialog(QWidget, FORM_CLASS):
class GraphRelationViewDialog(QWidget, FORM_CLASS):

def __init__(self,triplestoreconf,concept,label=""):
super(QWidget, self).__init__()
Expand Down
14 changes: 12 additions & 2 deletions dialogs/menu/conceptcontextmenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
)
from qgis.PyQt.QtCore import QUrl

from ..dataview.clusterviewdialog import ClusterViewDialog
from ..dataview.graphrelationviewdialog import GraphRelationViewDialog
from ..tool.advancedquerydialog import AdvancedQueryDialog
from ...dialogs.util.bboxdialog import BBOXDialog
from ...util.ui.uiutils import UIUtils
from ...tasks.query.data.querylayertask import QueryLayerTask
Expand Down Expand Up @@ -75,6 +76,10 @@ def __init__(self,dlg,triplestoreconf,prefixes,position,context,item,preferredla
actionrelgeo = QAction("Check related concepts")
actionrelgeo.setIcon(UIUtils.countinstancesicon)
menu.addAction(actionrelgeo)
actionAdvancedQuery = QAction("Advanced Query")
actionAdvancedQuery.setIcon(UIUtils.addfeaturecollectionicon)
actionAdvancedQuery.triggered.connect(self.advancedQueryDialog)
menu.addAction(actionAdvancedQuery)
actionrelgeo.triggered.connect(self.relatedGeoConcepts)
actionqueryinstances = QAction("Query all instances")
actionqueryinstances.setIcon(UIUtils.queryinstancesicon)
Expand Down Expand Up @@ -222,10 +227,15 @@ def queryLinkedGeoInstance(self):
self.triplestoreconf, True, SPARQLUtils.labelFromURI(concept), None,0,True,None)
QgsApplication.taskManager().addTask(self.qlayerinstance)

def advancedQueryDialog(self):
concept = self.item.data(UIUtils.dataslot_conceptURI)
label = self.item.text()
AdvancedQueryDialog(self.triplestoreconf,concept,label)

def relatedGeoConcepts(self):
concept = self.item.data(UIUtils.dataslot_conceptURI)
label = self.item.text()
ClusterViewDialog(self.triplestoreconf,concept,label)
GraphRelationViewDialog(self.triplestoreconf,concept,label)
#if not label.endswith("]"):
# self.qtaskinstance = FindRelatedConceptQueryTask(
# "Getting related geo concepts for " + str(concept),
Expand Down
6 changes: 3 additions & 3 deletions dialogs/menu/tabcontextmenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def __init__(self,name,parent,position,triplestoreconf):

def saveClassesTreeToRDF(self, context):
filename, _filter = QFileDialog.getSaveFileName(
self, "Select output file ", "", "Linked Data (*.ttl *.n3 *.nt *.graphml)", )
self, "Select output file ", "", "Linked Data (*.ttl *.n3 *.nt *.graphml)", )
if filename == "":
return
result=set()
Expand All @@ -38,7 +38,7 @@ def saveClassesTreeToRDF(self, context):

def saveVisibleTreeToRDF(self, context):
filename, _filter = QFileDialog.getSaveFileName(
self, "Select output file ", "", "Linked Data (*.ttl *.n3 *.nt *.graphml)", )
self, "Select output file ", "", "Linked Data (*.ttl *.n3 *.nt *.graphml)", )
if filename == "":
return
result=set()
Expand All @@ -50,7 +50,7 @@ def saveVisibleTreeToRDF(self, context):

def saveTreeToRDF(self, context):
filename, _filter = QFileDialog.getSaveFileName(
self, "Select output file ", "", "Linked Data (*.ttl *.n3 *.nt *.graphml)", )
self, "Select output file ", "", "Linked Data (*.ttl *.n3 *.nt *.graphml)", )
if filename == "":
return
result=set()
Expand Down
8 changes: 4 additions & 4 deletions dialogs/sparql_unicorn_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -610,14 +610,14 @@ def conceptSelectAction(self):
querytext = ""
if concept is not None and concept.startswith("http"):
querytext = \
self.queryTemplates.itemData(self.queryTemplates.currentIndex())#.replace("wd:Q%%concept%% .", "wd:" + concept[concept.rfind('/') + 1:] + " .")
self.queryTemplates.itemData(self.queryTemplates.currentIndex()).replace("wd:Q%%concept%% .", "wd:" + concept[concept.rfind('/') + 1:] + " .")
elif concept is not None:
querytext = \
self.queryTemplates.itemData(self.queryTemplates.currentIndex())#.replace("wd:Q%%concept%% .", "wd:" + concept + " .")
self.queryTemplates.itemData(self.queryTemplates.currentIndex()).replace("wd:Q%%concept%% .", "wd:" + concept + " .")
else:
querytext = self.queryTemplates.itemData(self.queryTemplates.currentIndex())#.replace("%%concept%%", concept)
#QgsMessageLog.logMessage('Started task "{}"'.format("Concept: " + str(concept)), MESSAGE_CATEGORY,
# Qgis.Info)
QgsMessageLog.logMessage('Started task "{}"'.format("Concept: " + str(concept)), MESSAGE_CATEGORY,
Qgis.Info)
querytext=SPARQLUtils.queryPreProcessing(querytext,self.triplestoreconf[endpointIndex],concept)
self.inp_sparql2.setPlainText(querytext)
self.inp_sparql2.columnvars = {}
Expand Down
69 changes: 69 additions & 0 deletions dialogs/tool/advancedquerydialog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
from qgis.PyQt import uic
from qgis.PyQt import QtWidgets
from qgis.PyQt.QtWidgets import QStyle,QWidget,QMenu,QAction
from qgis.core import QgsApplication, QgsCoordinateReferenceSystem
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtGui import QStandardItemModel
from qgis.PyQt.QtCore import QSortFilterProxyModel

from ...util.sparqlutils import SPARQLUtils
from ...util.ui.uiutils import UIUtils
from ...tasks.query.discovery.findrelatedconceptquerytask import FindRelatedConceptQueryTask
import os.path

# This loads your .ui file so that PyQt can populate your plugin with the elements from Qt Designer
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), '../ui/advancedquerydialog.ui'))

##
# @brief The main dialog window of the SPARQLUnicorn QGIS Plugin.
class AdvancedQueryDialog(QtWidgets.QDialog, FORM_CLASS):
## The triple store configuration file
triplestoreconf = None
## Prefix map
prefixes = None
## LoadGraphTask for loading a graph from a file or uri
qtask = None

def __init__(self, triplestoreconf={}, concept="",title="Convert CRS"):
"""Constructor."""
super(QWidget, self).__init__()
self.setupUi(self)
self.setWindowTitle(title)
self.setWindowIcon(UIUtils.rdffileicon)
self.triplestoreconf = triplestoreconf
self.tablemodel = QStandardItemModel()
self.tablemodel.setHeaderData(0, Qt.Horizontal, "Ingoing Concept")
self.tablemodel.setHeaderData(1, Qt.Horizontal, "Ingoing Relation")
self.tablemodel.setHeaderData(2, Qt.Horizontal, "Outgoing Relation")
self.tablemodel.setHeaderData(3, Qt.Horizontal, "Target Concept")
self.tablemodel.insertRow(0)
self.nodetype = SPARQLUtils.classnode
self.filter_proxy_model = QSortFilterProxyModel()
self.filter_proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive)
self.filter_proxy_model.setSourceModel(self.tablemodel)
self.filter_proxy_model.setFilterKeyColumn(3)
self.tableView.setModel(self.filter_proxy_model)
self.tableView.setContextMenuPolicy(Qt.CustomContextMenu)
self.tableView.entered.connect(lambda modelindex: UIUtils.showTableURI(modelindex, self.tableView, self.statusBarLabel))
#self.tableView.doubleClicked.connect(self.showRelatedFromIndex)
#self.tableView.customContextMenuRequested.connect(self.onContext)
#self.filterTableEdit.textChanged.connect(self.filter_proxy_model.setFilterRegExp)
#self.filterTableComboBox.currentIndexChanged.connect(lambda: self.filter_proxy_model.setFilterKeyColumn(self.filterTableComboBox.currentIndex()))
self.show()


def getRelatedClassStatistics(self):
if self.concept == "" or self.concept is None:
return
self.qtask = FindRelatedConceptQueryTask("Querying related classes.... (" + str(self.concept) + ")",
self.triplestoreconf["resource"],
self.tablemodel,
self.concept,
self.label,
self.nodetype,
self.triplestoreconf,self.tableView)
QgsApplication.taskManager().addTask(self.qtask)



55 changes: 55 additions & 0 deletions dialogs/ui/advancedquerydialog.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AdvancedQueryDialog</class>
<widget class="QDialog" name="AdvancedQueryDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>740</width>
<height>431</height>
</rect>
</property>
<property name="windowTitle">
<string>Advanced Query Dialog</string>
</property>
<widget class="QWidget" name="gridLayoutWidget">
<property name="geometry">
<rect>
<x>9</x>
<y>9</y>
<width>711</width>
<height>411</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="1">
<widget class="QPushButton" name="queryButton">
<property name="text">
<string>Query Selection</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QTableView" name="tableView"/>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="cancelButton">
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>Query Single Layer</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>
File renamed without changes.
2 changes: 1 addition & 1 deletion util/sparqlutils.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ def queryPreProcessing(query,triplestoreconf,concept=None,convertToCollectionFor
query=query.replace("?con %%typeproperty%% %%concept%% .","%%concept%% %%collectionmemberproperty%% ?con .")
if concept is not None:
if "resource" in triplestoreconf and "url" in triplestoreconf["resource"] and ("wikidata" in triplestoreconf["resource"]["url"] or "factgrid" in triplestoreconf["resource"]["url"]) and concept[concept.find('(')+1:-1].startswith("Q"):
query=query.replace("%%concept%%",str("wd:" + concept[concept.find('(')+1:-1]))
query=query.replace("%%concept%%",str("wd:" + concept[concept.find('(')+1:]))
else:
query = query.replace("%%concept%%", "<" + str(concept) + ">")
typeproperty = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
Expand Down

0 comments on commit 2cedb9c

Please sign in to comment.