我正在考虑创建一个支持Django的网站,用户可以将网站相互关联起来。举例包括:“John与Mary结婚”或“John在Google工作”。
用户应该能够自己定义实体及其关系(并且通常会定义其他人的关系,而不是自己的关系)。理想情况下,用户将这些关系作为自由文本输入(主题和对象可能是基于先前输入的现有实体的自动完成字段)。
Django的模型框架非常适合存储实体及其关系,但是如何在更高层次上管理这样的事情呢?
是否有一个基于Python的本体框架(感谢duffymo)可以帮助我从这些用户生成的关系中获取结构?我正在寻找方法,例如得出可逆关系,聚合关系(例如“3人是约翰的家庭关系”),分类为关系类型(家庭关系,工作关系......),这一切都基于用户生成的输入而不是(已知的)预定义的关系集。它
提前致谢,
马修
答案 0 :(得分:1)
有Protege,斯坦福本体计划。如果你可以为Java运行它,也许你可以为Jython运行它。
http://protege.stanford.edu/conference/2004/slides/3.3_dameron_7-7-04.pdf
答案 1 :(得分:1)
用户可以自己定义关系(通常会定义其他人的关系,而不是自己的关系);
精细。
换句话说,没有预定义的可能关系集。
所以?这不是一个有趣的约束。为什么要提起它?
理想情况下,用户将这些关系作为自由文本输入(主题和对象可能是自动填充字段)。
精细。
class Person( models.Model ):
# whatever
class RelatedTo( models.Model ):
one_person= models.ForeignKey( Person, related_name="me" )
other_person= models.ForeignKey( Person, related_name="them" )
relationship = models.TextField( )
这是一种方法。如果你把“关系”变成一流的对象并不困难。
如果你想要多方关系,它就像这样。
class Person( models.Model ):
# whatever
class RelatedTo( models.Model ):
relationship_type = models.TextField( )
class Party( models.Model ):
relationship = ForeignKeyField( RelatedTo )
role = models.TextField()
答案 2 :(得分:1)
免责声明:我不是一个期望。我在业余时间学习Django。那说..
您可能希望将“多对多到”视为字段关系。
来自文档:
http://docs.djangoproject.com/en/dev/topics/db/models/
当你只处理简单 多对多关系,如 混合和匹配比萨饼和 浇头,标准的ManyToManyField 是你所需要的全部。 然而,有时候 您可能需要将数据与 两种模式之间的关系。
语法看起来像这样(也来自文档中的示例):
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name