Exemple #1
0
        // TODO Should not be needed since we would rely on the underlying storage capabilities

        /**
         * Creates a new Values element.
         * @param model  the Model to create the Values in
         * @param data  the Table providing the actual data
         * @return a new Values
         */
        public static IValues createValues(SpinProcessor model, SparqlResultSet data, bool untyped)
        {
            IResource blank  = untyped ? model.CreateResource() : model.CreateResource(SP.ClassValues);
            IValues   values = (IValues)blank.As(typeof(ValuesImpl));

            List <IResource> vars = new List <IResource>();

            foreach (String varName in data.Variables)
            {
                vars.Add(Resource.Get(RDFUtil.CreateLiteralNode(varName), model));
            }
            IResource varList = model.CreateList(vars.GetEnumerator());

            values.AddProperty(SP.PropertyVarNames, varList);

            IEnumerator <SparqlResult> bindings = data.Results.GetEnumerator();

            if (bindings.MoveNext())
            {
                List <IResource> lists = new List <IResource>();
                while (bindings.MoveNext())
                {
                    List <IResource> nodes   = new List <IResource>();
                    SparqlResult     binding = bindings.Current;
                    foreach (String varName in data.Variables)
                    {
                        INode value = binding.Value(varName);
                        if (value == null)
                        {
                            nodes.Add(Resource.Get(SP.ClassPropertyUndef, model));
                        }
                        else
                        {
                            nodes.Add(Resource.Get(value, model));
                        }
                    }
                    lists.Add(model.CreateList(nodes.GetEnumerator()));
                }
                values.AddProperty(SP.PropertyBindings, model.CreateList(lists.GetEnumerator()));
            }

            return(values);
        }