buildingsmart-norway / maskinlesbar_v440

Repository for å utvikle og tilgjengeliggjøre maskinlesbare beskrivelse- og kodesystemer
MIT License
16 stars 7 forks source link

Eksempel - SPARQL-spørring med dotNetRDF for Byggverkselement-koder #11

Closed espenshi closed 4 years ago

espenshi commented 4 years ago

Her er mitt eksempel på SPARQL-spørring med dotNetRDF for å hente alle koder for klasser som arver fra Byggverkselement. Spørringen gir resultatet jeg ønsker, men gi meg gjerne tilbakemelding på forbedring.

Jeg håper dette kan være til hjelp for noen andre. Legg det gjerne i Wikien.

using VDS.RDF;
using VDS.RDF.Query;
using VDS.RDF.Query.Builder;
public void GetV440Codes()
{
    SparqlRemoteEndpoint endpoint = new SparqlRemoteEndpoint(new Uri("http://rdfspatial.vegdata.no:7200/repositories/V440"));

    var prefixes = new NamespaceMapper(true);
    prefixes.AddNamespace("rdfs", new Uri("http://www.w3.org/2000/01/rdf-schema#"));
    prefixes.AddNamespace("owl", new Uri("http://www.w3.org/2002/07/owl#"));
    prefixes.AddNamespace("v440", new Uri("http://rdf.vegdata.no/V440/v440-owl#"));
    prefixes.AddNamespace("v440bd", new Uri("http://rdf.vegdata.no/V440/v440-brudata-owl#"));

    string uri = "uri";
    string code = "code";
    string name = "name";
    var queryBuilder = QueryBuilder
        .Select(new string[] { uri, code, name })
        .Where(
            (triplePatternBuilder) =>
            {
                triplePatternBuilder
                    .Subject(uri)
                    .PredicateUri("rdfs:subClassOf+")
                    .Object(new Uri("http://rdf.vegdata.no/V440/v440-owl#Byggverkselement"));
                triplePatternBuilder
                    .Subject(uri)
                    .PredicateUri("rdfs:label")
                    .Object(name);
                triplePatternBuilder
                    .Subject(uri)
                    .PredicateUri("v440:kode")
                    .Object(code);
            });
    queryBuilder.Prefixes = prefixes;

    var query = queryBuilder.BuildQuery().ToString();

    SparqlResultSet results = endpoint.QueryWithResultSet(query);

    foreach (SparqlResult result in results)
    {
        Console.WriteLine($"URI: {result.Value(uri).ToString()} Code: {result.Value(code).ToString()} Label: {result.Value(name).ToString()}");
    }
}

Dette skal resultere i følgende query:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX v440: <http://rdf.vegdata.no/V440/v440-owl#>
PREFIX v440bd: <http://rdf.vegdata.no/V440/v440-brudata-owl#>

SELECT ?uri ?code ?name WHERE
{ 
  ?uri rdfs:subClassOf+ v440:Byggverkselement . 
  ?uri rdfs:label ?name . 
  ?uri v440:kode ?code . 
}
SigveMartin commented 4 years ago

Nydelig! Tusen takk, vi legger den inn i wikien :-)

tor. 30. apr. 2020, 16:26 skrev Espen notifications@github.com:

Her er mitt eksempel på SPARQL-spørring med dotNetRDF for å hente alle koder for klasser som arver fra Byggverkselement. Spørringen gir resultatet jeg ønsker, men gi meg gjerne tilbakemelding på forbedring.

Jeg håper dette kan være til hjelp for noen andre. Legg det gjerne i Wikien.

using VDS.RDF;

using VDS.RDF.Query;

using VDS.RDF.Query.Builder;

public void GetV440Codes()

{

SparqlRemoteEndpoint endpoint = new SparqlRemoteEndpoint(new Uri("http://rdfspatial.vegdata.no:7200/repositories/V440"));

var prefixes = new NamespaceMapper(true);

prefixes.AddNamespace("rdfs", new Uri("http://www.w3.org/2000/01/rdf-schema#"));

prefixes.AddNamespace("owl", new Uri("http://www.w3.org/2002/07/owl#"));

prefixes.AddNamespace("v440", new Uri("http://rdf.vegdata.no/V440/v440-owl#"));

prefixes.AddNamespace("v440bd", new Uri("http://rdf.vegdata.no/V440/v440-brudata-owl#"));

string uri = "uri";

string code = "code";

string name = "name";

var queryBuilder = QueryBuilder

    .Select(new string[] { uri, code, name })

    .Where(

        (triplePatternBuilder) =>

        {

            triplePatternBuilder

                .Subject(uri)

                .PredicateUri("rdfs:subClassOf+")

                .Object(new Uri("http://rdf.vegdata.no/V440/v440-owl#Byggverkselement"));

            triplePatternBuilder

                .Subject(uri)

                .PredicateUri("rdfs:label")

                .Object(name);

            triplePatternBuilder

                .Subject(uri)

                .PredicateUri("v440:kode")

                .Object(code);

        });

queryBuilder.Prefixes = prefixes;

var query = queryBuilder.BuildQuery().ToString();

SparqlResultSet results = endpoint.QueryWithResultSet(query);

foreach (SparqlResult result in results)

{

    Console.WriteLine($"URI: {result.Value(uri).ToString()} Code: {result.Value(code).ToString()} Label: {result.Value(name).ToString()}");

}

}

Dette skal resultere i følgende query:

PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema#

PREFIX owl: http://www.w3.org/2002/07/owl#

PREFIX v440: http://rdf.vegdata.no/V440/v440-owl#

PREFIX v440bd: http://rdf.vegdata.no/V440/v440-brudata-owl#

SELECT ?uri ?code ?name WHERE

{

?uri rdfs:subClassOf+ v440:Byggverkselement .

?uri rdfs:label ?name .

?uri v440:kode ?code .

}

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/buildingsmart-norway/maskinlesbar_v440/issues/11, or unsubscribe https://github.com/notifications/unsubscribe-auth/AC66BNKOFCXHRUCNNT6O7WDRPGDAVANCNFSM4MVTRKCA .

SigveMartin commented 4 years ago

Her er lenke til hvor det ligger i WIKI: https://github.com/buildingsmart-norway/maskinlesbar_v440/wiki/02-Tilgang-til-ontologien#sparql-sp%C3%B8rring-med-dotnetrdf-for-%C3%A5-hente-alle-koder-for-klasser-som-arver-fra-byggverkselement-laget-av-espenshi-fra-edr-medeso

Lukker denne issuen, så er det tilgjengelig i lukkede issues og i wiki.