예제 #1
0
        /// <summary>
        /// Applies a Grouping on a given Variable to the Binder Groups from a previous Grouping
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <param name="groups">Binder Group to subgroup</param>
        /// <returns></returns>
        public override List <BindingGroup> Apply(SparqlEvaluationContext context, List <BindingGroup> groups)
        {
            List <BindingGroup> outgroups = new List <BindingGroup>();
            BindingGroup        nulls     = new BindingGroup();

            foreach (BindingGroup group in groups)
            {
                Dictionary <INode, BindingGroup> subgroups = new Dictionary <INode, BindingGroup>();

                foreach (int id in group.BindingIDs)
                {
                    INode value = context.Binder.Value(this._name, id);

                    if (value != null)
                    {
                        if (!subgroups.ContainsKey(value))
                        {
                            subgroups.Add(value, new BindingGroup(group));
                            if (this.AssignVariable != null)
                            {
                                subgroups[value].AddAssignment(this.AssignVariable, value);
                            }
                        }

                        subgroups[value].Add(id);
                    }
                    else
                    {
                        nulls.Add(id);
                    }
                }

                foreach (BindingGroup g in subgroups.Values)
                {
                    outgroups.Add(g);
                }
                if (nulls.Any())
                {
                    outgroups.Add(nulls);
                    if (this.AssignVariable != null)
                    {
                        nulls.AddAssignment(this.AssignVariable, null);
                    }
                    nulls = new BindingGroup();
                }
            }

            if (this._child == null)
            {
                return(outgroups);
            }
            else
            {
                return(this._child.Apply(context, outgroups));
            }
        }
예제 #2
0
        /// <summary>
        /// Applies a Grouping on a given Variable to the Binder
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <returns></returns>
        public override List <BindingGroup> Apply(SparqlEvaluationContext context)
        {
            Dictionary <INode, BindingGroup> groups = new Dictionary <INode, BindingGroup>();
            BindingGroup nulls = new BindingGroup();

            foreach (int id in context.Binder.BindingIDs)
            {
                INode value = context.Binder.Value(this._name, id);

                if (value != null)
                {
                    if (!groups.ContainsKey(value))
                    {
                        groups.Add(value, new BindingGroup());
                        if (this.AssignVariable != null)
                        {
                            groups[value].AddAssignment(this.AssignVariable, value);
                        }
                    }

                    groups[value].Add(id);
                }
                else
                {
                    nulls.Add(id);
                }
            }

            List <BindingGroup> outGroups = (from g in groups.Values select g).ToList();

            if (nulls.Any())
            {
                outGroups.Add(nulls);
                if (this.AssignVariable != null)
                {
                    nulls.AddAssignment(this.AssignVariable, null);
                }
            }
            if (this._child == null)
            {
                return(outGroups);
            }
            else
            {
                return(this._child.Apply(context, outGroups));
            }
        }
예제 #3
0
        /// <summary>
        /// Applies a Grouping on a given Variable to the Binder Groups from a previous Grouping
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <param name="groups">Binder Group to subgroup</param>
        /// <returns></returns>
        public override List<BindingGroup> Apply(SparqlEvaluationContext context, List<BindingGroup> groups)
        {
            List<BindingGroup> outgroups = new List<BindingGroup>();

            foreach (BindingGroup group in groups)
            {
                Dictionary<INode, BindingGroup> subgroups = new Dictionary<INode, BindingGroup>();
                BindingGroup error = new BindingGroup();
                BindingGroup nulls = new BindingGroup();

                foreach (int id in group.BindingIDs)
                {
                    try
                    {
                        INode value = this._expr.Value(context, id);

                        if (value != null)
                        {
                            if (!subgroups.ContainsKey(value))
                            {
                                subgroups.Add(value, new BindingGroup(group));
                                if (this.AssignVariable != null)
                                {
                                    subgroups[value].AddAssignment(this.AssignVariable, value);
                                }
                            }

                            subgroups[value].Add(id);
                        }
                        else
                        {
                            nulls.Add(id);
                        }
                    }
                    catch (RdfQueryException)
                    {
                        error.Add(id);
                    }
                }

                //Build the List of Groups
                //Null and Error Group are included if required
                foreach (BindingGroup g in subgroups.Values)
                {
                    outgroups.Add(g);
                }
                if (error.BindingIDs.Any())
                {
                    outgroups.Add(error);
                    if (this.AssignVariable != null) error.AddAssignment(this.AssignVariable, null);
                    error = new BindingGroup();
                }
                if (nulls.BindingIDs.Any())
                {
                    outgroups.Add(nulls);
                    if (this.AssignVariable != null) nulls.AddAssignment(this.AssignVariable, null);
                    nulls = new BindingGroup();
                }
            }

            if (this._child == null)
            {
                return outgroups;
            }
            else
            {
                return this._child.Apply(context, outgroups);
            }
        }
