Nektar++
Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
CellMLToNektar.cellml_metadata.RdfProcessor Class Reference
Inheritance diagram for CellMLToNektar.cellml_metadata.RdfProcessor:
[legend]

Public Member Functions

def __init__ (self, name)
 
def __getattribute__ (self, name)
 
def METADATA_NAMES (self)
 
def STIMULUS_NAMES (self)
 
def get_rdf_from_model (self, cellml_model)
 
def remove_model (self, cellml_model)
 
def update_serialized_rdf (self, cellml_model)
 
def create_rdf_node (self, node_content=None, fragment_id=None)
 
def create_unique_id (self, cellml_model, base_id)
 
def add_statement (self, cellml_model, source, property, target)
 
def replace_statement (self, cellml_model, source, property, target)
 
def remove_statements (self, cellml_model, source, property, target)
 
def get_target (self, cellml_model, source, property)
 
def get_targets (self, cellml_model, source, property)
 
def find_variables (self, cellml_model, property, value=None)
 
def get_all_rdf (self, cellml_model)
 
def namespace_member (self, node, nsuri, not_uri_ok=False, wrong_ns_ok=False)
 

Public Attributes

 Graph
 

Private Member Functions

def _debug (args)
 
def _load_ontology (self)
 
def _create_new_store (self, cellml_model)
 
def _add_rdf_element (self, cellml_model, rdf_text)
 
def _serialize (self, cellml_model)
 

Private Attributes

 _module
 
 _initializing
 
 _models
 
 _metadata_names
 
 _stimulus_names
 

Detailed Description

Implements CellML metadata functionality using the RDFLib library.

Definition at line 61 of file cellml_metadata.py.

Constructor & Destructor Documentation

◆ __init__()

def CellMLToNektar.cellml_metadata.RdfProcessor.__init__ (   self,
  name 
)
Create the wrapper.

Definition at line 63 of file cellml_metadata.py.

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.__getattribute__().

63  def __init__(self, name):
64  """Create the wrapper."""
65  # Magic for pretending to be a module
66  self._module = sys.modules[name]
67  sys.modules[name] = self
68  self._initializing = True
69  # Map from cellml_model instances to RDF stores
70  self._models = {}
71  # Oxford metadata will be loaded lazily
72  self._metadata_names = self._stimulus_names = None
73  # Cope with differences in API between library versions
74  rdflib_major_version = int(rdflib.__version__[0])
75  if rdflib_major_version >= 3:
76  self.Graph = rdflib.Graph
77  else:
78  self.Graph = rdflib.ConjunctiveGraph
79 

Member Function Documentation

◆ __getattribute__()

def CellMLToNektar.cellml_metadata.RdfProcessor.__getattribute__ (   self,
  name 
)
Provide access to real module-level variables as though they're class properties.

Definition at line 80 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor.__init__().

80  def __getattribute__(self, name):
81  """Provide access to real module-level variables as though they're class properties."""
82  # call module.__init__ after import introspection is done
83  baseget = super(RdfProcessor, self).__getattribute__
84  module = baseget('_module')
85  if baseget('_initializing') and not name[:2] == '__' == name[-2:]:
86  setattr(self, '_initializing', False)
87  __init__(module)
88  try:
89  return baseget(name)
90  except AttributeError:
91  return getattr(module, name)
92 

◆ _add_rdf_element()

def CellMLToNektar.cellml_metadata.RdfProcessor._add_rdf_element (   self,
  cellml_model,
  rdf_text 
)
private
Add statements to the model's graph from the given serialized RDF.

Definition at line 143 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._models, and CellMLToNektar.cellml_metadata.RdfProcessor.Graph.

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

143  def _add_rdf_element(self, cellml_model, rdf_text):
144  """Add statements to the model's graph from the given serialized RDF."""
145  g = self.Graph()
146  g.parse(StringIO(rdf_text))
147  rdf_model = self._models[cellml_model]
148  for stmt in g:
149  rdf_model.add(stmt)
150 

