Changeset 2122
- Timestamp:
- 06/16/09 18:34:39 (15 months ago)
- Location:
- trunk/slv2/src
- Files:
-
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/slv2/src/query.c
r2117 r2122 40 40 41 41 42 /** Create a new SLV2Value from a librdf_node, or return NULL if impossible */43 SLV2Value44 slv2_value_from_librdf_node(SLV2World world, librdf_node* node)45 {46 SLV2Value result = NULL;47 48 librdf_uri* datatype_uri = NULL;49 SLV2ValueType type = SLV2_VALUE_STRING;50 51 switch (librdf_node_get_type(node)) {52 case LIBRDF_NODE_TYPE_RESOURCE:53 type = SLV2_VALUE_URI;54 result = slv2_value_new_librdf_uri(world, librdf_node_get_uri(node));55 break;56 case LIBRDF_NODE_TYPE_LITERAL:57 datatype_uri = librdf_node_get_literal_value_datatype_uri(node);58 if (datatype_uri) {59 if (!strcmp((const char*)librdf_uri_as_string(datatype_uri),60 "http://www.w3.org/2001/XMLSchema#integer"))61 type = SLV2_VALUE_INT;62 else if (!strcmp((const char*)librdf_uri_as_string(datatype_uri),63 "http://www.w3.org/2001/XMLSchema#decimal"))64 type = SLV2_VALUE_FLOAT;65 else66 SLV2_ERRORF("Unknown datatype %s\n", librdf_uri_as_string(datatype_uri));67 }68 result = slv2_value_new(world, type, (const char*)librdf_node_get_literal_value(node));69 break;70 case LIBRDF_NODE_TYPE_BLANK:71 type = SLV2_VALUE_STRING;72 result = slv2_value_new(world, type, (const char*)librdf_node_get_blank_identifier(node));73 break;74 case LIBRDF_NODE_TYPE_UNKNOWN:75 default:76 SLV2_ERRORF("Unknown RDF node type %d\n", librdf_node_get_type(node));77 break;78 }79 80 return result;81 }82 83 84 42 SLV2Values 85 43 slv2_query_get_variable_bindings(SLV2World world, … … 101 59 } 102 60 103 SLV2Value val = slv2_value_ from_librdf_node(world, node);61 SLV2Value val = slv2_value_new_librdf_node(world, node); 104 62 if (val) 105 63 raptor_sequence_push(result, val); … … 176 134 slv2_results_get_binding_value(SLV2Results results, unsigned index) 177 135 { 178 return slv2_value_ from_librdf_node(results->world,136 return slv2_value_new_librdf_node(results->world, 179 137 librdf_query_results_get_binding_value( 180 138 results->rdf_results, index)); … … 185 143 slv2_results_get_binding_value_by_name(SLV2Results results, const char* name) 186 144 { 187 return slv2_value_ from_librdf_node(results->world,145 return slv2_value_new_librdf_node(results->world, 188 146 librdf_query_results_get_binding_value_by_name( 189 147 results->rdf_results, name)); -
trunk/slv2/src/value.c
r2117 r2122 73 73 74 74 75 /* private */75 /** Create a new SLV2Value from a librdf_node, or return NULL if impossible */ 76 76 SLV2Value 77 77 slv2_value_new_librdf_node(SLV2World world, librdf_node* node) 78 78 { 79 SLV2Value val = (SLV2Value)malloc(sizeof(struct _SLV2Value)); 80 val->type = SLV2_VALUE_STRING; 81 val->str_val = NULL; 79 SLV2Value result = NULL; 82 80 83 81 librdf_uri* datatype_uri = NULL; 82 SLV2ValueType type = SLV2_VALUE_STRING; 84 83 85 84 switch (librdf_node_get_type(node)) { 86 85 case LIBRDF_NODE_TYPE_RESOURCE: 87 val->type = SLV2_VALUE_URI; 88 val->val.uri_val = librdf_node_get_uri(node); 89 val->str_val = (char*)librdf_uri_as_string(val->val.uri_val); 86 type = SLV2_VALUE_URI; 87 result = slv2_value_new_librdf_uri(world, librdf_node_get_uri(node)); 90 88 break; 91 89 case LIBRDF_NODE_TYPE_LITERAL: 92 90 datatype_uri = librdf_node_get_literal_value_datatype_uri(node); 93 91 if (datatype_uri) { 94 if (librdf_uri_equals(datatype_uri, librdf_node_get_uri(world->xsd_integer_node))) 95 val->type = SLV2_VALUE_INT; 96 else if (librdf_uri_equals(datatype_uri, librdf_node_get_uri(world->xsd_decimal_node))) 97 val->type = SLV2_VALUE_FLOAT; 92 if (!strcmp((const char*)librdf_uri_as_string(datatype_uri), 93 "http://www.w3.org/2001/XMLSchema#integer")) 94 type = SLV2_VALUE_INT; 95 else if (!strcmp((const char*)librdf_uri_as_string(datatype_uri), 96 "http://www.w3.org/2001/XMLSchema#decimal")) 97 type = SLV2_VALUE_FLOAT; 98 98 else 99 99 SLV2_ERRORF("Unknown datatype %s\n", librdf_uri_as_string(datatype_uri)); 100 100 } 101 val->str_val = strdup((char*)librdf_node_get_literal_value(node));101 result = slv2_value_new(world, type, (const char*)librdf_node_get_literal_value(node)); 102 102 break; 103 103 case LIBRDF_NODE_TYPE_BLANK: 104 type = SLV2_VALUE_STRING; 105 result = slv2_value_new(world, type, (const char*)librdf_node_get_blank_identifier(node)); 106 break; 104 107 case LIBRDF_NODE_TYPE_UNKNOWN: 105 108 default: 106 SLV2_ERROR("Unknown node type"); 107 free(val); 108 val = NULL; 109 break; 110 } 111 112 if (val) 113 slv2_value_set_numerics_from_string(val); 114 115 return val; 109 SLV2_ERRORF("Unknown RDF node type %d\n", librdf_node_get_type(node)); 110 break; 111 } 112 113 if (result) 114 slv2_value_set_numerics_from_string(result); 115 116 return result; 116 117 } 117 118
