+
+def fromTypedNode(node):
+ if node is None:
+ return None
+
+ value_type = str(node.literal_value['datatype'])
+ # chop off xml schema declaration
+ value_type = value_type.replace(str(xsdNS[''].uri),'')
+ literal = node.literal_value['string']
+ literal_lower = literal.lower()
+
+ if value_type == 'boolean':
+ if literal_lower in ('1', 'yes', 'true'):
+ return True
+ elif literal_lower in ('0', 'no', 'false'):
+ return False
+ else:
+ raise ValueError("Unrecognized boolean %s" % (literal,))
+ elif value_type == 'decimal' and literal.find('.') == -1:
+ return int(literal)
+ elif value_type in ('decimal', 'float', 'double'):
+ return float(literal)
+ elif value_type in ('string'):
+ return literal
+ elif value_type in ('dateTime'):
+ raise NotImplemented('need to parse isoformat date-time')
+
+ return literal
+
+
+def get_model(model_name=None, directory=None):
+ if directory is None:
+ directory = os.getcwd()
+
+ if model_name is None:
+ storage = RDF.MemoryStorage()
+ else:
+ storage = RDF.HashStorage(model_name,
+ options="hash-type='bdb',dir='{0}'".format(directory))
+ model = RDF.Model(storage)
+ return model
+
+
+def load_into_model(model, parser_name, filename, ns=None):
+ if not os.path.exists(filename):
+ raise IOError("Can't find {0}".format(filename))