@prefix owl:  <http://www.w3.org/2002/07/owl#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sp:   <http://spinrdf.org/sp#> .
@prefix spin: <http://spinrdf.org/spin#> .
@prefix spl:  <http://spinrdf.org/spl#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .

sp:Command  rdf:type     rdfs:Class ;
        rdfs:comment     "A shared superclass for sp:Query and sp:Update that can be used to specify that the range of property can be either one." ;
        rdfs:label       "Command" ;
        rdfs:subClassOf  sp:SystemClass .

sp:bindings  rdf:type       rdf:Property ;
        rdfs:comment        "The actual bindings of a sp:Values element." ;
        rdfs:domain         sp:Values ;
        rdfs:label          "bindings" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:fromNamed  rdf:type      rdf:Property ;
        rdfs:comment        "Specifies a named RDF Dataset used by a Query (FROM NAMED syntax in SPARQL). Values of this property must be URI resources." ;
        rdfs:domain         sp:Query ;
        rdfs:label          "from named" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:GroupConcat  rdf:type  rdfs:Class ;
        rdfs:comment     "Represents GROUP_CONCAT aggregations." ;
        rdfs:label       "GROUP_CONCAT" ;
        rdfs:subClassOf  sp:Aggregation .

sp:varNames  rdf:type       rdf:Property ;
        rdfs:comment        "The names of the variables (xsd:strings) of the variables declared for a VALUES element." ;
        rdfs:domain         sp:Values ;
        rdfs:label          "var names" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:ModPath  rdf:type     rdfs:Class ;
        rdfs:comment     "A modified path such as rdfs:subClassOf*." ;
        rdfs:label       "Mod path" ;
        rdfs:subClassOf  sp:Path .

sp:source  rdf:type         rdf:Property ;
        rdfs:label          "source" ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:graphNameNode  rdf:type  rdf:Property ;
        rdfs:comment        "The name (URI or Variable) of a NamedGraph." ;
        rdfs:domain         sp:NamedGraph ;
        rdfs:label          "graph name node" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:target  rdf:type         rdf:Property ;
        rdfs:label          "target" ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Load  rdf:type        rdfs:Class ;
        rdfs:comment     "A LOAD Update operation. The document to load is specified using sp:document, and the (optional) target graph using sp:into." ;
        rdfs:label       "Load" ;
        rdfs:subClassOf  sp:Update .

sp:having  rdf:type         rdf:Property ;
        rdfs:comment        "Points from a SELECT query to a list of HAVING expressions." ;
        rdfs:domain         sp:Select ;
        rdfs:label          "having" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Minus  rdf:type       rdfs:Class ;
        rdfs:comment     "A MINUS element group." ;
        rdfs:label       "Minus" ;
        rdfs:subClassOf  sp:ElementGroup .

sp:subject  rdf:type        rdf:Property ;
        rdfs:comment        "A resource or Variable describing the subject of a triple." ;
        rdfs:domain         sp:Tuple ;
        rdfs:label          "subject" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Desc  rdf:type        rdfs:Class ;
        rdfs:comment     "Marker to indicate descending order." ;
        rdfs:label       "Desc" ;
        rdfs:subClassOf  sp:OrderByCondition .

sp:path2  rdf:type          rdf:Property ;
        rdfs:comment        "The second child path of a property path. Used by sp:AltPath and sp:SeqPath." ;
        rdfs:label          "path2" ;
        rdfs:range          sp:Path ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:modMax  rdf:type         rdf:Property ;
        rdfs:domain         sp:ModPath ;
        rdfs:label          "mod max" ;
        rdfs:range          xsd:integer ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Modify  rdf:type      rdfs:Class ;
        rdfs:comment     "Represents a MODIFY (part of SPARQL UPDATE language). The graph IRIs are stored in sp:graphIRI. The template patterns are stored in sp:deletePattern and sp:insertPattern. The WHERE clause is represented using sp:where." ;
        rdfs:label       "Modify" ;
        rdfs:subClassOf  sp:Update .

