示例#1
0
        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);
        }
示例#5
0
        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);
        }