1 """Helper features for working with librdf
8 # standard ontology namespaces
9 owlNS = RDF.NS('http://www.w3.org/2002/07/owl#')
10 dublinCoreNS = RDF.NS("http://purl.org/dc/elements/1.1/")
11 rdfNS = RDF.NS("http://www.w3.org/1999/02/22-rdf-syntax-ns#")
12 rdfsNS= RDF.NS("http://www.w3.org/2000/01/rdf-schema#")
13 xsdNS = RDF.NS("http://www.w3.org/2001/XMLSchema#")
16 submissionOntology = RDF.NS("http://jumpgate.caltech.edu/wiki/UcscSubmissionOntology#")
17 dafTermOntology = RDF.NS("http://jumpgate.caltech.edu/wiki/UcscDaf#")
18 libraryOntology = RDF.NS("http://jumpgate.caltech.edu/wiki/LibraryOntology#")
19 submissionLog = RDF.NS("http://jumpgate.caltech.edu/wiki/SubmissionsLog/")
21 def blankOrUri(value=None):
25 elif type(value) in types.StringTypes:
26 node = RDF.Node(uri_string=value)
27 elif isinstance(value, RDF.Node):
33 def toTypedNode(value):
34 if type(value) == types.BooleanType:
35 value_type = xsdNS['boolean'].uri
40 elif type(value) in (types.IntType, types.LongType):
41 value_type = xsdNS['decimal'].uri
42 value = unicode(value)
43 elif type(value) == types.FloatType:
44 value_type = xsdNS['float'].uri
45 value = unicode(value)
46 elif type(value) in types.StringTypes:
47 value_type = xsdNS['string'].uri
50 value = unicode(value)
52 return RDF.Node(literal=value, datatype=value_type)
54 def fromTypedNode(node):
58 value_type = str(node.literal_value['datatype'])
59 # chop off xml schema declaration
60 value_type = value_type.replace(str(xsdNS[''].uri),'')
61 literal = node.literal_value['string']
62 literal_lower = literal.lower()
64 if value_type == 'boolean':
65 if literal_lower in ('1', 'yes', 'true'):
67 elif literal_lower in ('0', 'no', 'false'):
70 raise ValueError("Unrecognized boolean %s" % (literal,))
71 elif value_type == 'decimal' and literal.find('.') == -1:
73 elif value_type in ('decimal', 'float', 'double'):
75 elif value_type in ('string'):
77 elif value_type in ('dateTime'):
78 raise NotImplemented('need to parse isoformat date-time')
83 def get_model(model_name=None, directory=None):
85 directory = os.getcwd()
87 if model_name is None:
88 storage = RDF.MemoryStorage()
90 storage = RDF.HashStorage(model_name,
91 options="hash-type='bdb',dir='{0}'".format(directory))
92 model = RDF.Model(storage)
96 def load_into_model(model, parser_name, filename, ns=None):
97 if not os.path.exists(filename):
98 raise IOError("Can't find {0}".format(filename))
100 data = open(filename, 'r').read()
101 rdf_parser = RDF.Parser(name=parser_name)
102 rdf_parser.parse_string_into_model(model, data, ns)
105 def get_serializer(name='turtle'):
106 """Return a serializer with our standard prefixes loaded
108 writer = RDF.Serializer(name=name)
109 # really standard stuff
110 writer.set_namespace('owl', owlNS._prefix)
111 writer.set_namespace('rdf', rdfNS._prefix)
112 writer.set_namespace('rdfs', rdfsNS._prefix)
113 writer.set_namespace('xsd', xsdNS._prefix)
115 # should these be here, kind of specific to an application
116 writer.set_namespace('libraryOntology', libraryOntology._prefix)
117 writer.set_namespace('ucscSubmission', submissionOntology._prefix)
118 writer.set_namespace('ucscDaf', dafTermOntology._prefix)