sp:Filter  rdf:type      rdfs:Class ;
        rdfs:comment     "A constraint element that evaluates a given expression to true or false." ;
        rdfs:label       "Filter" ;
        rdfs:subClassOf  sp:Element .

sp:Insert  rdf:type      owl:DeprecatedClass , rdfs:Class ;
        rdfs:comment     "Deprecated - use sp:Modify instead.\n\nRepresents a INSERT INTO (part of SPARQL UPDATE language). The graph IRIs are stored in sp:graphIRI. The template patterns to delete are stored in sp:insertPattern. The WHERE clause is represented using sp:where." ;
        rdfs:label       "Insert" ;
        rdfs:subClassOf  sp:Modify .

sp:Drop  rdf:type        rdfs:Class ;
        rdfs:comment     "An Update operation that removes a specified graph from the Graph Store. Must specify the graph using sp:graphIRI, or sp:default, sp:named or sp:all. May have the SILENT flag, encoded using sp:silent." ;
        rdfs:label       "Drop" ;
        rdfs:subClassOf  sp:Update .

sp:arg1  rdf:type           rdf:Property ;
        rdfs:comment        "The first argument of a function call." ;
        rdfs:label          "arg1" ;
        rdfs:subPropertyOf  sp:arg .

sp:all  rdf:type            rdf:Property ;
        rdfs:comment        "Used in DROP and CLEAR." ;
        rdfs:label          "all" ;
        rdfs:range          xsd:boolean ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Delete  rdf:type      owl:DeprecatedClass , rdfs:Class ;
        rdfs:comment     "Deprecated - use sp:Modify instead.\n\nRepresents a DELETE FROM (part of SPARQL UPDATE language). The graph IRIs are stored in sp:graphIRI. The template patterns to delete are stored in sp:deletePattern. The WHERE clause is represented using sp:where." ;
        rdfs:label       "Delete" ;
        rdfs:subClassOf  sp:Modify .

sp:Aggregation  rdf:type  rdfs:Class ;
        rdfs:comment     "Base class of aggregation types (not part of the SPARQL 1.0 standard but supported by ARQ and other engines)." ;
        rdfs:label       "Aggregation" ;
        rdfs:subClassOf  sp:SystemClass .

sp:deletePattern  rdf:type  rdf:Property ;
        rdfs:comment        "Points to a list of sp:TripleTemplates and sp:NamedGraphs in a modify operation." ;
        rdfs:domain         sp:Update ;
        rdfs:label          "delete pattern" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:separator  rdf:type      rdf:Property ;
        rdfs:comment        "Stores the separator=\"...\" value of a GROUP_CONCAT (sp:GroupConcat) aggregation." ;
        rdfs:domain         sp:GroupConcat ;
        rdfs:label          "separator" ;
        rdfs:range          xsd:string ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:modMin  rdf:type         rdf:Property ;
        rdfs:domain         sp:ModPath ;
        rdfs:label          "mod min" ;
        rdfs:range          xsd:integer ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:systemProperty  rdf:type  rdf:Property ;
        rdfs:comment  "An abstract base proprerty that groups together the SP system properties. Users typically don't need to see them anyway." ;
        rdfs:label    "SP system property" .

sp:text  rdf:type           rdf:Property ;
        rdfs:comment        "Can be attached to sp:Queries to store a textual representation of the query. This can be useful for tools that do not have a complete SPIN Syntax parser available." ;
        rdfs:label          "text" ;
        rdfs:range          xsd:string ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:ReverseLinkPath  rdf:type  rdfs:Class ;
        rdfs:label       "Reverse link path" ;
        rdfs:subClassOf  sp:Path .

sp:Bind  rdf:type        rdfs:Class ;
        rdfs:comment     "A BIND element." ;
        rdfs:label       "Bind" ;
        rdfs:subClassOf  sp:Element .

sp:DeleteData  rdf:type  rdfs:Class ;
        rdfs:comment     "An Update operation to delete specific triples. The graph triples are represented using sp:data, which points to an rdf:List of sp:Triples or sp:NamedGraphs." ;
        rdfs:label       "Delete data" ;
        rdfs:subClassOf  sp:Update .