◆ _create_new_store()

def CellMLToNektar.cellml_metadata.RdfProcessor._create_new_store (   self,
  cellml_model 
)
private
Create a new RDF store for the given CellML model.
The new store will be available as self._models[cellml_model].

Definition at line 137 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._models, and CellMLToNektar.cellml_metadata.RdfProcessor.Graph.

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

137  def _create_new_store(self, cellml_model):
138  """Create a new RDF store for the given CellML model.
139  The new store will be available as self._models[cellml_model].
140  """
141  self._models[cellml_model] = self.Graph()
142 

◆ _debug()

def CellMLToNektar.cellml_metadata.RdfProcessor._debug (   args)
private

◆ _load_ontology()

def CellMLToNektar.cellml_metadata.RdfProcessor._load_ontology (   self)
private
Load the Oxford metadata ontology the first time it's needed.

Definition at line 96 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._metadata_names, CellMLToNektar.cellml_metadata.RdfProcessor._stimulus_names, CellMLToNektar.cellml_metadata.RdfProcessor.Graph, and CellMLToNektar.cellml_metadata.RdfProcessor.namespace_member().

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.METADATA_NAMES(), and CellMLToNektar.cellml_metadata.RdfProcessor.STIMULUS_NAMES().

96  def _load_ontology(self):
97  """Load the Oxford metadata ontology the first time it's needed."""
98  pycml_path = os.path.dirname(os.path.realpath(__file__))
99  oxmeta_ttl = os.path.join(pycml_path, 'oxford-metadata.ttl')
100  oxmeta_rdf = os.path.join(pycml_path, 'oxford-metadata.rdf')
101 
102  g = self.Graph()
103  # We allow a difference in modification time of 10s, so we don't get confused when checking out!
104  if os.stat(oxmeta_ttl).st_mtime > os.stat(oxmeta_rdf).st_mtime + 10.0:
105  # Try to regenerate RDF/XML version of ontology
106  try:
107  g.parse(oxmeta_ttl, format='turtle')
108  except Exception, e:
109  print >> sys.stderr, 'Unable to convert metadata from Turtle format to RDF/XML.'
110  print >> sys.stderr, 'Probably you need to upgrade rdflib to version 4.\nDetails of error:'
111  raise
112  g.serialize(oxmeta_rdf, format='xml')
113  else:
114  # Just parse the RDF/XML version
115  g.parse(oxmeta_rdf, format='xml')
116 
117  annotation_terms = list(g.subjects(rdflib.RDF.type, rdflib.URIRef(pycml.NSS['oxmeta']+u'Annotation')))
118  self._metadata_names = frozenset(map(lambda node: self.namespace_member(node, pycml.NSS['oxmeta']), annotation_terms))
119 
120  # Parameters for the stimulus current
121  self._stimulus_names = frozenset(filter(lambda name: name.startswith('membrane_stimulus_current_'), self._metadata_names))
122 

◆ _serialize()

def CellMLToNektar.cellml_metadata.RdfProcessor._serialize (   self,
  cellml_model 
)
private
Serialize the RDF model for this CellML model to XML.

Definition at line 151 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._models.

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.update_serialized_rdf().

151  def _serialize(self, cellml_model):
152  """Serialize the RDF model for this CellML model to XML."""
153  return self._models[cellml_model].serialize()
154 

◆ add_statement()

def CellMLToNektar.cellml_metadata.RdfProcessor.add_statement (   self,
  cellml_model,
  source,
  property,
  target 
)
Add a statement to the model.

Definition at line 240 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._debug(), and CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

240  def add_statement(self, cellml_model, source, property, target):
241  """Add a statement to the model."""
242  self._debug("add_statement(", source, ",", property, ",", target, ")")
243  rdf_model = self.get_rdf_from_model(cellml_model)
244  rdf_model.add((source, property, target))
245 

