/// <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); }
/// <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()); }