OAF has a query language used to request components with
specific properties from the OAF daemon.
The API call oaf_activate takes a
requirements parameter which is
a string containing a specific request in the OAF query 
langage.
A simple example is:
| CORBA_Object o = oaf_activate ("repo_ids.has ('IDL:GNOME/Graph/Layout:1.0')",
                               NULL, 0, NULL, &ev); | 
This will ask for a component which supports the GNOME/Graph/Lyout:1.0 interface.
You can also do much more complicated things.
| "(repo_ids.has_all (['IDL:Bonobo/Control:1.0',
		     'IDL:Nautilus/ContentView:1.0']) OR
  repo_ids.has_one (['IDL:Bonobo/Control:1.0',
                     'IDL:Bonobo/Embeddable:1.0'])) AND
  repo_ids.has('IDL:Bonobo/PersistFile:1.0') AND
  foo:bar.defined()" | 
This would get any component with both 'Control' and 'ContentView' or
with either 'Control' or 'Embeddable' as long as they supported the
'PersistFile' interface, and defined the attribute 'foo:bar'.