private IEnumerable <ParliamentPeriod> giveMeParliamentPeriods(DateTimeOffset startDate, DateTimeOffset?endDate) { string sparqlCommand = @" construct { ?parliamentPeriod a parl:ParliamentPeriod. }where { ?parliamentPeriod parl:parliamentPeriodStartDate ?parliamentPeriodStartDate. optional {?parliamentPeriod parl:parliamentPeriodEndDate ?parliamentPeriodEndDate} filter ( ((?parliamentPeriodStartDate <= @startDate) && ((?parliamentPeriodEndDate >= @startDate) || ((bound(?parliamentPeriodEndDate)=false) && ((@hasEndDate=false) || (?parliamentPeriodStartDate <= @endDate))))) || ((?parliamentPeriodStartDate >= @startDate) && ((?parliamentPeriodEndDate <= @endDate) || (@hasEndDate=false))) || ((?parliamentPeriodStartDate >= @startDate) && (((bound(?parliamentPeriodEndDate)=false) && (@hasEndDate=false)) || (?parliamentPeriodStartDate <= @endDate))) ) }"; SparqlParameterizedString sparql = new SparqlParameterizedString(sparqlCommand); sparql.Namespaces.AddNamespace("parl", new Uri(schemaNamespace)); sparql.SetLiteral("startDate", startDate.ToString("yyyy-MM-dd+00:00"), new Uri("http://www.w3.org/2001/XMLSchema#date")); sparql.SetLiteral("endDate", endDate.HasValue ? endDate.Value.ToString("yyyy-MM-dd+00:00") : string.Empty, new Uri("http://www.w3.org/2001/XMLSchema#date")); sparql.SetLiteral("hasEndDate", endDate.HasValue); List <Uri> parliamentPeriodUris = null; parliamentPeriodUris = GraphRetrieval.GetSubjects(sparql.ToString(), logger); if (parliamentPeriodUris != null) { return(parliamentPeriodUris.Select(p => new ParliamentPeriod() { Id = p })); } else { return(null); } }
private Answer giveMeOriginalAnswer(Uri questionId) { string command = @" construct{ ?question parl:questionHasAnswer ?originalAnswer. } where{ bind(@question as ?question) ?originalAnswer parl:answerHasQuestion ?question. optional {?originalAnswer parl:answerReplacesAnswer ?replacedAnswer} filter (bound(?replacedAnswer)=false) }"; SparqlParameterizedString sparql = new SparqlParameterizedString(command); sparql.Namespaces.AddNamespace("parl", new Uri(schemaNamespace)); sparql.SetUri("question", questionId); IGraph graph = GraphRetrieval.GetGraph(sparql.ToString(), logger, "true"); if (graph.IsEmpty) { return(null); } else { return new Answer() { Id = (graph.Triples.SingleOrDefault().Object as IUriNode).Uri } }; } }
public override BaseResource[] TransformSource(XDocument doc) { MnisAnsweringBody answeringBody = new MnisAnsweringBody(); XElement element = doc.Descendants(m + "properties").SingleOrDefault(); answeringBody.AnsweringBodyMnisId = element.Element(d + "AnsweringBody_Id").GetText(); string GroupHasNameSparqlCommand = @" construct { ?answeringBody parl:groupName ?name. } where { ?answeringBody parl:answeringBodyMnisId @id; parl:groupName ?name; . }"; SparqlParameterizedString sparql = new SparqlParameterizedString(GroupHasNameSparqlCommand); sparql.SetLiteral("id", answeringBody.AnsweringBodyMnisId); sparql.Namespaces.AddNamespace("parl", new Uri(schemaNamespace)); var groupNameGraph = GraphRetrieval.GetGraph(sparql.ToString(), logger); bool groupHasNoName = groupNameGraph.IsEmpty; if (groupHasNoName == true) { answeringBody.GroupName = element.Element(d + "Name").GetText(); } else { var currentName = groupNameGraph.GetTriplesWithPredicate(new Uri("https://id.parliament.uk/schema/groupName")).FirstOrDefault().Object.ToString(); answeringBody.GroupName = currentName; } string departmentId = element.Element(d + "Department_Id").GetText(); if (string.IsNullOrWhiteSpace(departmentId) == false) { Uri departmentUri = IdRetrieval.GetSubject("mnisDepartmentId", departmentId, false, logger); if (departmentUri != null) { answeringBody.Id = departmentUri; } else { logger.Warning($"Department ({departmentId}) not found for Answering Body ({answeringBody.AnsweringBodyMnisId})"); return(null); } } return(new BaseResource[] { answeringBody }); }
private static Uri GetMemberId(string objectValue, DateTimeOffset?DateTabled, Logger logger) { string command = @" construct{ ?member parl:sesId @objectValue. } where{ ?member parl:sesId @objectValue. }"; SparqlParameterizedString sparql = new SparqlParameterizedString(command); sparql.Namespaces.AddNamespace("parl", new Uri(schemaNamespace)); sparql.SetLiteral("objectValue", objectValue); IGraph graph = GraphRetrieval.GetGraph(sparql.ToString(), logger, "true"); IEnumerable <INode> nodes = graph.Triples.SubjectNodes; Uri result = null; if (nodes.Count() > 1) { command = @" construct{ ?member parl:sesId @objectValue. } where{ ?member parl:sesId @objectValue; parl:memberHasParliamentaryIncumbency ?incumbency. ?incumbency parl:startDate ?startDate. OPTIONAL { ?incumbency parl:endDate ?endDate.} FILTER (?startDate <= @dateTabled) FILTER ( !bound(?endDate) || (bound(?endDate) && ?endDate >= @dateTabled )) }"; sparql = new SparqlParameterizedString(command); sparql.Namespaces.AddNamespace("parl", new Uri(schemaNamespace)); sparql.SetLiteral("objectValue", objectValue); sparql.SetParameter("dateTabled", DateTabled.GetValueOrDefault().Date.ToLiteralDate(new NodeFactory())); graph = GraphRetrieval.GetGraph(sparql.ToString(), logger, "true"); result = ((IUriNode)graph.Triples.SubjectNodes.SingleOrDefault()).Uri; } else { result = ((IUriNode)nodes.SingleOrDefault()).Uri; } logger.Verbose($"Found existing ({result})"); return(result); }
private bool ExistsInTripleStore(string id, Logger logger) { string command = @"ask{ {@id ?p ?o.} union {?s ?p1 @id.} }"; SparqlParameterizedString sparql = new SparqlParameterizedString(command); sparql.SetUri("id", new Uri(id)); bool?result = GraphRetrieval.GetAskQueryResult(sparql.ToString(), logger, "true"); if (result.HasValue == false) { throw new ArgumentOutOfRangeException("No response from ask query", new Exception("Possible connectivity issue")); } return(result.Value); }
private AnsweringBodyAllocation giveMeCorrectingAnsweringBodyAllocation(Response data, Uri questionId) { AnsweringBodyAllocation answeringBodyAllocation = null; if (data.CorrectingAnsweringDeptSesId != null) { Uri answeringBodyId = IdRetrieval.GetSubject("sesId", data.CorrectingAnsweringDeptSesId, false, logger); if (answeringBodyId != null) { string command = @" construct{ ?question parl:questionHasAnsweringBodyAllocation ?questionHasAnsweringBodyAllocation. } where{ bind(@question as ?question) ?question parl:questionHasAnsweringBodyAllocation ?questionHasAnsweringBodyAllocation. ?questionHasAnsweringBodyAllocation parl:answeringBodyAllocationHasAnsweringBody @answeringBody. }"; SparqlParameterizedString sparql = new SparqlParameterizedString(command); sparql.Namespaces.AddNamespace("parl", new Uri(schemaNamespace)); sparql.SetUri("question", questionId); sparql.SetUri("answeringBody", answeringBodyId); IGraph graph = GraphRetrieval.GetGraph(sparql.ToString(), logger, "true"); answeringBodyAllocation = new AnsweringBodyAllocation() { Id = graph.IsEmpty ? GenerateNewId() : (graph.Triples.SingleOrDefault().Object as IUriNode).Uri, AnsweringBodyAllocationHasAnsweringBody = new AnsweringBody() { Id = answeringBodyId } }; } else { logger.Warning($"Answering body with Ses Id ({data.CorrectingAnsweringDeptSesId}) not found"); } } return(answeringBodyAllocation); }