/// <summary>
 /// Adds the given property path to the pattern group
 /// </summary>
 public RDFPatternGroup AddPropertyPath(RDFPropertyPath propertyPath)
 {
     if (propertyPath != null)
     {
         if (!this.GetPropertyPaths().Any(p => p.Equals(propertyPath)))
         {
             this.GroupMembers.Add(propertyPath);
         }
     }
     return(this);
 }
示例#2
0
        /// <summary>
        /// Prints the string representation of a property path
        /// </summary>
        internal static String PrintPropertyPath(RDFPropertyPath propertyPath, List <RDFNamespace> prefixes)
        {
            StringBuilder result = new StringBuilder();

            result.Append(PrintPatternMember(propertyPath.Start, prefixes));
            result.Append(" ");

            #region StepString

            #region Single Property
            if (propertyPath.Steps.Count == 1)
            {
                //InversePath (will swap start/end)
                if (propertyPath.Steps[0].IsInverseStep)
                {
                    result.Append("^");
                }

                var propPath = propertyPath.Steps[0].StepProperty;
                result.Append(PrintPatternMember(propPath, prefixes));
            }
            #endregion

            #region Multiple Properties
            else
            {
                //Initialize printing
                Boolean openedParenthesis = false;

                //Iterate properties
                for (int i = 0; i < propertyPath.Steps.Count; i++)
                {
                    //Alternative: generate union pattern
                    if (propertyPath.Steps[i].StepFlavor == RDFQueryEnums.RDFPropertyPathStepFlavors.Alternative)
                    {
                        if (!openedParenthesis)
                        {
                            openedParenthesis = true;
                            result.Append("(");
                        }

                        //InversePath (will swap start/end)
                        if (propertyPath.Steps[i].IsInverseStep)
                        {
                            result.Append("^");
                        }

                        var propPath = propertyPath.Steps[i].StepProperty;
                        if (i < propertyPath.Steps.Count - 1)
                        {
                            result.Append(PrintPatternMember(propPath, prefixes));
                            result.Append((Char)propertyPath.Steps[i].StepFlavor);
                        }
                        else
                        {
                            result.Append(PrintPatternMember(propPath, prefixes));
                            result.Append(")");
                        }
                    }

                    //Sequence: generate pattern
                    else
                    {
                        if (openedParenthesis)
                        {
                            result.Remove(result.Length - 1, 1);
                            openedParenthesis = false;
                            result.Append(")/");
                        }

                        //InversePath (will swap start/end)
                        if (propertyPath.Steps[i].IsInverseStep)
                        {
                            result.Append("^");
                        }

                        var propPath = propertyPath.Steps[i].StepProperty;
                        if (i < propertyPath.Steps.Count - 1)
                        {
                            result.Append(PrintPatternMember(propPath, prefixes));
                            result.Append((Char)propertyPath.Steps[i].StepFlavor);
                        }
                        else
                        {
                            result.Append(PrintPatternMember(propPath, prefixes));
                        }
                    }
                }
            }
            #endregion

            #endregion

            result.Append(" ");
            result.Append(PrintPatternMember(propertyPath.End, prefixes));
            return(result.ToString());
        }