/// <summary> /// Applies the query to the given federation /// </summary> public RDFAskQueryResult ApplyToFederation(RDFFederation federation) { if (federation != null) { return(this.ApplyToDataSource(federation)); } throw new RDFQueryException("Cannot execute ASK query because given \"federation\" parameter is null."); }
/// <summary> /// Adds the given federation to the federation /// </summary> public RDFFederation AddFederation(RDFFederation federation) { if (federation != null) { this.DataSources.Add(federation); } return(this); }
/// <summary> /// Applies the query to the given federation /// </summary> public RDFConstructQueryResult ApplyToFederation(RDFFederation federation) { if (federation != null) { this.PatternGroupResultTables.Clear(); this.PatternResultTables.Clear(); RDFConstructQueryResult constructResult = new RDFConstructQueryResult(this.ToString()); if (!this.IsEmpty) { //Iterate the pattern groups of the query var fedPatternResultTables = new Dictionary <RDFPatternGroup, List <DataTable> >(); foreach (RDFPatternGroup patternGroup in this.PatternGroups) { #region TrueFederations foreach (RDFStore store in federation.Stores.Values) { //Step 1: Evaluate the patterns of the current pattern group on the current store RDFConstructQueryEngine.EvaluatePatterns(this, patternGroup, store); //Step 2: Federate the patterns of the current pattern group on the current store if (!fedPatternResultTables.ContainsKey(patternGroup)) { fedPatternResultTables.Add(patternGroup, this.PatternResultTables[patternGroup]); } else { fedPatternResultTables[patternGroup].ForEach(fprt => fprt.Merge(this.PatternResultTables[patternGroup].Single(prt => prt.TableName.Equals(fprt.TableName, StringComparison.Ordinal)), true, MissingSchemaAction.Add)); } } this.PatternResultTables[patternGroup] = fedPatternResultTables[patternGroup]; #endregion //Step 3: Get the result table of the current pattern group RDFConstructQueryEngine.CombinePatterns(this, patternGroup); //Step 4: Apply the filters of the current pattern group to its result table RDFConstructQueryEngine.ApplyFilters(this, patternGroup); } //Step 5: Get the result table of the query DataTable queryResultTable = RDFQueryEngine.CombineTables(this.PatternGroupResultTables.Values.ToList <DataTable>(), false); //Step 6: Fill the templates from the result table DataTable filledResultTable = RDFConstructQueryEngine.FillTemplates(this, queryResultTable); //Step 7: Apply the modifiers of the query to the result table constructResult.ConstructResults = RDFConstructQueryEngine.ApplyModifiers(this, filledResultTable); } return(constructResult); } throw new RDFQueryException("Cannot execute CONSTRUCT query because given \"federation\" parameter is null."); }
/// <summary> /// Applies the query to the given federation /// </summary> public RDFDescribeQueryResult ApplyToFederation(RDFFederation federation) { if (federation != null) { return(new RDFQueryEngine().EvaluateDescribeQuery(this, federation)); } else { return(new RDFDescribeQueryResult(this.ToString())); } }
/// <summary> /// Applies the query to the given federation /// </summary> public RDFSelectQueryResult ApplyToFederation(RDFFederation federation) { if (federation != null) { return(RDFQueryEngine.CreateNew().EvaluateSelectQuery(this, federation)); } else { return(new RDFSelectQueryResult()); } }
/// <summary> /// Applies the query to the given federation /// </summary> public RDFConstructQueryResult ApplyToFederation(RDFFederation federation) { if (federation != null) { return(RDFQueryEngine.CreateNew().EvaluateConstructQuery(this, federation)); } else { return(new RDFConstructQueryResult(this.ToString())); } }
/// <summary> /// Applies the query to the given federation /// </summary> public RDFAskQueryResult ApplyToFederation(RDFFederation federation) { if (federation != null) { return(new RDFQueryEngine().EvaluateAskQuery(this, federation)); } else { return(new RDFAskQueryResult()); } }
/// <summary> /// Applies the query to the given federation /// </summary> public RDFAskQueryResult ApplyToFederation(RDFFederation federation) { if (federation != null) { this.PatternGroupResultTables.Clear(); this.PatternResultTables.Clear(); RDFAskQueryResult askResult = new RDFAskQueryResult(); if (!this.IsEmpty) { //Iterate the pattern groups of the query var fedPatternResultTables = new Dictionary <RDFPatternGroup, List <DataTable> >(); foreach (RDFPatternGroup patternGroup in this.PatternGroups) { #region TrueFederations foreach (RDFStore store in federation.Stores.Values) { //Step 1: Evaluate the patterns of the current pattern group on the current store RDFAskQueryEngine.EvaluatePatterns(this, patternGroup, store); //Step 2: Federate the patterns of the current pattern group on the current store if (!fedPatternResultTables.ContainsKey(patternGroup)) { fedPatternResultTables.Add(patternGroup, this.PatternResultTables[patternGroup]); } else { fedPatternResultTables[patternGroup].ForEach(fprt => fprt.Merge(this.PatternResultTables[patternGroup].Single(prt => prt.TableName.Equals(fprt.TableName, StringComparison.Ordinal)), true, MissingSchemaAction.Add)); } } this.PatternResultTables[patternGroup] = fedPatternResultTables[patternGroup]; #endregion //Step 3: Get the result table of the current pattern group RDFAskQueryEngine.CombinePatterns(this, patternGroup); //Step 4: Apply the filters of the current pattern group to its result table RDFAskQueryEngine.ApplyFilters(this, patternGroup); } //Step 5: Get the result table of the query DataTable queryResultTable = RDFQueryEngine.CombineTables(this.PatternGroupResultTables.Values.ToList <DataTable>(), false); //Step 6: Transform the result into a boolean response askResult.AskResult = (queryResultTable.Rows.Count > 0); } return(askResult); } throw new RDFQueryException("Cannot execute ASK query because given \"federation\" parameter is null."); }
/// <summary> /// Applies the query to the given federation /// </summary> public RDFConstructQueryResult ApplyToFederation(RDFFederation federation) => federation != null ? new RDFQueryEngine().EvaluateConstructQuery(this, federation) : new RDFConstructQueryResult(this.ToString());
/// <summary> /// Asynchronously applies the query to the given federation /// </summary> public Task <RDFConstructQueryResult> ApplyToFederationAsync(RDFFederation federation) => Task.Run(() => this.ApplyToFederation(federation));
/// <summary> /// Applies the query to the given federation /// </summary> public RDFDescribeQueryResult ApplyToFederation(RDFFederation federation) { if (federation != null) { this.PatternGroupResultTables.Clear(); this.PatternResultTables.Clear(); RDFDescribeQueryResult describeResult = new RDFDescribeQueryResult(this.ToString()); if (!this.IsEmpty) { //Iterate the pattern groups of the query var fedPatternResultTables = new Dictionary <RDFPatternGroup, List <DataTable> >(); foreach (RDFPatternGroup patternGroup in this.PatternGroups) { #region TrueFederations foreach (RDFStore store in federation.Stores.Values) { //Step 1: Evaluate the patterns of the current pattern group on the current store RDFDescribeQueryEngine.EvaluatePatterns(this, patternGroup, store); //Step 2: Federate the patterns of the current pattern group on the current store if (!fedPatternResultTables.ContainsKey(patternGroup)) { fedPatternResultTables.Add(patternGroup, this.PatternResultTables[patternGroup]); } else { fedPatternResultTables[patternGroup].ForEach(fprt => fprt.Merge(this.PatternResultTables[patternGroup].Single(prt => prt.TableName.Equals(fprt.TableName, StringComparison.Ordinal)), true, MissingSchemaAction.Add)); } } this.PatternResultTables[patternGroup] = fedPatternResultTables[patternGroup]; #endregion //Step 3: Get the result table of the current pattern group RDFDescribeQueryEngine.CombinePatterns(this, patternGroup); //Step 4: Apply the filters of the current pattern group to its result table RDFDescribeQueryEngine.ApplyFilters(this, patternGroup); } //Step 5: Get the result table of the query DataTable queryResultTable = RDFQueryEngine.CombineTables(this.PatternGroupResultTables.Values.ToList <DataTable>(), false); //Step 6: Describe the terms on each store and merge them in the federated result table DataTable describeResultTable = new DataTable(this.ToString()); foreach (RDFStore store in federation.Stores.Values) { describeResultTable.Merge(RDFDescribeQueryEngine.DescribeTerms(this, store, queryResultTable), true, MissingSchemaAction.Add); } //Step 7: Apply the modifiers of the query to the result table describeResult.DescribeResults = RDFDescribeQueryEngine.ApplyModifiers(this, describeResultTable); } else { //In this case the only chance to proceed is to have resources in the describe terms, //which will be used to search for S-P-O data. Variables are ignored in this scenario. if (this.DescribeTerms.Any(dt => dt is RDFResource)) { //Step 1: Describe the terms on each store and merge them in the federated result table DataTable describeResultTable = new DataTable(this.ToString()); foreach (RDFStore store in federation.Stores.Values) { describeResultTable.Merge(RDFDescribeQueryEngine.DescribeTerms(this, store, new DataTable()), true, MissingSchemaAction.Add); } //Step 2: Apply the modifiers of the query to the result table describeResult.DescribeResults = RDFDescribeQueryEngine.ApplyModifiers(this, describeResultTable); } } return(describeResult); } throw new RDFQueryException("Cannot execute DESCRIBE query because given \"federation\" parameter is null."); }
/// <summary> /// Asynchronously applies the query to the given federation /// </summary> public Task <RDFDescribeQueryResult> ApplyToFederationAsync(RDFFederation federation) => Task.Run(() => this.ApplyToFederation(federation));
/// <summary> /// Applies the query to the given federation /// </summary> public RDFAskQueryResult ApplyToFederation(RDFFederation federation) => federation != null ? new RDFQueryEngine().EvaluateAskQuery(this, federation) : new RDFAskQueryResult();