Design patterns 设计模式对内容链接和关系建模
我在一个数据库中有一个大文本,它有三个主要部分:整个文本、构成主要文本的段落以及每个段落中的单词(标记) 对于这3个组件中的每一个,都会有特定的相关链接内容。例如,每个段落都有一个其他文本内容的列表,这些内容讨论从许多资源(学术著作、当代思想等)收集的段落的同一主题 我想设计一个playframework模型,用它自己的相关内容类别(学术作品、当代思想等)来模拟这三个组件之间的关联 我如何设计一个干净的playframework 1.x模型,以细粒度的方式反映这种链接,从主文本到其段落,再到每个段落的标记,以及与相关文本内容类别的关联。Design patterns 设计模式对内容链接和关系建模,design-patterns,model,playframework,playframework-1.x,Design Patterns,Model,Playframework,Playframework 1.x,我在一个数据库中有一个大文本,它有三个主要部分:整个文本、构成主要文本的段落以及每个段落中的单词(标记) 对于这3个组件中的每一个,都会有特定的相关链接内容。例如,每个段落都有一个其他文本内容的列表,这些内容讨论从许多资源(学术著作、当代思想等)收集的段落的同一主题 我想设计一个playframework模型,用它自己的相关内容类别(学术作品、当代思想等)来模拟这三个组件之间的关联 我如何设计一个干净的playframework 1.x模型,以细粒度的方式反映这种链接,从主文本到其段落,再到每个
我确信有一些很好的设计模式来模拟这个场景。有人能给我推荐一个干净的解决方案吗?根据你所写的,你可以选择
@Entity
public class Document extends Model {
public List<Paragraph> paragraphs;
}
@实体
公共类文档扩展模型{
公开列出段落;
}
@实体
公共类段落扩展模型{
公共词汇表;
公开名单引文;
}
@实体
公共类引用扩展模型{
公共字符串类型;
公共URL linkedResource;//资源是否为外部资源?
公共列表//资源是此系统的内部资源吗?
}
你不清楚引用的链接,所以我给出了两个选项。你可以选择其中一个,也可以两者都选择。根据你所写的,你可以选择
@Entity
public class Document extends Model {
public List<Paragraph> paragraphs;
}
@实体
公共类文档扩展模型{
公开列出段落;
}
@实体
公共类段落扩展模型{
公共词汇表;
公开名单引文;
}
@实体
公共类引用扩展模型{
公共字符串类型;
公共URL linkedResource;//资源是否为外部资源?
公共列表//资源是此系统的内部资源吗?
}
你不清楚引用的链接,所以我给出了两个选项。您可以选择其中一种,也可以同时选择两者。我建议您将文本整体存储一次,然后使用灵活的类层次结构对内容进行索引 我只把Hibernate注释放在特殊的地方 您可以创建一个容器来容纳文本本身和零件对象:
public class DocumentContainer extends Model {
// Column definition depends on the DB, here: MySQL
@Column(columnDefinition="LONGTEXT")
public String text;
public Set<DocumentPart> documentParts;
}
公共类DocumentContainer扩展模型{
//列定义取决于数据库,这里是MySQL
@列(columnDefinition=“LONGTEXT”)
公共字符串文本;
公共组件;
}
文档的一部分在文本的某个区域上定义,属于某种类型,并且可以引用文档的其他部分:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="partType")
public class DocumentPart extends Model {
Document document;
// indices over the documents text for this part
int startIndex;
int endIndex;
@Enumerated(EnumType.STRING)
PartType partType;
Set<DocumentPart> referencedParts;
}
public enum PartType {
DOCUMENT, PARAGRAPH, TOKEN
}
@实体
@继承(策略=InheritanceType.JOINED)
@鉴别器列(name=“partType”)
公共类DocumentPart扩展模型{
文件;
//本部分文件文本的索引
国际标准指数;
内部索引;
@枚举(EnumType.STRING)
零件类型零件类型;
设置参考部件;
}
公共枚举部件类型{
文件、段落、记号
}
例如,一个段落将是:
@Entity
@DiscriminatorValue("PARAGRAPH")
public class Paragraph extends DocumentPart {
Set<Token> tokens;
}
@实体
@鉴别器值(“段落”)
公共类段落扩展文档部分{
设置代币;
}
这样,您就可以灵活地确定文档上的区域类型,并且可以保留整个文档(包括标点符号等)。我建议您将文本整体存储一次,然后使用灵活的类层次结构来索引内容 我只把Hibernate注释放在特殊的地方 您可以创建一个容器来容纳文本本身和零件对象:
public class DocumentContainer extends Model {
// Column definition depends on the DB, here: MySQL
@Column(columnDefinition="LONGTEXT")
public String text;
public Set<DocumentPart> documentParts;
}
公共类DocumentContainer扩展模型{
//列定义取决于数据库,这里是MySQL
@列(columnDefinition=“LONGTEXT”)
公共字符串文本;
公共组件;
}
文档的一部分在文本的某个区域上定义,属于某种类型,并且可以引用文档的其他部分:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="partType")
public class DocumentPart extends Model {
Document document;
// indices over the documents text for this part
int startIndex;
int endIndex;
@Enumerated(EnumType.STRING)
PartType partType;
Set<DocumentPart> referencedParts;
}
public enum PartType {
DOCUMENT, PARAGRAPH, TOKEN
}
@实体
@继承(策略=InheritanceType.JOINED)
@鉴别器列(name=“partType”)
公共类DocumentPart扩展模型{
文件;
//本部分文件文本的索引
国际标准指数;
内部索引;
@枚举(EnumType.STRING)
零件类型零件类型;
设置参考部件;
}
公共枚举部件类型{
文件、段落、记号
}
例如,一个段落将是:
@Entity
@DiscriminatorValue("PARAGRAPH")
public class Paragraph extends DocumentPart {
Set<Token> tokens;
}
@实体
@鉴别器值(“段落”)
公共类段落扩展文档部分{
设置代币;
}
这样,您就可以灵活地确定文档上的区域类型,并且可以保留整个文档(包括标点符号等)。谢谢。这给了我一些好的想法。我将尝试从你介绍的模型中获得灵感,如果我需要更多讨论,请回来。谢谢。这给了我一些好的想法。我将尝试从您介绍的模型中获得启发,如果我需要更多讨论,请回来。谢谢。我看到您在playframework模型中没有使用hibernate注释。它们不是必须的吗?是的,它们是。但是您只需要将类注释为
@Entity
。如果不指定字段,字段将自动定义。我认为模型中的列表字段需要一些特定的hibernate注释才能工作。我记得我在播放模型中遇到过声明列表的问题,并记得如果我没有错的话,它们需要一个复杂的hibernate注释。我曾经在游戏中遇到一些错误,抱怨模型中列表文件的注释不正确。我从来没有遇到过问题。虽然我可能使用ArrayList而不是List,但我发现您在playframework模型中没有使用hibernate注释。它们不是必须的吗?是的,它们是。但是您只需要将类注释为@Entity