◆ create_rdf_node()

def CellMLToNektar.cellml_metadata.RdfProcessor.create_rdf_node (   self,
  node_content = None,
  fragment_id = None 
)
Create an RDF node.

node_content, if given, must either be a tuple (qname, namespace_uri),
or a string, in which case it is interpreted as a literal RDF node.

Alternatively, fragment_id may be given to refer to a cmeta:id within the
current model.

If neither are given, a blank node is created.

Definition at line 197 of file cellml_metadata.py.

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.create_unique_id(), and CellMLToNektar.cellml_metadata.RdfProcessor.find_variables().

197  def create_rdf_node(self, node_content=None, fragment_id=None):
198  """Create an RDF node.
199 
200  node_content, if given, must either be a tuple (qname, namespace_uri),
201  or a string, in which case it is interpreted as a literal RDF node.
202 
203  Alternatively, fragment_id may be given to refer to a cmeta:id within the
204  current model.
205 
206  If neither are given, a blank node is created.
207  """
208  if fragment_id:
209  node = rdflib.URIRef(str('#'+fragment_id))
210  elif node_content:
211  if type(node_content) == types.TupleType:
212  qname, nsuri = node_content
213  if nsuri[-1] not in ['#', '/']:
214  nsuri = nsuri + '#'
215  ns = rdflib.Namespace(nsuri)
216  prefix, local_name = pycml.SplitQName(qname)
217  node = ns[local_name]
218  elif type(node_content) in types.StringTypes:
219  node = rdflib.Literal(node_content)
220  else:
221  raise ValueError("Don't know how to make a node from " + str(node_content)
222  + " of type " + type(node_content))
223  else:
224  node = rdflib.BNode()
225  return node
226 

◆ create_unique_id()

def CellMLToNektar.cellml_metadata.RdfProcessor.create_unique_id (   self,
  cellml_model,
  base_id 
)
Create a fragment identifier that hasn't already been used.

If base_id hasn't been used, it will be returned.  Otherwise, underscores will
be added until a unique id is obtained.

Definition at line 227 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor.create_rdf_node(), and CellMLToNektar.cellml_metadata.RdfProcessor.get_targets().

227  def create_unique_id(self, cellml_model, base_id):
228  """Create a fragment identifier that hasn't already been used.
229 
230  If base_id hasn't been used, it will be returned. Otherwise, underscores will
231  be added until a unique id is obtained.
232  """
233  while True:
234  node = self.create_rdf_node(fragment_id=base_id)
235  if not self.get_targets(cellml_model, node, None):
236  break
237  base_id += u'_'
238  return base_id
239 

◆ find_variables()

def CellMLToNektar.cellml_metadata.RdfProcessor.find_variables (   self,
  cellml_model,
  property,
  value = None 
)
Find variables in the cellml_model with the given property, and optionally value.

property (and value if given) should be a suitable input for create_rdf_node.

Will return a list of cellml_variable instances.

Definition at line 298 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._debug(), CellMLToNektar.cellml_metadata.RdfProcessor.create_rdf_node(), and CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

298  def find_variables(self, cellml_model, property, value=None):
299  """Find variables in the cellml_model with the given property, and optionally value.
300 
301  property (and value if given) should be a suitable input for create_rdf_node.
302 
303  Will return a list of cellml_variable instances.
304  """
305  self._debug("find_variables(", property, ",", value, ")")
306  rdf_model = self.get_rdf_from_model(cellml_model)
307  property = self.create_rdf_node(property)
308  if value:
309  value = self.create_rdf_node(value)
310  vars = []
311  for result in rdf_model.subjects(property, value):
312  assert isinstance(result, rdflib.URIRef), "Non-resource annotated."
313  uri = str(result)
314  assert uri[0] == '#', "Annotation found on non-local URI"
315  var_id = uri[1:] # Strip '#'
316  var_objs = cellml_model.xml_xpath(u'*/cml:variable[@cmeta:id="%s"]' % var_id)
317  assert len(var_objs) == 1, "Didn't find a unique variable with ID " + var_id
318  vars.append(var_objs[0])
319  return vars
320 

