Skip to content

Commit eaa824e

Browse files
committed
refactors to use lod_storage endpoint manager
1 parent 2d74694 commit eaa824e

File tree

9 files changed

+212
-215
lines changed

9 files changed

+212
-215
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ dependencies = [
2626
# https://github.com/WolfgangFahl/nicegui_widgets
2727
"ngwidgets>=0.30.0",
2828
# https://pypi.org/project/pyLodStorage/
29-
"pyLodStorage>=0.18.0",
29+
"pyLodStorage>=0.18.1",
3030
# https://pypi.org/project/py-3rdparty-mediawiki/
3131
"py-3rdparty-mediawiki>=0.18.1",
3232
"wikitextparser",

snapquery/endpoint.py

Lines changed: 0 additions & 91 deletions
This file was deleted.

snapquery/prefix_merger.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
"""
2+
Created 2024
3+
4+
@author: tholzheim
5+
6+
Move to separate module in 2025-12-01 by wf
7+
"""
8+
from enum import Enum
9+
10+
from lodstorage.query import Query
11+
from snapquery.endpoint import Endpoint
12+
from snapquery.snapquery_core import NamedQuery
13+
from snapquery.sparql_analyzer import SparqlAnalyzer
14+
15+
16+
class QueryPrefixMerger(Enum):
17+
"""
18+
SPARQL Query prefix merger
19+
"""
20+
21+
RAW = "raw"
22+
SIMPLE_MERGER = "simple merger"
23+
ANALYSIS_MERGER = "analysis merger"
24+
25+
@classmethod
26+
def _missing_(cls, key):
27+
return cls.default_merger()
28+
29+
@classmethod
30+
def default_merger(cls) -> "QueryPrefixMerger":
31+
return cls.SIMPLE_MERGER
32+
33+
@classmethod
34+
def get_by_name(cls, name: str) -> "QueryPrefixMerger":
35+
merger_map = {merger.name: merger.value for merger in QueryPrefixMerger}
36+
merger_value = merger_map.get(name, None)
37+
merger = QueryPrefixMerger(merger_value)
38+
return merger
39+
40+
@classmethod
41+
def merge_prefixes(
42+
cls,
43+
named_query: NamedQuery,
44+
query: Query,
45+
endpoint: Endpoint,
46+
merger: "QueryPrefixMerger",
47+
) -> str:
48+
"""
49+
Merge prefixes with the given merger
50+
Args:
51+
named_query (NamedQuery):
52+
query (Query):
53+
endpoint (Endpoint):
54+
merger (QueryPrefixMerger):
55+
56+
Returns:
57+
merged query
58+
"""
59+
if merger == QueryPrefixMerger.SIMPLE_MERGER:
60+
return cls.simple_prefix_merger(query.query, endpoint)
61+
elif merger == QueryPrefixMerger.ANALYSIS_MERGER:
62+
return cls.analysis_prefix_merger(query.query)
63+
else:
64+
return query.query
65+
66+
@classmethod
67+
def simple_prefix_merger(cls, query_str: str, endpoint: Endpoint) -> str:
68+
"""
69+
Simple prefix merger
70+
Args:
71+
query_str (str): the query string
72+
endpoint (Endpoint): the endpoint
73+
74+
Returns:
75+
merged query
76+
"""
77+
prefixes = endpoint.prefixes if hasattr(endpoint, "prefixes") else None
78+
merged_query = query_str
79+
if prefixes:
80+
merged_query = f"{prefixes}\n{merged_query}"
81+
return merged_query
82+
83+
@classmethod
84+
def analysis_prefix_merger(cls, query_str: str) -> str:
85+
"""
86+
Analysis prefix merger
87+
Args:
88+
query_str
89+
90+
Returns:
91+
merged query
92+
"""
93+
merged_query = SparqlAnalyzer.add_missing_prefixes(query_str)
94+
return merged_query
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Optional SPARQL endpoints for snapquery
2+
# WF 2025-12-01 - new format
3+
# state nees to be checked
4+
endpoints:
5+
wikidata-openlinksw:
6+
description: OpenLink Virtuoso demo (unstable).
7+
lang: sparql
8+
endpoint: https://wikidata.demo.openlinksw.com/sparql
9+
website: https://wikidata.demo.openlinksw.com/sparql
10+
database: virtuoso
11+
method: POST
12+
calls_per_minute: 20
13+
prefix_sets:
14+
- rdf
15+
- wikidata
16+
17+
wikidata-triply:
18+
description: TriplyDB mirror.
19+
lang: sparql
20+
method: POST
21+
database: TriplyDB
22+
endpoint: https://api.triplydb.com/datasets/wikimedia/wikidata/sparql
23+
website: https://triplydb.com/wikimedia/wikidata/sparql
24+
calls_per_minute: 30
25+
prefix_sets:
26+
- rdf
27+
- wikidata
28+
29+
wikidata-qlever:
30+
description: QLever Freiburg Wikidata.
31+
lang: sparql
32+
method: POST
33+
database: qlever
34+
endpoint: https://qlever.cs.uni-freiburg.de/api/wikidata
35+
website: https://qlever.cs.uni-freiburg.de/wikidata
36+
calls_per_minute: 60
37+
prefix_sets:
38+
- rdf
39+
- wikidata
40+
- commons
41+
42+
wikidata-qlever-dbis:
43+
description: QLever RWTH Wikidata.
44+
lang: sparql
45+
method: POST
46+
database: qlever
47+
endpoint: https://qlever-api.wikidata.dbis.rwth-aachen.de/
48+
website: https://qlever.wikidata.dbis.rwth-aachen.de/wikidata
49+
calls_per_minute: 60
50+
prefix_sets:
51+
- rdf
52+
- wikidata
53+
54+
wikidata-scatter:
55+
description: Scatter experimental.
56+
lang: sparql
57+
endpoint: https://query-direct2.orbopengraph.com/bigdata/namespace/wdq/sparql
58+
website: https://scatter.red/
59+
database: blazegraph
60+
method: GET
61+
calls_per_minute: 20
62+
prefix_sets:
63+
- rdf
64+
- wikidata
65+
66+
orkg:
67+
description: ORKG (rate-limited).
68+
lang: sparql
69+
endpoint: https://orkg.org/triplestore
70+
website: https://orkg.org/sparql
71+
database: virtuoso
72+
prefix_sets:
73+
- rdf
74+
- orkg
75+
76+
dblp-qlever:
77+
description: DBLP QLever Freiburg.
78+
lang: sparql
79+
method: POST
80+
database: qlever
81+
endpoint: https://qlever.cs.uni-freiburg.de/api/dblp
82+
website: https://qlever.cs.uni-freiburg.de/dblp
83+
calls_per_minute: 60
84+
prefix_sets:
85+
- rdf
86+
- dblp
87+
88+
dblp-trier:
89+
description: DBLP Trier mirror.
90+
lang: sparql
91+
method: POST
92+
database: qlever
93+
endpoint: https://archimedes.uni-trier.de/sparql
94+
website: https://archimedes.uni-trier.de
95+
calls_per_minute: 30
96+
prefix_sets:
97+
- rdf
98+
- dblp

0 commit comments

Comments
 (0)