sp:Clear  rdf:type       rdfs:Class ;
        rdfs:comment     "An Update operation that removes all triples from a specified graph. Must specify the graph using sp:graphIRI, or sp:default, sp:named or sp:all. May have the SILENT flag, encoded using sp:silent." ;
        rdfs:label       "Clear" ;
        rdfs:subClassOf  sp:Update .

sp:subPath  rdf:type        rdf:Property ;
        rdfs:comment        "The child path of a property path expression. This is used by ReversePath and ModPath." ;
        rdfs:label          "sub path" ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:path1  rdf:type          rdf:Property ;
        rdfs:comment        "The first child path of a property path. Used by sp:AltPath and sp:SeqPath." ;
        rdfs:label          "path1" ;
        rdfs:range          sp:Path ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:predicate  rdf:type      rdf:Property ;
        rdfs:comment        "A resource or Variable describing the predicate of a triple." ;
        rdfs:domain         sp:Triple ;
        rdfs:label          "predicate" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:resultNodes  rdf:type    rdf:Property ;
        rdfs:comment        "Contains the result nodes (URI resources or Variables) of a Describe query." ;
        rdfs:domain         sp:Describe ;
        rdfs:label          "result nodes" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:node  rdf:type           rdf:Property ;
        rdfs:domain         sp:ReverseLinkPath ;
        rdfs:label          "node" ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Sample  rdf:type      rdfs:Class ;
        rdfs:comment     "Represents SAMPLE aggregations" ;
        rdfs:label       "SAMPLE" ;
        rdfs:subClassOf  sp:Aggregation .

sp:Values  rdf:type      rdfs:Class ;
        rdfs:comment     "A VALUES element. sp:varNames points to an rdf:List of strings for the variables, sp:values to an rdf:List of rdf:Lists with nodes for each variable, in the order defined by the variables list." ;
        rdfs:label       "Values" ;
        rdfs:subClassOf  sp:Element .

sp:Update  rdf:type      rdfs:Class ;
        rdfs:comment     "Abstract base class to group the various SPARQL UPDATE commands." ;
        rdfs:label       "Update" ;
        rdfs:subClassOf  sp:Command .

sp:Select  rdf:type      rdfs:Class ;
        rdfs:comment     "A SELECT-type query that returns variable bindings as its result." ;
        rdfs:label       "Select query" ;
        rdfs:subClassOf  sp:Query .

sp:Construct  rdf:type   rdfs:Class ;
        rdfs:comment     "A CONSTRUCT-type query that can be used to construct new triples from template triples (head) that use variable bindings from the match patterns (body)." ;
        rdfs:label       "Construct" ;
        rdfs:subClassOf  sp:Query .

sp:Ask  rdf:type         rdfs:Class ;
        rdfs:comment     "An ASK query that returns true if the condition in the body is met by at least one result set." ;
        rdfs:label       "Ask" ;
        rdfs:subClassOf  sp:Query .

sp:groupBy  rdf:type        rdf:Property ;
        rdfs:comment        "Points from a Query to the list of GROUP BY expressions." ;
        rdfs:domain         sp:Select ;
        rdfs:label          "group by" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:arg  rdf:type      rdf:Property ;
        rdfs:comment  "Abstract superproperty for the enumerated arg1, arg2 etc." ;
        rdfs:label    "arg" .

sp:Add  rdf:type         rdfs:Class ;
        rdfs:comment     "A SPARQL UPDATE ADD operation. Uses sp:source and sp:target to represent \"from\" and \"to\" graphs, respectively. Also sp:silent may be true." ;
        rdfs:label       "Add" ;
        rdfs:seeAlso     <https://www.w3.org/TR/sparql11-update/#add> ;
        rdfs:subClassOf  sp:Update .

sp:expression  rdf:type     rdf:Property ;
        rdfs:comment        "Points to an expression, for example in a Filter or Assignment." ;
        rdfs:label          "expression" ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:SeqPath  rdf:type     rdfs:Class ;
        rdfs:comment     "A sequence of multiple paths." ;
        rdfs:label       "Seq path" ;
        rdfs:subClassOf  sp:Path .

