I try to get index from family example using SEM_MATCH. For example I doINSERT INTO family_rdf_data VALUES (3,SDO_RDF_TRIPLE_S('family',
*'http://www.example.org/family/Janice',*
*'http://www.example.org/family/motherOf',*
*'http://www.example.org/family/Suzie'));*

It really depends on what rows you have in your application table.
Note that if you insert the same triple multiple times into your application table,
you are likely to get "duplicates" when querying the graph together with your application table.

In contrast, when querying using SEM_MATCH, the underlying RDFM_<modelName> view
maintains a set of triples.

As far as your query goes, basically it finds the ID of the RDF resource (which is father of John),
you then join it with the application table, locating rows that have the same object ID.

Obviously, the object ID itself is not sufficient to uniquely identify a triple.
You may want to add predicates using oracle_orardf_res2vid for both :John
and :fatherOf.

Note that
rdf_s_id is the ID for triple subject and
rdf_p_id is the ID for triple predicate.