◆ get_all_rdf()

def CellMLToNektar.cellml_metadata.RdfProcessor.get_all_rdf (   self,
  cellml_model 
)
Return an iterator over all RDF triples in the model.

Definition at line 321 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

321  def get_all_rdf(self, cellml_model):
322  """Return an iterator over all RDF triples in the model."""
323  rdf_model = self.get_rdf_from_model(cellml_model)
324  for triple in rdf_model:
325  yield triple
326 

◆ get_rdf_from_model()

def CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model (   self,
  cellml_model 
)
Get the RDF graph of the given CellML model.
    
If this model is already in our map, return the existing RDF store.
Otherwise, extract metadata from all RDF elements in the cellml_model,
create a new RDF graph from these, and delete the original elements.

Definition at line 155 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._add_rdf_element(), CellMLToNektar.cellml_metadata.RdfProcessor._create_new_store(), and CellMLToNektar.cellml_metadata.RdfProcessor._models.

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.add_statement(), CellMLToNektar.cellml_metadata.RdfProcessor.find_variables(), CellMLToNektar.cellml_metadata.RdfProcessor.get_all_rdf(), CellMLToNektar.cellml_metadata.RdfProcessor.get_target(), CellMLToNektar.cellml_metadata.RdfProcessor.get_targets(), CellMLToNektar.cellml_metadata.RdfProcessor.remove_statements(), and CellMLToNektar.cellml_metadata.RdfProcessor.replace_statement().

155  def get_rdf_from_model(self, cellml_model):
156  """Get the RDF graph of the given CellML model.
157 
158  If this model is already in our map, return the existing RDF store.
159  Otherwise, extract metadata from all RDF elements in the cellml_model,
160  create a new RDF graph from these, and delete the original elements.
161  """
162  if not cellml_model in self._models:
163  rdf_blocks = cellml_model.xml_xpath(u'//rdf:RDF')
164  self._create_new_store(cellml_model)
165  for rdf_block in rdf_blocks:
166  rdf_text = rdf_block.xml()
167  self._add_rdf_element(cellml_model, rdf_text)
168  rdf_block.xml_parent.xml_remove_child(rdf_block)
169  return self._models[cellml_model]
170 

◆ get_target()

def CellMLToNektar.cellml_metadata.RdfProcessor.get_target (   self,
  cellml_model,
  source,
  property 
)
Get the target of property from source.

Returns None if no such target exists.  Throws if there is more than one match.

If the target is a literal node, returns its string value.  Otherwise returns an RDF node.

Definition at line 264 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._debug(), and CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

264  def get_target(self, cellml_model, source, property):
265  """Get the target of property from source.
266 
267  Returns None if no such target exists. Throws if there is more than one match.
268 
269  If the target is a literal node, returns its string value. Otherwise returns an RDF node.
270  """
271  rdf_model = self.get_rdf_from_model(cellml_model)
272  try:
273  target = rdf_model.value(subject=source, predicate=property, any=False)
274  except rdflib.exceptions.UniquenessError:
275  raise ValueError("Too many targets for source " + str(source) + " and property " + str(property))
276  if isinstance(target, rdflib.Literal):
277  target = str(target)
278  self._debug("get_target(", source, ",", property, ") -> ", "'" + str(target) + "'")
279  return target
280 

◆ get_targets()

def CellMLToNektar.cellml_metadata.RdfProcessor.get_targets (   self,
  cellml_model,
  source,
  property 
)
Get a list of all targets of property from source.

If no such targets exist, returns an empty list.
If property is None, targets of any property will be returned.
Alternatively if source is None, targets of the given property from any source will be found.

