Skip to content
Snippets Groups Projects

Dev

Merged Benedikt Heinrichs requested to merge dev into main
4 files
+ 76
9
Compare changes
  • Side-by-side
  • Inline
Files
4
@@ -43,8 +43,59 @@ namespace AimsBackend.Controllers
/// <param name="targetClass"></param>
/// <returns></returns>
[HttpGet(Name = "GetMetadata")]
public IEnumerable<string> Get(string? subject, string? predicate, string? query, Uri? targetClass)
public IEnumerable<string> Get(
string? subject,
string? predicate,
string? query,
Uri? targetClass)
{
return MetadataQuery(subject, predicate, query, null, targetClass);
}
/// <summary>
/// Gets metadata by a query and targetClass parameter and returns a list of text/turtle formatted metadata
/// </summary>
/// <param name="subject"></param>
/// <param name="predicate"></param>
/// <param name="query"></param>
/// <param name="values"></param>
/// <param name="targetClass"></param>
/// <returns></returns>
[HttpPost("/query", Name = "PostQueryMetadata")]
public IEnumerable<string> Post(
string? subject,
string? predicate,
string? query,
List<PredicateObject>? values,
Uri? targetClass)
{
return MetadataQuery(subject, predicate, query, values, targetClass);
}
private IEnumerable<string> MetadataQuery(string? subject, string? predicate, string? query, List<PredicateObject>? values, Uri? targetClass)
{
var valueFilter = "";
var queryStringFilters = new List<Action<SparqlParameterizedString>>();
if (values is not null)
{
var count = 1;
foreach (var value in values)
{
valueFilter +=
@$"FILTER(REGEX(str(?p), @pred{count})) .
FILTER(REGEX(str(?o), @obj{count})) .
";
var localCount = count;
var localPred = value.Predicate;
var localObj = value.Object;
queryStringFilters.Add((query) => query.SetLiteral($"pred{localCount}", localPred));
queryStringFilters.Add((query) => query.SetLiteral($"obj{localCount}", localObj));
count++;
}
}
var queryString = new SparqlParameterizedString
{
CommandText = @"SELECT DISTINCT ?g WHERE {
@@ -54,6 +105,7 @@ namespace AimsBackend.Controllers
" + (subject != null ? "FILTER(REGEX(str(?s), @subject)) ." : "") + @"
" + (predicate != null ? "FILTER(REGEX(str(?p), @predicate)) ." : "") + @"
" + (query != null ? "FILTER(REGEX(str(?o), @query)) ." : "") + @"
" + valueFilter + @"
} .
FILTER(REGEX(str(?g), @graphPrefix)) .
}"
@@ -74,6 +126,10 @@ namespace AimsBackend.Controllers
{
queryString.SetLiteral("query", query);
}
foreach (var queryStringFilter in queryStringFilters)
{
queryStringFilter(queryString);
}
queryString.SetLiteral("graphPrefix", _graphPrefix);
var resultSet = QueryEndpoint.QueryWithResultSet(queryString.ToString());
Loading