sp:Count  rdf:type       rdfs:Class ;
        rdfs:comment     "Counts the number of times a variable is used. The variable is stored in the variable property. This might be left blank to indicate COUNT(*)." ;
        rdfs:label       "COUNT" ;
        rdfs:subClassOf  sp:Aggregation .

sp:reduced  rdf:type        rdf:Property ;
        rdfs:comment        "A property with true to indicate that a Select query has a REDUCED flag." ;
        rdfs:domain         sp:Select ;
        rdfs:label          "reduced" ;
        rdfs:range          xsd:boolean ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:NamedGraph  rdf:type  rdfs:Class ;
        rdfs:comment     "A named Graph element such as GRAPH <uri> {...}." ;
        rdfs:label       "Named graph" ;
        rdfs:subClassOf  sp:ElementGroup .

sp:OrderByCondition  rdf:type  rdfs:Class ;
        rdfs:comment     "An abstract base class for ascending or descending order conditions. Instances of this class (typically bnodes) must have a value for expression to point to the actual values." ;
        rdfs:label       "Order by condition" ;
        rdfs:subClassOf  sp:SystemClass .

sp:Sum  rdf:type         rdfs:Class ;
        rdfs:comment     "Represents sum aggregations, e.g. SELECT SUM(?varName)..." ;
        rdfs:label       "SUM" ;
        rdfs:subClassOf  sp:Aggregation .

sp:where  rdf:type          rdf:Property ;
        rdfs:comment        "The WHERE clause of a Query." ;
        rdfs:label          "where" ;
        rdfs:range          sp:ElementList ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:templates  rdf:type      rdf:Property ;
        rdfs:comment        "Points to a list of TripleTemplates that form the head of a Construct query." ;
        rdfs:domain         sp:Construct ;
        rdfs:label          "templates" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:from  rdf:type           rdf:Property ;
        rdfs:comment        "Specifies an RDF Dataset used by a Query (FROM syntax in SPARQL). Values of this property must be URI resources." ;
        rdfs:domain         sp:Query ;
        rdfs:label          "from" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:document  rdf:type       rdf:Property ;
        rdfs:comment        "The URI of the document to load using a LOAD Update operation." ;
        rdfs:domain         sp:Load ;
        rdfs:label          "document" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:TriplePath  rdf:type  rdfs:Class ;
        rdfs:comment     "Similar to a TriplePattern, but with a path expression as its predicate. For example, this can be used to express transitive sub-class relationships (?subClass rdfs:subClassOf* ?superClass)." ;
        rdfs:label       "Triple path" ;
        rdfs:subClassOf  sp:Tuple , sp:Element .

sp:Union  rdf:type       rdfs:Class ;
        rdfs:comment     "A UNION group." ;
        rdfs:label       "Union" ;
        rdfs:subClassOf  sp:ElementGroup .

sp:arg5  rdf:type           rdf:Property ;
        rdfs:comment        "The fifth argument of a function call. Further arguments are not common in SPARQL, therefore no sp:arg6, etc are defined here. However, they can be created if needed." ;
        rdfs:label          "arg5" ;
        rdfs:subPropertyOf  sp:arg .

sp:Exists  rdf:type      rdfs:Class ;
        rdfs:comment     "An EXISTS element group." ;
        rdfs:label       "Exists" ;
        rdfs:subClassOf  sp:ElementGroup .

sp:as   rdf:type            rdf:Property ;
        rdfs:comment        "Points to a Variable used in an AS statement such as COUNT aggregates." ;
        rdfs:label          "as" ;
        rdfs:range          sp:Variable ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:object  rdf:type         rdf:Property ;
        rdfs:comment        "An RDF Node or Variable describing the object of a triple." ;
        rdfs:domain         sp:Tuple ;
        rdfs:label          "object" ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:NotExists  rdf:type   rdfs:Class ;
        rdfs:comment     "A NOT EXISTS element group." ;
        rdfs:label       "Not exists" ;
        rdfs:subClassOf  sp:ElementGroup .