For each target, if it is a literal node then its string value is given.
Otherwise the list will contain an RDF node.

Definition at line 281 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.create_unique_id().

281  def get_targets(self, cellml_model, source, property):
282  """Get a list of all targets of property from source.
283 
284  If no such targets exist, returns an empty list.
285  If property is None, targets of any property will be returned.
286  Alternatively if source is None, targets of the given property from any source will be found.
287 
288  For each target, if it is a literal node then its string value is given.
289  Otherwise the list will contain an RDF node.
290  """
291  rdf_model = self.get_rdf_from_model(cellml_model)
292  targets = list(rdf_model.objects(subject=source, predicate=property))
293  for i, target in enumerate(targets):
294  if isinstance(target, rdflib.Literal):
295  targets[i] = str(target)
296  return targets
297 

◆ METADATA_NAMES()

def CellMLToNektar.cellml_metadata.RdfProcessor.METADATA_NAMES (   self)
Fake a module-level constant as a property for lazy loading.

Definition at line 124 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._load_ontology(), and CellMLToNektar.cellml_metadata.RdfProcessor._metadata_names.

124  def METADATA_NAMES(self):
125  """Fake a module-level constant as a property for lazy loading."""
126  if self._metadata_names is None:
127  self._load_ontology()
128  return self._metadata_names
129 

◆ namespace_member()

def CellMLToNektar.cellml_metadata.RdfProcessor.namespace_member (   self,
  node,
  nsuri,
  not_uri_ok = False,
  wrong_ns_ok = False 
)
Given a URI reference RDF node and namespace URI, return the local part.

Will raise an exception if node is not a URI reference unless not_uri_ok is True.
Will raise an exception if the node doesn't live in the given namespace, unless
wrong_ns_ok is True.  In both cases, if the error is suppressed the empty string
will be returned instead.

Definition at line 327 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._debug().

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor._load_ontology().

327  def namespace_member(self, node, nsuri, not_uri_ok=False, wrong_ns_ok=False):
328  """Given a URI reference RDF node and namespace URI, return the local part.
329 
330  Will raise an exception if node is not a URI reference unless not_uri_ok is True.
331  Will raise an exception if the node doesn't live in the given namespace, unless
332  wrong_ns_ok is True. In both cases, if the error is suppressed the empty string
333  will be returned instead.
334  """
335  local_part = ""
336  if not isinstance(node, rdflib.URIRef):
337  if not not_uri_ok:
338  raise ValueError("Cannot extract namespace member for a non-URI RDF node.")
339  if node.startswith(nsuri):
340  local_part = node[len(nsuri):]
341  elif not wrong_ns_ok:
342  raise ValueError("Node is not in correct namespace.")
343  self._debug("namespace_member(", node, ",", nsuri, ") = ", local_part)
344  return local_part
345 

◆ remove_model()

def CellMLToNektar.cellml_metadata.RdfProcessor.remove_model (   self,
  cellml_model 
)
The given model is being deleted / no longer needed.

Definition at line 171 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._debug(), and CellMLToNektar.cellml_metadata.RdfProcessor._models.

Referenced by CellMLToNektar.cellml_metadata.RdfProcessor.update_serialized_rdf().

171  def remove_model(self, cellml_model):
172  """The given model is being deleted / no longer needed."""
173  if cellml_model in self._models:
174  del self._models[cellml_model]
175  self._debug('Clearing RDF state for model', cellml_model.name)
176 

◆ remove_statements()

def CellMLToNektar.cellml_metadata.RdfProcessor.remove_statements (   self,
  cellml_model,
  source,
  property,
  target 
)
Remove all statements matching (source,property,target).

Any of these may be None to match anything.

Definition at line 255 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._debug(), and CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

