<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#this>
        a                          <https://kgdev.net/ns#Definition> , <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h4 id=\"this\">Converting Graph Patterns</h4>\n\n<p>This section describes the process for translating a SPARQL graph pattern into a SPARQL algebra expression. This process is applied to the group graph pattern (the unit between <code>{...}</code> delimiters) forming the <code>WHERE</code> clause of a query, and recursively to each syntactic element within the group graph pattern. The result of the translation is a SPARQL algebra expression.</p>\n<p>In summary, the steps are applied as follows:</p>\n<ul>\n<li><a href=\"#sparqlExpandForms\" shape=\"rect\">Expand syntax forms</a> for IRIs, literals and triple patterns.</li>\n<li><a href=\"#sparqlTranslatePathExpressions\" shape=\"rect\">Translate property path expressions</a></li>\n<li><a href=\"#sparqlTranslatePathPatterns\" shape=\"rect\">Convert some property path patterns to triples</a></li>\n<li><a href=\"#sparqlCollectFilters\" shape=\"rect\">Collect the <code>FILTER</code>s in the group</a></li>\n<li><a href=\"#sparqlTranslateBasicGraphPatterns\" shape=\"rect\">Translate Basic Graph Patterns</a></li>\n<li><a href=\"#sparqlTranslateGraphPatterns\" shape=\"rect\">Translate the remaining graph patterns in the group</a></li>\n<li><a href=\"#sparqlAddFilters\" shape=\"rect\">Add in Filters</a></li>\n<li><a href=\"#sparqlSimplification\" shape=\"rect\">Simplify the algebra expression</a></li>\n</ul>\n<p>We write</p>\n<blockquote>\n<p>translate(graph pattern)</p>\n</blockquote>\n<p>for the algorthm described here to translate graph patterns.</p>\n<p>The working group notes that in SPARQL 1.0, the point at which the simplification step is applied leads to ambiguous transformation of queries involving a doubly nested filter and pattern in an optional: </p>\n<pre xml:space=\"preserve\"><code>OPTIONAL { { ... FILTER ( ... ?x ... ) } }..\n</code></pre>\n<p>This is illustrated by two non-normative test cases:</p>\n<ul>\n<li><a href=\"http://www.w3.org/2001/sw/DataAccess/tests/data-r2/optional-filter/manifest#dawg-optional-filter-005-not-simplified\" shape=\"rect\"> Simplification applied after all transformations</a> or not at all.</li>\n<li><a href=\"http://www.w3.org/2001/sw/DataAccess/tests/data-r2/optional-filter/manifest#dawg-optional-filter-005-simplified\" shape=\"rect\"> Simplification applied during transformation</a>.</li>\n</ul>\n<p>Applying the simpification step after all the translation of graph patterns is the preferred reading.</p></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#convertGraphPattern> ;
        <https://schema.org/name>  "Converting Graph Patterns" .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslateGraphPatterns>
        a       <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h5 id=\"sparqlTranslateGraphPatterns\">Translate Graph Patterns</h5>\n\n<p>Next, we translate each remaining graph pattern form, recursively applying the translation process.</p>\n<blockquote>\n<p>If the form is GroupOrUnionGraphPattern</p>\n</blockquote>\n<pre xml:space=\"preserve\"><code>Let A := undefined\n\nFor each element G in the GroupOrUnionGraphPattern\n    If A is undefined\n        A := Translate(G)\n    Else\n        A := Union(A, Translate(G))\n    End\n\nThe result is A\n\n</code></pre>\n<blockquote>\n<p>If the form is GraphGraphPattern</p>\n</blockquote>\n<pre xml:space=\"preserve\"><code>If the form is GRAPH IRI GroupGraphPattern\n    The result is Graph(IRI, Translate(GroupGraphPattern))\n</code></pre>\n<pre xml:space=\"preserve\"><code>If the form is GRAPH Var GroupGraphPattern\n    The result is Graph(Var, Translate(GroupGraphPattern))\n</code></pre>\n<blockquote>\n<p>If the form is GroupGraphPattern:</p>\n</blockquote>\n<pre xml:space=\"preserve\"><code>Let FS := the empty set\nLet G := the empty pattern, a basic graph pattern which is the empty set.\n\nFor each element E in the GroupGraphPattern\n\n    If E is of the form OPTIONAL{P} \n        Let A := Translate(P)\n        If A is of the form Filter(F, A2)\n            G := LeftJoin(G, A2, F)\n        Else \n            G := LeftJoin(G, A, true)\n            End\n        End\n\n    If E is of the form MINUS{P}\n        G := Minus(G, Translate(P))\n        End\n\n    If E is of the form BIND(expr AS var)\n        G := Extend(G, var, expr)\n        End\n\n    If E is any other form \n        Let A := Translate(E)\n        G := Join(G, A)\n        End\n\n   End\n\nThe result is G.\n\n</code></pre>\n<blockquote>\n<p>If the form is <a href=\"../../../grammar/#rInlineData\" shape=\"rect\">InlineData</a></p>\n</blockquote>\n<pre xml:space=\"preserve\"><code>The result is a multiset of solution mappings 'data'.\n</code></pre>\n<blockquote>\n<p><em>data</em> is formed by forming a solution mapping\nfrom the variable in the corresponding position in list of\nvariables (or single variable), omitting a binding if the\n<code>BindingValue</code> is the word\n<code>UNDEF</code>.</p>\n<p>If the form is <a href=\"../../../grammar/#rSubSelect\" shape=\"rect\">SubSelect</a></p>\n</blockquote>\n<pre xml:space=\"preserve\"><code>The result is ToMultiset(Translate(SubSelect))\n</code></pre></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/2000/01/rdf-schema#seeAlso>
                <https://kgdev.net/specifications/sparql11-query/grammar/#rInlineData> , <https://kgdev.net/specifications/sparql11-query/grammar/#rSubSelect> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#sparqlTranslateGraphPatterns> .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlSimplification>
        a       <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h5 id=\"sparqlSimplification\">Simplification step</h5>\n\n<p>Some groups of one graph pattern become <code>join(Z, A)</code>, where Z is the empty basic graph pattern (which is the empty set). These can be replaced by A. The empty graph pattern Z is the identity for join:</p>\n<pre xml:space=\"preserve\"><code>Replace join(Z, A) by A\nReplace join(A, Z) by A\n</code></pre></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#sparqlSimplification> .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslateBasicGraphPatterns>
        a       <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h5 id=\"sparqlTranslateBasicGraphPatterns\">Translate Basic Graph Patterns</h5>\n\n<p>After translating property paths, any adjacent triple patterns are collected together to form a basic graph pattern <code>BGP(triples)</code>.</p></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#sparqlTranslateBasicGraphPatterns> .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlAddFilters>
        a       <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h5 id=\"sparqlAddFilters\">Filters of Group</h5>\n\n<p>After the group has been translated, the filter expressions are added so they wil apply to the whole of the rest of the group:</p>\n<pre xml:space=\"preserve\"><code>If FS is not empty\n    Let G := output of preceding step\n    Let X := Conjunction of expressions in FS\n    G := Filter(X, G)\n    End\n</code></pre></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#sparqlAddFilters> .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/>
        a       <https://www.w3.org/ns/ldt/document-hierarchy#Item> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#this> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlExpandForms> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_3>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlCollectFilters> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_4>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslatePathExpressions> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_5>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslatePathPatterns> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_6>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslateBasicGraphPatterns> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_7>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslateGraphPatterns> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_8>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlAddFilters> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_9>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlSimplification> ;
        <http://purl.org/dc/terms/modified>
                "2023-07-10T15:57:03.357Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ;
        <http://purl.org/dc/terms/title>
                "Converting Graph Patterns" ;
        <http://rdfs.org/sioc/ns#has_container>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#convertGraphPattern> ;
        <http://xmlns.com/foaf/0.1/primaryTopic>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#this> .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslatePathExpressions>
        a       <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h5 id=\"sparqlTranslatePathExpressions\">Translate Property Path Expressions</h5>\n\n<p>The following table gives the translation of property paths expressions from SPARQL syntax to terms in the SPARQL algebra. This applies to all elements of a property path expression recursively.</p>\n<p>The <a href=\"#sparqlTranslatePathPatterns\" shape=\"rect\">next step after this one</a> translates certain forms to triple patterns, and these are converted later to basic graph patterns by adjacency (without intervening group pattern delimiters { and }) or other syntax forms. Overall, SPARQL syntax property paths of just an IRI become triple patterns and these are aggregated into basic graph patterns.</p>\n<p>Notes:</p>\n<ul>\n<li>The order of forms IRI and ^IRI in negated property sets is not relevant.</li>\n</ul>\n<p>We introduce the following symbols:</p>\n<ul>\n<li>link</li>\n<li>inv</li>\n<li>alt</li>\n<li>seq</li>\n<li>ZeroOrMorePath</li>\n<li>OneOrMorePath</li>\n<li>ZeroOrOnePath</li>\n<li>NPS (for NegatedPropertySet)</li>\n</ul>\n<table border=\"1\" cellpadding=\"5\" style=\"border-collapse: collapse; border-color: #000000\">\n   <tbody>\n      <tr>\n         <th colspan=\"1\" rowspan=\"1\">Syntax Form (path)</th>\n         <th colspan=\"1\" rowspan=\"1\">Algebra (path)</th>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>iri</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>link(iri)</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>^path</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>inv(path)</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>!(:iri<sub>1</sub>|...|:iri<sub>n</sub>)</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>NPS({:iri<sub>1</sub> ... :iri<sub>n</sub>})</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>!(^:iri<sub>1</sub>|...|^:iri<sub>n</sub>)</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>inv(NPS({:iri<sub>1</sub> ... :iri<sub>n</sub>}))</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>!(:iri<sub>1</sub>|...|:iri<sub>i</sub>|^:iri<sub>i+1</sub>|...|^:iri<sub>m</sub>)</code> </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>alt(NPS({:iri<sub>1</sub> ...:iri<sub>i</sub>}),<br clear=\"none\"></br>     inv(NPS({:iri<sub>i+1</sub>, ..., :iri<sub>m</sub>})) )</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>path1 / path2</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>seq(path1, path2)</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>path1 | path2</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>alt(path1, path2)</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>path*</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>ZeroOrMorePath(path)</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>path+</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>OneOrMorePath(path)</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>path?</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>ZeroOrOnePath(path)</code>\n         </td>\n      </tr>\n   </tbody>\n</table></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/2000/01/rdf-schema#seeAlso>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslatePathPatterns> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#sparqlTranslatePathExpressions> .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlTranslatePathPatterns>
        a       <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h5 id=\"sparqlTranslatePathPatterns\">Translate Property Path Patterns</h5>\n\n<p>The previous step translated <a href=\"../../initDefinitions/#defn_PropertyPathExpr\" shape=\"rect\">property path expressions</a>. This step translates <a href=\"../../initDefinitions/#defn_PropertyPathPattern\" shape=\"rect\">property path patterns</a>, which are a subject end point, property path expression and object end point, into triple patterns or wraps in a general algebra operation for path evaluation.</p>\n<p>Notes:</p>\n<ul>\n<li>X and Y are RDF terms or variables.</li>\n<li>?V is a fresh variable.</li>\n<li>P and Q are path expressions.</li>\n<li>These are only applied to property path patterns, not within property path expressions.</li>\n<li>Translations earlier in the table are applied in preference to the last translation.</li>\n<li>The final translation simply wraps any remaining property path expression to use a common form <code>Path(...)</code>.</li>\n</ul>\n<table border=\"1\" cellpadding=\"5\" style=\"border-collapse: collapse; border-color: #000000\">\n   <tbody>\n      <tr>\n         <th colspan=\"1\" rowspan=\"1\">Algebra (path)</th>\n         <th colspan=\"1\" rowspan=\"1\">Translation</th>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>X link(iri) Y</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>X iri Y</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>X inv(iri) Y</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>Y iri X</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>X seq(P, Q) Y</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>X P ?V . ?V Q P</code>\n         </td>\n      </tr>\n      <tr>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>X P Y</code>\n         </td>\n         <td colspan=\"1\" rowspan=\"1\">\n            <code>Path(X, P, Y)</code>\n         </td>\n      </tr>\n   </tbody>\n</table>\n\n<p>Examples of the whole path translation process (<code>?_V</code> is a fresh variable):</p>\n<p>?s :p/:q ?o</p>\n<p>?s :p ?_V .</p>\n<p>?_V :q ?o</p>\n<p>?s :p* ?o</p>\n<p>Path(?s, ZeroOrMorePath(link(:p)), ?o)</p>\n<p>:list rdf:rest*/rdf:first ?member</p>\n<p>Path(:list, ZeroOrMorePath(link(rdf:rest)), ?_V) .</p>\n<p>?_V rdf:first ?member</p></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/2000/01/rdf-schema#seeAlso>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/initDefinitions/#defn_PropertyPathExpr> , <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/initDefinitions/#defn_PropertyPathPattern> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#sparqlTranslatePathPatterns> .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlExpandForms>
        a       <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h5 id=\"sparqlExpandForms\">Expand Syntax Forms</h5>\n\n<p>Expand abbreviations for IRIs and triple patterns given in <a href=\"../../../sparqlSyntax/#this\" shape=\"rect\">section 4</a>.</p></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/2000/01/rdf-schema#seeAlso>
                <https://kgdev.net/specifications/sparql11-query/sparqlSyntax/#this> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#sparqlExpandForms> .

