Leonardo Rochael Almeida wrote:
In Zope and in Python we already have RELATIONs, by putting a bunch of similar objects in a list or as children of a Folder or ObjectManager. We still don't have a convenient way to express RELATIONSHIPs, and this thread looks very promising in this regard, but the APIs being discussed here are already calling RELATIONSHIPs RELATIONs and this worries me a little.
I like that distinction. We should stick to it. To clarify, the API used by the example I posted formalizes relations with the intent of making relationships easy to create and discover. A goal that's important to me is the ability to infer new relationships from an existing data set, which is relatively easy to do with formal relations. Here is the example with some revisions to demonstrate more of what I have in mind: class IRegistration (Interface): student = Attribute('student', 'A Student object') course = Attribute('course', 'A Course object') term = Attribute('term', 'A Term object') registrations = RelationBuilder(IRegistration) current_registrations = registrations.view(filter=CurrentTermFilter()) class Registration (Persistent): implements(IRegistration) def __init__(self, student, course, term): self.student = student self.course = course self.term = term class Term (Persistent): def __init__(self, name): self.name = name class Student (Persistent): current_courses = current_registrations.view( match='student', select='course') all_courses = registrations.view( match='student', select='course') class Course (Persistent): current_students = current_registrations.view( match='course', select='student') all_students = registrations.view( match='course', select='student') *shrug* I know how to implement this, but I don't know if it's a good idea. Thoughts? Shane