Esempio n. 1
0
        /// <summary>
        /// Gets the String representation of the Graph Pattern
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            StringBuilder output = new StringBuilder();
            String        indent = String.Empty;

            if (_isUnion)
            {
                indent = new String(' ', 2);
                for (int i = 0; i < _graphPatterns.Count; i++)
                {
                    GraphPattern gp = _graphPatterns[i];

                    if (i > 0)
                    {
                        output.Append(indent);
                    }
                    String temp = gp.ToString();
                    if (!temp.Contains('\n'))
                    {
                        if (gp.HasModifier)
                        {
                            temp = "{ " + temp + " }";
                        }
                        output.Append(temp + " ");
                    }
                    else
                    {
                        if (gp.HasModifier)
                        {
                            temp = "{\n" + temp + "\n}";
                        }
                        output.AppendLineIndented(temp, 2);
                    }
                    if (i < _graphPatterns.Count - 1)
                    {
                        output.AppendLine();
                        output.Append(indent);
                        output.AppendLine("UNION");
                    }
                }
                return(output.ToString());
            }
            if (_isGraph || _isService)
            {
                if (_isGraph)
                {
                    output.Append("GRAPH ");
                }
                else
                {
                    output.Append("SERVICE ");
                    if (_isSilent)
                    {
                        output.Append("SILENT ");
                    }
                }
                switch (_graphSpecifier.TokenType)
                {
                case Token.QNAME:
                    output.Append(_graphSpecifier.Value);
                    break;

                case Token.URI:
                    output.Append('<');
                    output.Append(_graphSpecifier.Value);
                    output.Append('>');
                    break;

                case Token.VARIABLE:
                default:
                    output.Append(_graphSpecifier.Value);
                    break;
                }
                output.Append(" ");
            }
            else if (_isOptional)
            {
                if (_isExists)
                {
                    output.Append("EXISTS ");
                }
                else if (_isNotExists)
                {
                    output.Append("NOT EXISTS ");
                }
                else
                {
                    output.Append("OPTIONAL ");
                }
            }
            else if (_isMinus)
            {
                output.Append("MINUS ");
            }

            output.Append("{ ");
            bool linebreaks = ((_triplePatterns.Count + _graphPatterns.Count + _unplacedAssignments.Count) > 1) || _isFiltered;

            if (linebreaks)
            {
                output.AppendLine();
                indent = new String(' ', 2);
            }
            // Triple Patterns
            foreach (ITriplePattern tp in _triplePatterns)
            {
                String temp = tp.ToString();
                output.Append(indent);
                if (temp.Contains('\n'))
                {
                    String[] lines = temp.Split('\n');
                    for (int i = 0; i < lines.Length; i++)
                    {
                        if (i > 0)
                        {
                            output.Append(indent);
                        }
                        if (i > 0 && i < lines.Length - 1)
                        {
                            output.Append(' ');
                        }
                        output.Append(lines[i]);
                        if (i < lines.Length - 1)
                        {
                            output.AppendLine();
                        }
                    }
                    if (tp.PatternType != TriplePatternType.SubQuery)
                    {
                        output.Append(" . ");
                    }
                    if (linebreaks)
                    {
                        output.AppendLine();
                    }
                }
                else
                {
                    output.Append(temp + " . ");
                    if (linebreaks)
                    {
                        output.AppendLine();
                    }
                }
            }
            // Unplaced Assignments
            foreach (IAssignmentPattern ap in _unplacedAssignments)
            {
                output.Append(ap.ToString());
                if (linebreaks)
                {
                    output.AppendLine();
                }
            }
            // Inline Data
            if (HasInlineData)
            {
                output.Append(indent);
                String temp = _data.ToString();
                if (!temp.Contains('\n'))
                {
                    output.Append(temp + " ");
                }
                else
                {
                    String[] lines = temp.Split('\n');
                    for (int i = 0; i < lines.Length; i++)
                    {
                        if (i > 0)
                        {
                            output.Append(indent);
                        }
                        output.Append(lines[i]);
                        if (i < lines.Length - 1)
                        {
                            output.AppendLine();
                        }
                    }
                }
                if (linebreaks)
                {
                    output.AppendLine();
                }
            }
            // Graph Patterns
            foreach (GraphPattern gp in _graphPatterns)
            {
                output.Append(indent);
                String temp = gp.ToString();
                if (!temp.Contains('\n'))
                {
                    output.Append(temp + " ");
                }
                else
                {
                    String[] lines = temp.Split('\n');
                    for (int i = 0; i < lines.Length; i++)
                    {
                        if (i > 0)
                        {
                            output.Append(indent);
                        }
                        output.Append(lines[i]);
                        if (i < lines.Length - 1)
                        {
                            output.AppendLine();
                        }
                    }
                }
                if (linebreaks)
                {
                    output.AppendLine();
                }
            }
            // Filters
            if (_filter != null)
            {
                output.Append(indent);
                output.Append(_filter.ToString());
                if (linebreaks)
                {
                    output.AppendLine();
                }
            }
            foreach (ISparqlFilter filter in _unplacedFilters)
            {
                output.Append(indent);
                output.Append(filter.ToString());
                if (linebreaks)
                {
                    output.AppendLine();
                }
            }
            output.Append("}");

            return(output.ToString());
        }