sp:Element  rdf:type     rdfs:Class ;
        rdfs:comment     "An abstract base class for all pattern elements." ;
        rdfs:label       "Element" ;
        rdfs:subClassOf  sp:SystemClass .

sp:Tuple  rdf:type       rdfs:Class ;
        rdfs:comment     "Abstract base class for things that have subject and object." ;
        rdfs:label       "Tuple" ;
        rdfs:subClassOf  sp:SystemClass .

sp:ReversePath  rdf:type  rdfs:Class ;
        rdfs:comment     "A path with reversed direction." ;
        rdfs:label       "Reverse path" ;
        rdfs:subClassOf  sp:Path .

sp:AltPath  rdf:type     rdfs:Class ;
        rdfs:comment     "An alternative path with the union of sp:path1 and sp:path2." ;
        rdfs:label       "Alt path" ;
        rdfs:subClassOf  sp:Path .

sp:SystemClass  rdf:type  rdfs:Class ;
        rdfs:comment     "An \"artificial\" root class that groups all SP classes. This makes them look much less overwhelming in UI tools. Typical end users don't need to see those classes anyway." ;
        rdfs:label       "SP System class" ;
        rdfs:subClassOf  rdfs:Resource .

sp:values  rdf:type         rdf:Property ;
        rdfs:comment        "The VALUES block at the end of a query. The object may just be an untyped blank node, i.e. the sp:Values type triple is optional." ;
        rdfs:domain         sp:Query ;
        rdfs:label          "values" ;
        rdfs:range          sp:Values ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:limit  rdf:type          rdf:Property ;
        rdfs:comment        "The LIMIT solution modifier of a Query." ;
        rdfs:domain         sp:Query ;
        rdfs:label          "limit" ;
        rdfs:range          xsd:long ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:using  rdf:type          rdf:Property ;
        rdfs:domain         sp:Modify ;
        rdfs:label          "using" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:offset  rdf:type         rdf:Property ;
        rdfs:comment        "The OFFSET solution modifier of a Query." ;
        rdfs:domain         sp:Query ;
        rdfs:label          "offset" ;
        rdfs:range          xsd:long ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:arg4  rdf:type           rdf:Property ;
        rdfs:comment        "The forth argument of a function call." ;
        rdfs:label          "arg4" ;
        rdfs:subPropertyOf  sp:arg .

sp:TripleTemplate  rdf:type  rdfs:Class ;
        rdfs:comment     "A prototypical triple used as template in the head of a Construct query. May contain variables." ;
        rdfs:label       "Triple template" ;
        rdfs:subClassOf  sp:Triple .

sp:varName  rdf:type        rdf:Property ;
        rdfs:comment        "The name of a Variable." ;
        rdfs:domain         sp:Variable ;
        rdfs:label          "varName" ;
        rdfs:range          xsd:string ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:orderBy  rdf:type        rdf:Property ;
        rdfs:comment        "Links a query with an ORDER BY clause where the values are rdf:List containing OrderByConditions or expressions. While the domain of this property is sp:Query, only Describe and Select queries can have values of it." ;
        rdfs:domain         sp:Query ;
        rdfs:label          "order by" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Avg  rdf:type         rdfs:Class ;
        rdfs:comment     "Represents AVG aggregations." ;
        rdfs:label       "AVG" ;
        rdfs:subClassOf  sp:Aggregation .

sp:distinct  rdf:type       rdf:Property ;
        rdfs:comment        "A marker property to indicate that a Select query is of type SELECT DISTINCT." ;
        rdfs:domain         sp:Select ;
        rdfs:label          "distinct" ;
        rdfs:range          xsd:boolean ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:elements  rdf:type       rdf:Property ;
        rdfs:comment        "Points to an ElementList, for example in an Optional element." ;
        rdfs:label          "elements" ;
        rdfs:range          sp:ElementList ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Let  rdf:type         owl:DeprecatedClass , rdfs:Class ;
        rdfs:comment     "Deprecated: use sp:Bind instead.\n\nA variable assignment (LET (?<varName> := <expression>)). Not part of the SPARQL 1.0 standard, but (for example) ARQ." ;
        rdfs:label       "Let" ;
        rdfs:subClassOf  sp:Bind .

