用户定义关系的框架

时间:2010-12-20 10:58:24

标签: python django

我正在考虑创建一个支持Django的网站,用户可以将网站相互关联起来。举例包括:“John与Mary结婚”或“John在Google工作”。

用户应该能够自己定义实体及其关系(并且通常会定义其他人的关系,而不是自己的关系)。理想情况下,用户将这些关系作为自由文本输入(主题和对象可能是基于先前输入的现有实体的自动完成字段)。

Django的模型框架非常适合存储实体及其关系,但是如何在更高层次上管理这样的事情呢?

是否有一个基于Python的本体框架(感谢duffymo)可以帮助我从这些用户生成的关系中获取结构?我正在寻找方法,例如得出可逆关系,聚合关系(例如“3人是约翰的家庭关系”),分类为关系类型(家庭关系,工作关系......),这一切都基于用户生成的输入而不是(已知的)预定义的关系集。它

提前致谢,

马修

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