255  def remove_statements(self, cellml_model, source, property, target):
256  """Remove all statements matching (source,property,target).
257 
258  Any of these may be None to match anything.
259  """
260  self._debug("remove_statements(", source, ",", property, ",", target, ")")
261  rdf_model = self.get_rdf_from_model(cellml_model)
262  rdf_model.remove((source, property, target))
263 

◆ replace_statement()

def CellMLToNektar.cellml_metadata.RdfProcessor.replace_statement (   self,
  cellml_model,
  source,
  property,
  target 
)
Add a statement to the model, avoiding duplicates.

Any existing statements with the same source and property will first be removed.

Definition at line 246 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._debug(), and CellMLToNektar.cellml_metadata.RdfProcessor.get_rdf_from_model().

246  def replace_statement(self, cellml_model, source, property, target):
247  """Add a statement to the model, avoiding duplicates.
248 
249  Any existing statements with the same source and property will first be removed.
250  """
251  self._debug("replace_statement(", source, ",", property, ",", target, ")")
252  rdf_model = self.get_rdf_from_model(cellml_model)
253  rdf_model.set((source, property, target))
254 

◆ STIMULUS_NAMES()

def CellMLToNektar.cellml_metadata.RdfProcessor.STIMULUS_NAMES (   self)
Fake a module-level constant as a property for lazy loading.

Definition at line 131 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._load_ontology(), and CellMLToNektar.cellml_metadata.RdfProcessor._stimulus_names.

131  def STIMULUS_NAMES(self):
132  """Fake a module-level constant as a property for lazy loading."""
133  if self._stimulus_names is None:
134  self._load_ontology()
135  return self._stimulus_names
136 

◆ update_serialized_rdf()

def CellMLToNektar.cellml_metadata.RdfProcessor.update_serialized_rdf (   self,
  cellml_model 
)
Ensure the RDF serialized into the given CellML model is up-to-date.

If we have done any metadata processing on the given model, will serialize
our RDF store into the rdf:RDF element child of the model.

Definition at line 177 of file cellml_metadata.py.

References CellMLToNektar.cellml_metadata.RdfProcessor._models, CellMLToNektar.cellml_metadata.RdfProcessor._serialize(), and CellMLToNektar.cellml_metadata.RdfProcessor.remove_model().

177  def update_serialized_rdf(self, cellml_model):
178  """Ensure the RDF serialized into the given CellML model is up-to-date.
179 
180  If we have done any metadata processing on the given model, will serialize
181  our RDF store into the rdf:RDF element child of the model.
182  """
183  if cellml_model in self._models:
184  # Paranoia: ensure it doesn't already contain serialized RDF
185  rdf_blocks = cellml_model.xml_xpath(u'//rdf:RDF')
186  if rdf_blocks:
187  pycml.LOG('cellml-metadata', logging.WARNING, 'Removing existing RDF in model.')
188  for rdf_block in rdf_blocks:
189  rdf_block.xml_parent.xml_remove_child(rdf_block)
190  # Serialize the RDF model into cellml_model.RDF
191  rdf_text = self._serialize(cellml_model)
192  rdf_doc = pycml.amara.parse(rdf_text)
193  cellml_model.xml_append(rdf_doc.RDF)
194  # Remove the RDF model
195  self.remove_model(cellml_model)
196 

Member Data Documentation

◆ _initializing

CellMLToNektar.cellml_metadata.RdfProcessor._initializing
private

Definition at line 68 of file cellml_metadata.py.

◆ _metadata_names

CellMLToNektar.cellml_metadata.RdfProcessor._metadata_names
private

◆ _models

CellMLToNektar.cellml_metadata.RdfProcessor._models
private

◆ _module

CellMLToNektar.cellml_metadata.RdfProcessor._module
private

Definition at line 66 of file cellml_metadata.py.

◆ _stimulus_names

CellMLToNektar.cellml_metadata.RdfProcessor._stimulus_names
private

◆ Graph

CellMLToNektar.cellml_metadata.RdfProcessor.Graph