Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • Issue/2309-docs
  • Issue/xxxx-searchMetadata
  • Test/xxxx-docker
  • Test/xxxx-returnDB
  • dev
  • gitkeep
  • main
  • v1.0.0
  • v1.0.1
  • v1.0.2
  • v1.1.0
  • v1.1.1
  • v1.1.2
  • v1.1.3
  • v1.2.0
  • v1.2.1
  • v1.2.2
  • v1.3.0
18 results

Target

Select target project
  • coscine/backend/apis/aimsbackend
1 result
Select Git revision
  • Issue/2309-docs
  • Issue/xxxx-searchMetadata
  • Test/xxxx-docker
  • Test/xxxx-returnDB
  • dev
  • gitkeep
  • main
  • v1.0.0
  • v1.0.1
  • v1.0.2
  • v1.1.0
  • v1.1.1
  • v1.1.2
  • v1.1.3
  • v1.2.0
  • v1.2.1
  • v1.2.2
  • v1.3.0
18 results
Show changes
Commits on Source (4)
......@@ -6,14 +6,14 @@
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>c5b1289f-8de8-4291-a227-1803cf3aaec2</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<Version>1.2.2</Version></PropertyGroup>
<Version>1.3.0</Version></PropertyGroup>
<ItemGroup>
<PackageReference Include="Coscine.Configuration" Version="2.1.0" />
<PackageReference Include="Coscine.Configuration" Version="2.1.1" />
<PackageReference Include="dotNetRDF" Version="2.7.5" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NSwag.AspNetCore" Version="13.18.2" />
</ItemGroup>
</Project>
......@@ -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());
......
namespace AimsBackend.Model
{
public class PredicateObject
{
public string Predicate { get; set; } = null!;
public string Object { get; set; } = null!;
}
}
......@@ -3,15 +3,18 @@ var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddOpenApiDocument((settings) =>
{
settings.Title = "AimsBackend";
});
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseSwagger();
app.UseSwaggerUI();
app.UseOpenApi();
app.UseSwaggerUi3();
app.UseReDoc();
app.UseCors(builder => builder
.AllowAnyOrigin()
......