<https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlCollectFilters>
        a       <https://w3id.org/atomgraph/linkeddatahub#Content> ;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\"><h5 id=\"sparqlCollectFilters\">Collect <code>FILTER</code> Elements</h5>\n\n<p><code>FILTER</code> expressions apply to the whole group graph pattern in which they appear. The algebra operators to perform filtering are added to the group after translation of each group element. We collect the filters together here and remove them from group, then <a href=\"#sparqlAddFilters\" shape=\"rect\">apply them to the whole translated group graph pattern</a>.</p>\n<p>In this step, we also translate graph patterns within <code>FILTER</code> expressions <a href=\"../../../expressions/SparqlOps/func-forms/#func-filter-exists\" shape=\"rect\"><code>EXISTS</code> and <code>NOT EXISTS</code></a>.</p>\n<pre xml:space=\"preserve\"><code>Let FS := empty set\n\nFor each form FILTER(expr) in the group graph pattern:\n    In expr, replace NOT EXISTS{P} with fn:not([exists(translate(P)))](../../#defn_evalExists) \n    In expr, replace EXISTS{P} with [exists(translate(P))](../../#defn_evalExists)\n    FS := FS ∪ {expr}\n    End\n</code></pre>\n<p>The set of filter expressions <code>FS</code> is <a href=\"#sparqlAddFilters\" shape=\"rect\">used later</a>.</p></div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
        <http://www.w3.org/2000/01/rdf-schema#seeAlso>
                <https://kgdev.net/specifications/sparql11-query/sparqlDefinition/sparqlQuery/convertGraphPattern/#sparqlAddFilters> , <https://kgdev.net/specifications/sparql11-query/expressions/SparqlOps/func-forms/#func-filter-exists> ;
        <http://www.w3.org/ns/prov#wasDerivedFrom>
                <https://www.w3.org/TR/sparql11-query/#sparqlCollectFilters> .