예제 #4
0
        /// <summary>
        /// Applies a Grouping on a given Expression to the Binder
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <returns></returns>
        public override List<BindingGroup> Apply(SparqlEvaluationContext context)
        {
            Dictionary<INode, BindingGroup> groups = new Dictionary<INode, BindingGroup>();
            BindingGroup error = new BindingGroup();
            BindingGroup nulls = new BindingGroup();

            foreach (int id in context.Binder.BindingIDs)
            {
                try
                {
                    INode value = this._expr.Value(context, id);

                    if (value != null)
                    {
                        if (!groups.ContainsKey(value))
                        {
                            groups.Add(value, new BindingGroup());
                            if (this.AssignVariable != null)
                            {
                                groups[value].AddAssignment(this.AssignVariable, value);
                            }
                        }

                        groups[value].Add(id);
                    }
                    else
                    {
                        nulls.Add(id);
                    }
                }
                catch (RdfQueryException)
                {
                    error.Add(id);
                }
            }

            //Build the List of Groups
            //Null and Error Group are included if required
            List<BindingGroup> parentGroups = (from g in groups.Values select g).ToList();
            if (error.BindingIDs.Any())
            {
                parentGroups.Add(error);
                if (this.AssignVariable != null) error.AddAssignment(this.AssignVariable, null);
            }
            if (nulls.BindingIDs.Any())
            {
                parentGroups.Add(nulls);
                if (this.AssignVariable != null) nulls.AddAssignment(this.AssignVariable, null);
            }

            if (this._child != null)
            {
                return this._child.Apply(context, parentGroups);
            }
            else
            {
                return parentGroups;
            }
        }
예제 #5
0
        /// <summary>
        /// Applies a Grouping on a given Variable to the Binder Groups from a previous Grouping
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <param name="groups">Binder Group to subgroup</param>
        /// <returns></returns>
        public override List<BindingGroup> Apply(SparqlEvaluationContext context, List<BindingGroup> groups)
        {
            List<BindingGroup> outgroups = new List<BindingGroup>();
            BindingGroup nulls = new BindingGroup();

            foreach (BindingGroup group in groups)
            {
                Dictionary<INode, BindingGroup> subgroups = new Dictionary<INode, BindingGroup>();

                foreach (int id in group.BindingIDs)
                {
                    INode value = context.Binder.Value(this._name, id);

                    if (value != null)
                    {
                        if (!subgroups.ContainsKey(value))
                        {
                            subgroups.Add(value, new BindingGroup(group));
                            if (this.AssignVariable != null)
                            {
                                subgroups[value].AddAssignment(this.AssignVariable, value);
                            }
                        }

                        subgroups[value].Add(id);
                    }
                    else
                    {
                        nulls.Add(id);
                    }
                }

                foreach (BindingGroup g in subgroups.Values)
                {
                    outgroups.Add(g);
                }
                if (nulls.Any())
                {
                    outgroups.Add(nulls);
                    if (this.AssignVariable != null) nulls.AddAssignment(this.AssignVariable, null);
                    nulls = new BindingGroup();
                }
            }

            if (this._child == null)
            {
                return outgroups;
            }
            else
            {
                return this._child.Apply(context, outgroups);
            }
        }
예제 #6
0
        /// <summary>
        /// Applies a Grouping on a given Variable to the Binder
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <returns></returns>
        public override List<BindingGroup> Apply(SparqlEvaluationContext context)
        {
            Dictionary<INode, BindingGroup> groups = new Dictionary<INode, BindingGroup>();
            BindingGroup nulls = new BindingGroup();

            foreach (int id in context.Binder.BindingIDs)
            {
                INode value = context.Binder.Value(this._name, id);

                if (value != null)
                {
                    if (!groups.ContainsKey(value))
                    {
                        groups.Add(value, new BindingGroup());
                        if (this.AssignVariable != null)
                        {
                            groups[value].AddAssignment(this.AssignVariable, value);
                        }
                    }

                    groups[value].Add(id);
                }
                else
                {
                    nulls.Add(id);
                }
            }

            List<BindingGroup> outGroups = (from g in groups.Values select g).ToList();
            if (nulls.Any())
            {
                outGroups.Add(nulls);
                if (this.AssignVariable != null) nulls.AddAssignment(this.AssignVariable, null);
            }
            if (this._child == null)
            {
                return outGroups;
            }
            else
            {
                return this._child.Apply(context, outGroups);
            }
        }