sp:silent  rdf:type         rdf:Property ;
        rdfs:label          "silent" ;
        rdfs:range          xsd:boolean ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Service  rdf:type     rdfs:Class ;
        rdfs:comment     "A SERVICE call that matches a nested sub-pattern against a SPARQL end point specified by a URI." ;
        rdfs:label       "Service" ;
        rdfs:subClassOf  sp:ElementGroup .

sp:Describe  rdf:type    rdfs:Class ;
        rdfs:comment     "A DESCRIBE-type Query." ;
        rdfs:label       "Describe" ;
        rdfs:subClassOf  sp:Query .

sp:DeleteWhere  rdf:type  rdfs:Class ;
        rdfs:comment     "An Update operation where the triples matched by the WHERE clause (sp:where) will be the triples deleted." ;
        rdfs:label       "Delete where" ;
        rdfs:subClassOf  sp:Update .

sp:Query  rdf:type       rdfs:Class ;
        rdfs:comment     "Abstract base class of the various types of supported queries. Common to all types of queries is that they can have a body (\"WHERE clause\")." ;
        rdfs:label       "Query" ;
        rdfs:subClassOf  sp:Command .

sp:Optional  rdf:type    rdfs:Class ;
        rdfs:comment     "An optional element in a query." ;
        rdfs:label       "Optional" ;
        rdfs:subClassOf  sp:ElementGroup .

sp:Asc  rdf:type         rdfs:Class ;
        rdfs:comment     "Marker to indicate ascending order." ;
        rdfs:label       "Asc" ;
        rdfs:subClassOf  sp:OrderByCondition .

sp:insertPattern  rdf:type  rdf:Property ;
        rdfs:comment        "Points to a list of sp:TripleTemplates or sp:NamedGraphs in a modify command." ;
        rdfs:domain         sp:Modify ;
        rdfs:label          "insert pattern" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:with  rdf:type           rdf:Property ;
        rdfs:domain         sp:Modify ;
        rdfs:label          "with" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:query  rdf:type          rdf:Property ;
        rdfs:comment        "Links a SubQuery resource with the nested Query." ;
        rdfs:domain         sp:SubQuery ;
        rdfs:label          "query" ;
        rdfs:range          sp:Query ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Max  rdf:type         rdfs:Class ;
        rdfs:comment     "Represents MAX aggregations." ;
        rdfs:label       "MAX" ;
        rdfs:subClassOf  sp:Aggregation .

<http://spinrdf.org/sp>
        rdf:type         owl:Ontology ;
        rdfs:comment     "An RDF schema to syntactically represent SPARQL queries and update commands as RDF triples." ;
        rdfs:label       "SPIN SPARQL Syntax" ;
        owl:versionInfo  "1.5.1" .

sp:Triple  rdf:type      rdfs:Class ;
        rdfs:comment     "A base class for TriplePattern and TripleTemplate. This basically specifies that subject, predicate and object must be present." ;
        rdfs:label       "Triple" ;
        rdfs:subClassOf  sp:Tuple .

sp:usingNamed  rdf:type     rdf:Property ;
        rdfs:domain         sp:Modify ;
        rdfs:label          "using named" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:default  rdf:type        rdf:Property ;
        rdfs:comment        "Used in DROP and CLEAR." ;
        rdfs:label          "default" ;
        rdfs:range          xsd:boolean ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:path  rdf:type           rdf:Property ;
        rdfs:comment        "Points from a TriplePath to its path." ;
        rdfs:domain         sp:TriplePath ;
        rdfs:label          "path" ;
        rdfs:range          sp:Path ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:arg3  rdf:type           rdf:Property ;
        rdfs:comment        "The third argument of a function call." ;
        rdfs:label          "arg3" ;
        rdfs:subPropertyOf  sp:arg .

