Beispiel #1
0
    static void Main(string[] args)
    {
        ParserFactory      parserFactory      = new XsltParserFactory();
        TripleStoreFactory tripleStoreFactory = new MemoryTripleStoreFactory();

        TripleStore model = tripleStoreFactory.MakeTripleStore();

        // Parse the bloggers RDF file
        FileStream fileStream = new FileStream("./bloggers.rdf", FileMode.Open);

        Parser parser = parserFactory.MakeParser(tripleStoreFactory.MakeResourceFactory(), new StatementFactory());

        parser.NewStatement += model.GetStatementHandler();
        parser.Parse(fileStream, "");
        parser.NewStatement -= model.GetStatementHandler();


        /* Define the query. Equivalent to:
         *      ?blogger rdf:type foaf:Agent .
         *      ?blogger foaf:name ?name .
         */
        Query queryListOfBloggers = new Query();

        queryListOfBloggers.AddPattern(new Pattern(new Variable("blogger"), new UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"), new UriRef("http://xmlns.com/foaf/0.1/Agent")));
        queryListOfBloggers.AddPattern(new Pattern(new Variable("blogger"), new UriRef("http://xmlns.com/foaf/0.1/name"), new Variable("name")));

        IEnumerator solutions = model.Solve(queryListOfBloggers);

        while (solutions.MoveNext())
        {
            QuerySolution solution = (QuerySolution)solutions.Current;
            Console.WriteLine(solution["name"]);
        }
    }
Beispiel #2
0
        private ResourceDescription GetDescriptionOf(Resource theResource, TripleStore store, Hashtable processedResources)
        {
            ConciseBoundedDescription cbd = new ConciseBoundedDescription(theResource);

            IList denotingNodes = store.GetNodesDenoting(theResource);

            processedResources[theResource] = denotingNodes;

            foreach (GraphMember member in  denotingNodes)
            {
                cbd.AddDenotation(member, theResource);
            }

            Query query = new Query();

            query.AddPattern(new Pattern(store.GetBestDenotingNode(theResource), new Variable("pred"), new Variable("obj")));

            IEnumerator solutions = store.Solve(query);

            while (solutions.MoveNext())
            {
                QuerySolution solution = (QuerySolution)solutions.Current;

                foreach (GraphMember member in store.GetNodesDenoting(solution["pred"]))
                {
                    cbd.AddDenotation(member, solution["pred"]);
                }

                foreach (GraphMember member in store.GetNodesDenoting(solution["obj"]))
                {
                    cbd.AddDenotation(member, solution["obj"]);
                }

                cbd.Add(new ResourceStatement(theResource, solution["pred"], solution["obj"]));

                if (store.GetBestDenotingNode(solution["obj"]) is BlankNode)
                {
                    if (!processedResources.ContainsKey(solution["obj"]))
                    {
                        cbd.Add((ConciseBoundedDescription)GetDescriptionOf(solution["obj"], store, processedResources));
                    }
                }
            }

            return(cbd);
        }
Beispiel #3
0
        public TripleStore ExecuteTripleStore(TripleStore defaultStore)
        {
            MemoryTripleStore results = new MemoryTripleStore();

            if (HasPatterns)
            {
                IEnumerator solutions = defaultStore.Solve(this);
                while (solutions.MoveNext())
                {
                    QuerySolution solution = (QuerySolution)solutions.Current;
                    foreach (PatternTerm term in DescribeTerms)
                    {
                        if (term is Variable)
                        {
                            ResourceDescription description = defaultStore.GetDescriptionOf(solution[((Variable)term).Name], this.BoundingStrategy);
                            results.Add(description);
                        }
                    }
                }
            }
            foreach (PatternTerm term in DescribeTerms)
            {
                if (term is UriRef)
                {
                    ResourceDescription description = defaultStore.GetDescriptionOf((UriRef)term, this.BoundingStrategy);
                    results.Add(description);
                }
                else
                {
                    if (!HasPatterns)
                    {
                        throw new SparqlException("DESCRIBE query has no patterns but requests description of a variable");
                    }
                }
            }

            return(results);
        }
 public override IEnumerator GetSolutions(Query query, TripleStore tripleStore, bool explain)
 {
     return(tripleStore.Solve(query));
 }
        public void Process(Rule rule, TripleStore store)
        {
            Query query = new Query();

            if (rule.Antecedents.Count == 0)
            {
                ApplyConsequentStatements(rule, store);
                return;
            }


            foreach (Pattern pattern in rule.Antecedents)
            {
                query.AddPattern(pattern);
            }

            foreach (Pattern pattern in rule.Consequents)
            {
                if (pattern.GetSubject() is Variable)
                {
                    query.AddVariable(((Variable)pattern.GetSubject()));
                }
                if (pattern.GetPredicate() is Variable)
                {
                    query.AddVariable(((Variable)pattern.GetPredicate()));
                }
                if (pattern.GetObject() is Variable)
                {
                    query.AddVariable(((Variable)pattern.GetObject()));
                }
            }

            IEnumerator solutions = store.Solve(query);

            if (Explain)
            {
                ((BacktrackingQuerySolver)solutions).Explain = true;
            }

            ArrayList consequentStatements = new ArrayList();

            while (solutions.MoveNext())
            {
                QuerySolution solution = (QuerySolution)solutions.Current;

                foreach (Pattern pattern in rule.Consequents)
                {
                    Resource subjectResource;
                    Resource predicateResource;
                    Resource objectResource;

                    if (pattern.GetSubject() is Variable)
                    {
                        subjectResource = solution[((Variable)pattern.GetSubject()).Name];
                    }
                    else
                    {
                        subjectResource = store.GetResourceDenotedBy((GraphMember)pattern.GetSubject());
                    }

                    if (pattern.GetPredicate() is Variable)
                    {
                        predicateResource = solution[((Variable)pattern.GetPredicate()).Name];
                    }
                    else
                    {
                        predicateResource = store.GetResourceDenotedBy((GraphMember)pattern.GetPredicate());
                    }

                    if (pattern.GetObject() is Variable)
                    {
                        objectResource = solution[((Variable)pattern.GetObject()).Name];
                    }
                    else
                    {
                        objectResource = store.GetResourceDenotedBy((GraphMember)pattern.GetObject());
                    }

                    consequentStatements.Add(new ResourceStatement(subjectResource, predicateResource, objectResource));
                }
            }

            foreach (ResourceStatement statement in consequentStatements)
            {
                store.Add(statement);
            }
        }
Beispiel #6
0
 public IEnumerator ExecuteEnumerator(TripleStore defaultStore)
 {
     return(defaultStore.Solve(this));
 }