We start with a simple datafile containing:

	<rdf:Description rdf:about="http://mondial/country/D">
    	<mon:has_province rdf:resource="http://mondial/province/D/Niedersachsen"/>
	</rdf:Description>

When we query for mon:Country or mon:Province, we obtain no results. This is no 
suprise, as we did not add any related information.

One possibility is to add type information to our resource:

	<rdf:Description rdf:about="http://mondial/country/D">
    	<mon:has_province rdf:resource="http://mondial/province/D/Niedersachsen"/>
		<rdf:type rdf:resource="#Country"/>
	</rdf:Description>

The following SPARQL-Query
SELECT ?c WHERE ?c rdf:type mon:Country .

then returns

<result>
   <variable name="c">http://mondial/country/D"></variable>
</result>

Another possibility makes use of owl-reasoning. When we add 
	<owl:ObjectProperty rdf:ID="has_province">
		<rdfs:range  rdf:resource="#Province" />
		<rdfs:domain rdf:resource="#Country" />
	</owl:ObjectProperty>

and build our model with inference support, we obtain, for the
same query as above without explicitly adding type information,
the same result. Because resource country/D has the attribute 
has_province, it must be a country. In addition, Niedersachsen must
be a province, as it is the object of that property.

If we add the followng property to the ontology
	<owl:TransitiveProperty rdf:ID="locatedIn"/>
and add such a property as follows:

<rdf:Description rdf:about="http://mondial/province/D/Niedersachsen"">
	<mon:locatedIn rdf:resource="http://mondial/country/D"/>
</rdf:Description>

and moreover add
	<mon:locatedIn rdf:resource="http://mondial/continent/Europe"/>
to http://mondial/country/D

the query
SELECT ?c WHERE <http://mondial/province/D/Niedersachsen> mon:locatedIn ?c .
would result in
<result>
   <variable name="c">http://mondial/country/D</variable>
</result>
<result>
   <variable name="c">http://mondial/continent/Europe</variable>
</result>
as the property locatedIn is defined to be transitive.

