[redland] Node Type Returning incorrectly.
    Dave Beckett 
    dave.beckett at bristol.ac.uk
       
    Thu Sep 13 12:36:12 BST 2001
    
    
  
>>>Sameer Abhinkar said:
> Here is the problem description in brief.. with some
> parts of the source code.
> 
> I have a statement which is of the format:
> {[file://home/sameer/ccppdef.rdf#genid2],[http://www.w3.org/1999/02/22-rdf-sy
    ntax-ns#type],[http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag]}
> The above statement is stored in variable 'statement'
> 
> I create three nodes out of it
> node_sub = librdf_statement_get_object(statement);
> node_pred = librdf_statement_get_pred(statement);
> node_obj = librdf_statement_get_obj(statement);
> 
> int i = librdf_node_get_type(node_obj);
> 
> i is returning LIBRDF_NODE_TYPE_RESOURCE(1) in lieu of
> LIBRDF_NODE_TYPE_BAG(4). Does anyone know why this
> could happen?
Yes - the answer is that I started to consider having special types
for containers but it turned on that this is a bad idea.  the RDF
Core working group has recently removed containers as special-cases
in RDF, the rdf:Seq, rdf:Bag and rdf:Alt are just classes that can be
used like any ther node.  I should remove the containers stuff from
that call; only LIBRDF_NODE_TYPE_RESOURCE and LIBRDF_NODE_TYPE_LITERAL
should be expected.
Hence, you will just get back a node type of
LIBRDF_NODE_TYPE_RESOURCE.  If you want to find out what the RDF type
of a resource (container) is, you will have to make a query for the
rdf:type property of the resource ie ask for a statement matching:
  [resource-URI, rdf:type, ?]
or in C API terms:
  /* find the target (object) of the above statement */
  n=librdf_model_get_target(model, node_sub,        /* resource node */
                                   LIBRDF_MS_type); /* rdf:type property */
and which point 'n' will be a new librdf_node objet of the type of
the resource or NULL on failure (no rdf:type property found).  There
can be more than one type potentially, in which case you will have to
use librdf_model_get_targets and iterate along the sequence of
returned librdf_node objects.
There is code similar to the above in example4.c around
  http://www.redland.opensource.ac.uk/lxr/source/example4.c#L421
> Thanks,
> 
> Sameer Abhinkar
Dave
    
    
More information about the redland-dev
mailing list