6 from StringIO import StringIO
9 from htsworkflow.util.rdfhelp import blankOrUri, toTypedNode
11 logger = logging.getLogger(__name__)
19 stream = open(filename,'r')
20 attributes = parse_stream(stream)
24 def fromstring(daf_string):
25 stream = StringIO(daf_string)
26 return parse_stream(stream)
28 def parse_stream(stream):
29 comment_re = re.compile("#.*$")
32 attributes = {'views': {}}
37 line = comment_re.sub("", line)
38 nstop = _extract_name_index(line)
40 sstop = _consume_whitespace(line, start=nstop)
41 vstop = _extract_value_index(line, start=sstop)
42 value = line[sstop:vstop]
44 if value.lower() in ('yes',):
46 elif value.lower() in ('no',):
50 if view_name is not None:
51 attributes['views'][view_name] = view_attributes
55 elif state == DAF_HEADER and name == 'variables':
56 attributes[name] = [ x.strip() for x in value.split(',')]
57 elif state == DAF_HEADER and name == 'view':
59 view_attributes['view'] = value
61 elif state == DAF_HEADER:
62 attributes[name] = value
63 elif state == DAF_VIEW:
64 view_attributes[name] = value
67 if view_name is not None:
68 attributes['views'][view_name] = view_attributes
72 def _consume_whitespace(line, start=0):
73 for i in xrange(start, len(line)):
74 if line[i] not in string.whitespace:
79 def _extract_name_index(line, start=0):
80 for i in xrange(start, len(line)):
81 if line[i] in string.whitespace:
86 def _extract_value_index(line, start=0):
87 shortline = line.rstrip()
92 def convert_to_rdf_statements(attributes, source=None):
93 ddfNS = RDF.NS("http://encodesubmit.ucsc.edu/pipeline/download_ddf#")
95 subject = blankOrUri(source)
98 for name in attributes:
99 predicate = ddfNS[name]
101 predicate = ddfNS['views']
102 for view_name in attributes.get('views', []):
103 view = attributes['views'][view_name]
104 viewNode = RDF.Node()
105 statements.append(RDF.Statement(subject, predicate, viewNode))
106 statements.extend(convert_to_rdf_statements(view, viewNode))
107 elif name == 'variables':
108 predicate = ddfNS['variables']
109 for var in attributes.get('variables', []):
110 obj = toTypedNode(var)
111 statements.append(RDF.Statement(subject, predicate, obj))
113 value = attributes[name]
114 obj = toTypedNode(value)
115 statements.append(RDF.Statement(subject,predicate,obj))
120 def add_to_model(model, attributes, source=None):
121 for statement in convert_to_rdf_statements(attributes, source):
122 model.add_statement(statement)
124 except ImportError, e:
125 def convert_to_rdf_statements(attributes, source=None):
126 raise NotImplementedError("librdf not installed")
127 def add_to_model(model, attributes, source=None):
128 raise NotImplementedError("librdf not installed")