graph-studio
Infer New Data (RDFS+ Inference Step)
This topic provides guidance on configuring an RDFS+ Inference Step that uses RDFS+ and OWL rules to create new relationships based on the vocabularies in the existing data. Follow the steps below to create an RDFS+ Inference Step.
Go to the graphmart for which you want to add a step and then expand its Data Layers list.
In the Data Layers list, find the layer that you want to add the step to. Click the menu icon (
) for that layer and select Add Step/View. For example:
The Add Step/View dialog box is displayed with the New tab selected.

To create a new RDFS+ Inference step, select RDFS+ Inference Step and then click OK. If you want to clone an existing step, click the Existing Steps tab, select the step that you want to clone, and then click OK. Graph Studio creates or clones the step and displays the Details tab:

On the Details tab, configure the following options as needed:
Title: The required name of the step.
Description: An optional short description of the step.
Enabled: When creating a new step, the Enabled option is selected by default, indicating that the step is enabled and will run when the layer is loaded or refreshed. If you want to disable the step so that it is not processed, clear the Enabled checkbox.
Inference Rules to Run: By default the step runs all of the RDFS-plus inference rules and a subset of the OWL 2 RL rules (see Inference Rule Reference below for specifics). If you want to customize the step to include or exclude certain rules, specify any combination of the following options in the Inference Rules To Run field. Specify multiple options in a comma-separated list:
- all: Run all rules.
- rdfsplus: Run only the RDFS-plus rules.
- rule_names: List specific rules to run only those rules. See Inference Rule Reference.
- -rule_name: Specify a hyphen (-) in front of a rule name to exclude that rule. For example, -scm-svf2 excludes the scm-svf2 rule.
For example, the following value runs all of the inference rules except prp-fp and prp-ifp:
all,-prp-fp,-prp-ifp
Certain inference rules are coupled. Specifying either of the rules in the pair automatically runs the coupled rule. The list below describes the paired rules:
- scm-dom1 and scm-rng1
- scm-dom2 and scm-rng2
- prp-inv1 and prp-inv2
In addition, running scm-eqc1and cax-sco also runs cax-eqc1 and cax-eqc2. And running scm-eqp1 and prp-spo1 also runs prp-eqp1 and prp-eqp2.
Source: The source data that this step should act upon. Steps can build upon the data generated by steps in other layers or can be self-contained, applying changes that relate only to the data defined in the layer that contains this step. You can select any number of the following options:
- Self: This option is selected by default and means that the step runs against the data that is in the parent layer.
- All Previous Layers Within Graphmart: This option means that the step runs against the data in all of the successful layers that precede the layer this step is in. Any failed layers are ignored.
- Previous Layer Within Graphmart: This option means that the query runs against the data that is in the one layer that precedes the layer this step is in.
- Layer Name: The Source drop-down list also includes options for layer names. You can choose a specific layer to act upon the data in that layer.
Data models: This required field specifies the model or models to associate with this step. The list displays all of the available models. By default, the field is set to Exclude System Data (
). If you want to choose a system model, click the toggle button on the right side of the field to change it to Include System Data (
). When system data is included, the drop-down list displays the system models in addition to the user-generated models.Pre-Run Generate Statistics: This option controls whether to initiate Graph Lakehouse's internal statistics gathering queries before running this step. The statistics gathering helps ensure that the Graph Lakehouse query planner generates ideal query execution plans for queries that are run against the graphmart.
Click Save to save the step configuration.
Once the Details tab is configured, the step can be run. For information about running this step conditionally by setting up an execution condition, see Defining Execution Conditions.
Inference Rule Reference
This section provides reference information for the RDFS-plus rules and the subset of OWL 2 RL rules that inference steps run.
RDFS+ Rules
The tables below define the RDFS-plus inference rules.
Semantics of Class Axioms
Because cax-eqc1 and cax-eqc2 (described in the table below) are implied rules that are coupled with scm-eqc1 and cax-sco, including cax-eqc1 or cax-eqc2 in the Inference Rules to Run field will result in an invalid inference rule name error. To run the cax-eqc1 and cax-eqc2 rules, specify scm-eqc1 and cax-sco (scm-eqc1,cax-sco).
| Rule | Description | IF | THEN |
|---|---|---|---|
| cax-eqc1 | Two classes are synonymous. | T(?c1, owl:equivalentClass, ?c2) | |
| T(?x, rdf:type, ?c1) | T(?x, rdf:type, ?c2) | ||
| cax-eqc2 | Two classes are synonymous. | T(?c1, owl:equivalentClass, ?c2) | |
| T(?x, rdf:type, ?c2) | T(?x, rdf:type, ?c1) | ||
| cax-sco | Members of a subclass are also members of the superclass. | T(?c1, rdfs:subClassOf, ?c2) | |
| T(?x, rdf:type, ?c1) | T(?x, rdf:type, ?c2) |
Semantics of Axioms about Properties
Because prp-eqp1 and prp-eqp2 (described in the table below) are implied rules that are coupled with scm-eqp1 and prp-spo1, including prp-eqp1 or prp-eqp2 in the Inference Rules to Run field will result in an invalid inference rule name error. To run the prp-eqp1 and prp-eqp2 rules, specify scm-eqp1 and prp-spo1 (scm-eqp1,prp-spo1).
| Rule | Description | IF | THEN |
|---|---|---|---|
| prp-dom | Infer the subject's type from the predicate's domain. | T(?p, rdfs:domain, ?c) | |
| T(?x, ?p, ?y) | T(?x, rdf:type, ?c) | ||
| prp-eqp1 | Two properties are synonymous. | T(?p1, owl:equivalentProperty, ?p2) | |
| T(?x, ?p1, ?y) | T(?x, ?p2, ?y) | ||
| prp-eqp2 | Two properties are synonymous. | T(?p1, owl:equivalentProperty, ?p2) | |
| T(?x, ?p2, ?y) | T(?x, ?p1, ?y) | ||
| prp-fp | If predicate p is a functional property, then a subject can be related to only one specific object by p. | T(?p, rdf:type, owl:FunctionalProperty) | |
| T(?x, ?p, ?y1) | |||
| T(?x, ?p, ?y2) | T(?y1, owl:sameAs, ?y2) | ||
| prp-ifp | If predicate p is an inverse functional property, then a specific object can be related to only one subject by p. | T(?p, rdf:type, owl:InverseFunctionalProperty) | |
| T(?x1, ?p, ?y) | |||
| T(?x2, ?p, ?y) | T(?x1, owl:sameAs, ?x2) | ||
| prp-inv1 | Two properties are the inverse of each other. | T(?p1, owl:inverseOf, ?p2) | |
| T(?x, ?p1, ?y) | T(?y, ?p2, ?x) | ||
| prp-inv2 | Two properties are the inverse of each other. | T(?p1, owl:inverseOf, ?p2) | |
| T(?x, ?p2, ?y) | T(?y, ?p1, ?x) | ||
| prp-rng | Infer the object's type from the predicate's range. | T(?p, rdfs:range, ?c) | |
| T(?x, ?p, ?y) | T(?y, rdf:type, ?c) | ||
| prp-spo1 | Relationships that are described by a subproperty also hold for the superproperty. | T(?p1, rdfs:subPropertyOf, ?p2) | |
| T(?x, ?p1, ?y) | T(?x, ?p2, ?y) | ||
| prp-symp | The inverse is true for a property. | T(?p, rdf:type, owl:SymmetricProperty) | |
| T(?x, ?p, ?y) | T(?y, ?p, ?x) | ||
| prp-trp | Chains of relationships collapse into a single relationship. | T(?p, rdf:type, owl:TransitiveProperty) | |
| T(?x, ?p, ?y) | |||
| T(?y, ?p, ?z) | T(?x, ?p, ?z) |
Semantics of Schema Vocabulary
| Rule | Description | IF | THEN |
|---|---|---|---|
| scm-cls | Every class is its own subclass and equivalent class, and it is a subclass of owl:Thing. | T(?c, rdf:type, owl:Class) | T(?c, rdfs:subClassOf, ?c) |
| T(?c, owl:equivalentClass, ?c) | |||
| T(?c, rdfs:subClassOf, owl:Thing) | |||
| T(owl:Nothing, rdfs:subClassOf, ?c) | |||
| scm-dom1 | A property with domain c also has domain c's superclasses. | T(?p, rdfs:domain, ?c1) | |
| T(?c1, rdfs:subClassOf, ?c2) | T(?p, rdfs:domain, ?c2) | ||
| scm-dom2 | A subproperty inherits the domains of the superproperties. | T(?p2, rdfs:domain, ?c) | |
| T(?p1, rdfs:subPropertyOf, ?p2) | T(?p1, rdfs:domain, ?c) | ||
| scm-eqc1 | Equivalent classes are subclasses of each other. | T(?c1, owl:equivalentClass, ?c2) | T(?c1, rdfs:subClassOf, ?c2) |
| T(?c2, rdfs:subClassOf, ?c1) | |||
| scm-eqc2 | If two classes are subclasses, they are also equivalent classes. | T(?c1, rdfs:subClassOf, ?c2) | |
| T(?c2, rdfs:subClassOf, ?c1) | T(?c1, owl:equivalentClass, ?c2) | ||
| scm-eqp1 | Equivalent properties are subproperties of each other. | T(?p1, owl:equivalentProperty, ?p2) | T(?p1, rdfs:subPropertyOf, ?p2) |
| T(?p2, rdfs:subPropertyOf, ?p1) | |||
| scm-eqp2 | If two properties are subproperties, they are also equivalent properties. | T(?p1, rdfs:subPropertyOf, ?p2) | |
| T(?p2, rdfs:subPropertyOf, ?p1) | T(?p1, owl:equivalentProperty, ?p2) | ||
| scm-rng1 | A property with range c also has range c's superclasses. | T(?p, rdfs:range, ?c1) | |
| T(?c1, rdfs:subClassOf, ?c2) | T(?p, rdfs:range, ?c2) | ||
| scm-rng2 | A subproperty inherits the ranges of its superproperties. | T(?p2, rdfs:range, ?c) | |
| T(?p1, rdfs:subPropertyOf, ?p2) | T(?p1, rdfs:range, ?c) | ||
| scm-sco | owl:subClassOf relationships are transitive | T(?c1, rdfs:subClassOf, ?c2) | |
| T(?c2, rdfs:subClassOf, ?c3) | T(?c1, rdfs:subClassOf, ?c3) | ||
| scm-spo | owl:subPropertyOf relationships are transitive. | T(?p1, rdfs:subPropertyOf, ?p2) | |
| T(?p2, rdfs:subPropertyOf, ?p3) | T(?p1, rdfs:subPropertyOf, ?p3) |
The scm-dp and scm-op schema vocabulary rules are not run. Those rules add significant compute overhead but do not result in meaningful inference results.
OWL 2 RL Rules
The tables below define the subset of OWL 2 RL inference rules that inference steps run.
Semantics of Equality
| Rule | Description | IF | THEN |
|---|---|---|---|
| eq-rep-o | Describes the replacement property of the owl:sameAs axiom. | T(?o, owl:sameAs, ?o') | |
| T(?s, ?p, ?o) | T(?s, ?p, ?o') | ||
| eq-rep-p | Describes the replacement property of the owl:sameAs axiom. | T(?p, owl:sameAs, ?p') | |
| T(?s, ?p, ?o) | T(?s, ?p', ?o) | ||
| eq-rep-s | Describes the replacement property of the owl:sameAs axiom. | T(?s, owl:sameAs, ?s') | |
| T(?s, ?p, ?o) | T(?s', ?p, ?o) | ||
| eq-sym | Describes the symmetric property of the owl:sameAs axiom. | T(?x, owl:sameAs, ?y) | T(?y, owl:sameAs, ?x) |
| eq-trans | Describes the transitive property of the owl:sameAs axiom. | T(?x, owl:sameAs, ?y) | |
| T(?y, owl:sameAs, ?z) | T(?x, owl:sameAs, ?z) |
Semantics of Schema Vocabulary
| Rule | Description | IF | THEN |
|---|---|---|---|
| scm-svf1 | A property restriction c1 is a subclass of c2 if they are both someValuesFrom restrictions on the same property and c1's target class is a subclass of c2's target class. | T(?c1, owl:someValuesFrom, ?y1) | |
| T(?c1, owl:onProperty, ?p) | |||
| T(?c2, owl:someValuesFrom, ?y2) | |||
| T(?c2, owl:onProperty, ?p) | |||
| T(?y1, rdfs:subClassOf, ?y2) | T(?c1, rdfs:subClassOf, ?c2) | ||
| scm-svf2 | A property restriction c1 is a subclass of c2 if they are both someValuesFrom restrictions on the same class where c1's target property is a subproperty of c2's target property. | T(?c1, owl:someValuesFrom, ?y) | |
| T(?c1, owl:onProperty, ?p1) | |||
| T(?c2, owl:someValuesFrom, ?y) | |||
| T(?c2, owl:onProperty, ?p2) | |||
| T(?p1, rdfs:subPropertyOf, ?p2) | T(?c1, rdfs:subClassOf, ?c2) | ||
| scm-int | T(?c, owl:intersectionOf, ?x) | ||
| LIST[?x, ?c1, ..., ?cn] | T(?c, rdfs:subClassOf, ?c1) | ||
| T(?c, rdfs:subClassOf, ?c2) | |||
| ... | |||
| T(?c, rdfs:subClassOf, ?cn) |
Semantics of Classes
| Rule | Description | IF | THEN |
|---|---|---|---|
| cls-svf1 | At least one object of a property is a member of the specified class. | T(?x, owl:someValuesFrom, ?y) | |
| T(?x, owl:onProperty, ?p) | |||
| T(?u, ?p, ?v) | |||
| T(?v, rdf:type, ?y) | T(?u, rdf:type, ?x) | ||
| cls-int1 | An instance belongs to every one of the specified classes. | T(?c, owl:intersectionOf, ?x) | |
| LIST[?x, ?c1, ..., ?cn] | |||
| T(?y, rdf:type, ?c1) | |||
| T(?y, rdf:type, ?c2) | |||
| ... | |||
| T(?y, rdf:type, ?cn) | T(?y, rdf:type, ?c) |
Source: https://docs.sw.siemens.com/documentation/external/PL20260212925461721/en-US/graph_studio/step-inference.htm · retrieved 2026-08-23