If it didn't subclass `dict` then you'd have to implement `__iter__`.  I'm not surprised it was missed since it's easy to--I would have missed it too.  An individual instance of `VOSCatalog` *will* have an `__iter__` method via its `__getattr__`, but when Python goes to iterate over it, it looks for `__iter__` on its class and doesn't find it.

I don't there's *much* benefit to directly subclassing `dict` except that it reduces the code to:

```
class VOSCatalog(dict):
    """<docstring"""

    def __str__(self):
        # ... custom __str__ implementation ...

    def dumps(self):
        # ... dumps implementation ...

The `VOSDatabase` class is almost as simple.

That said, either way will work--either subclassing or just directly implementing `__iter__`.  Either way is a good idea for duck-typing purposes.