sp:serviceURI  rdf:type     rdf:Property ;
        rdfs:comment        "Used by sp:Service to specify the URI of the SPARQL end point to invoke. Must point to a URI node." ;
        rdfs:domain         sp:Service ;
        rdfs:label          "service URI" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Path  rdf:type        rdfs:Class ;
        rdfs:comment     "The base class of SPARQL property path expressions. Paths are used by sp:TriplePath triple paths." ;
        rdfs:label       "Path" ;
        rdfs:subClassOf  sp:SystemClass .

sp:graphIRI  rdf:type       rdf:Property ;
        rdfs:comment        "Points to graph names (IRIs) in various sp:Update operations." ;
        rdfs:label          "graph IRI" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Variable  rdf:type    rdfs:Class ;
        rdfs:comment     "A variable mentioned in a Triple or expression. Variables are often blank nodes with the variable name stored in ts:name. Variables can also be supplied with a URI in which case the system will attempt to reuse the same variable instance across multiple query definitions." ;
        rdfs:label       "Variable" ;
        rdfs:subClassOf  sp:SystemClass .

sp:ElementList  rdf:type  rdfs:Class ;
        rdfs:comment     "A list of Elements. This class is never instantiated directly as SPIN will use plain rdf:Lists to store element lists." ;
        rdfs:label       "Element list" ;
        rdfs:subClassOf  rdf:List , sp:ElementGroup .

sp:into  rdf:type           rdf:Property ;
        rdfs:comment        "The (optional) target of a LOAD Update operation." ;
        rdfs:domain         sp:Load ;
        rdfs:label          "into" ;
        rdfs:range          rdfs:Resource ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Min  rdf:type         rdfs:Class ;
        rdfs:comment     "Represents MIN aggregations." ;
        rdfs:label       "MIN" ;
        rdfs:subClassOf  sp:Aggregation .

sp:variable  rdf:type       rdf:Property ;
        rdfs:comment        "The variable of a Bind element." ;
        rdfs:domain         sp:Bind ;
        rdfs:label          "variable" ;
        rdfs:range          sp:Variable ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:Create  rdf:type      rdfs:Class ;
        rdfs:comment     "An Update operation that creates a new empty graph with a name specified by sp:graphIRI. May have sp:silent set to true." ;
        rdfs:label       "Create" ;
        rdfs:subClassOf  sp:Update .

sp:SubQuery  rdf:type    rdfs:Class ;
        rdfs:comment     "A nested SELECT query inside of an element list. The query is stored in sp:query." ;
        rdfs:label       "Sub query" ;
        rdfs:subClassOf  sp:Element .

sp:TriplePattern  rdf:type  rdfs:Class ;
        rdfs:comment     "A triple pattern used in the body of a query." ;
        rdfs:label       "Triple pattern" ;
        rdfs:subClassOf  sp:Triple , sp:Element .

sp:InsertData  rdf:type  rdfs:Class ;
        rdfs:comment     "An Update operation to insert specific triples. The graph triples are represented using sp:data, which points to an rdf:List of sp:Triples or sp:NamedGraphs." ;
        rdfs:label       "Insert data" ;
        rdfs:subClassOf  sp:Update .

sp:arg2  rdf:type           rdf:Property ;
        rdfs:comment        "The second argument of a function call." ;
        rdfs:label          "arg2" ;
        rdfs:subPropertyOf  sp:arg .

sp:ElementGroup  rdf:type  rdfs:Class ;
        rdfs:comment     "Abstract base class of group patterns." ;
        rdfs:label       "Element group" ;
        rdfs:subClassOf  sp:Element .

sp:resultVariables  rdf:type  rdf:Property ;
        rdfs:comment        "An rdf:List of variables that are returned by a Select query." ;
        rdfs:domain         sp:Select ;
        rdfs:label          "result variables" ;
        rdfs:range          rdf:List ;
        rdfs:subPropertyOf  sp:systemProperty .

sp:named  rdf:type          rdf:Property ;
        rdfs:comment        "Used in DROP and CLEAR." ;
        rdfs:label          "named" ;
        rdfs:range          xsd:boolean ;
        rdfs:subPropertyOf  sp:systemProperty .