예제 #7
0
        /// <summary>
        /// Applies a Grouping on a given Variable to the Binder Groups from a previous Grouping
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <param name="groups">Binder Group to subgroup</param>
        /// <returns></returns>
        public override List <BindingGroup> Apply(SparqlEvaluationContext context, List <BindingGroup> groups)
        {
            List <BindingGroup> outgroups = new List <BindingGroup>();

            foreach (BindingGroup group in groups)
            {
                Dictionary <INode, BindingGroup> subgroups = new Dictionary <INode, BindingGroup>();
                BindingGroup error = new BindingGroup();
                BindingGroup nulls = new BindingGroup();

                foreach (int id in group.BindingIDs)
                {
                    try
                    {
                        INode value = this._expr.Value(context, id);

                        if (value != null)
                        {
                            if (!subgroups.ContainsKey(value))
                            {
                                subgroups.Add(value, new BindingGroup(group));
                                if (this.AssignVariable != null)
                                {
                                    subgroups[value].AddAssignment(this.AssignVariable, value);
                                }
                            }

                            subgroups[value].Add(id);
                        }
                        else
                        {
                            nulls.Add(id);
                        }
                    }
                    catch (RdfQueryException)
                    {
                        error.Add(id);
                    }
                }

                //Build the List of Groups
                //Null and Error Group are included if required
                foreach (BindingGroup g in subgroups.Values)
                {
                    outgroups.Add(g);
                }
                if (error.BindingIDs.Any())
                {
                    outgroups.Add(error);
                    if (this.AssignVariable != null)
                    {
                        error.AddAssignment(this.AssignVariable, null);
                    }
                    error = new BindingGroup();
                }
                if (nulls.BindingIDs.Any())
                {
                    outgroups.Add(nulls);
                    if (this.AssignVariable != null)
                    {
                        nulls.AddAssignment(this.AssignVariable, null);
                    }
                    nulls = new BindingGroup();
                }
            }

            if (this._child == null)
            {
                return(outgroups);
            }
            else
            {
                return(this._child.Apply(context, outgroups));
            }
        }
예제 #8
0
        /// <summary>
        /// Applies a Grouping on a given Expression to the Binder
        /// </summary>
        /// <param name="context">Evaluation Context</param>
        /// <returns></returns>
        public override List <BindingGroup> Apply(SparqlEvaluationContext context)
        {
            Dictionary <INode, BindingGroup> groups = new Dictionary <INode, BindingGroup>();
            BindingGroup error = new BindingGroup();
            BindingGroup nulls = new BindingGroup();

            foreach (int id in context.Binder.BindingIDs)
            {
                try
                {
                    INode value = this._expr.Value(context, id);

                    if (value != null)
                    {
                        if (!groups.ContainsKey(value))
                        {
                            groups.Add(value, new BindingGroup());
                            if (this.AssignVariable != null)
                            {
                                groups[value].AddAssignment(this.AssignVariable, value);
                            }
                        }

                        groups[value].Add(id);
                    }
                    else
                    {
                        nulls.Add(id);
                    }
                }
                catch (RdfQueryException)
                {
                    error.Add(id);
                }
            }

            //Build the List of Groups
            //Null and Error Group are included if required
            List <BindingGroup> parentGroups = (from g in groups.Values select g).ToList();

            if (error.BindingIDs.Any())
            {
                parentGroups.Add(error);
                if (this.AssignVariable != null)
                {
                    error.AddAssignment(this.AssignVariable, null);
                }
            }
            if (nulls.BindingIDs.Any())
            {
                parentGroups.Add(nulls);
                if (this.AssignVariable != null)
                {
                    nulls.AddAssignment(this.AssignVariable, null);
                }
            }

            if (this._child != null)
            {
                return(this._child.Apply(context, parentGroups));
            }
            else
            {
                return(parentGroups);
            }
        }