Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 设计模式对内容链接和关系建模_Design Patterns_Model_Playframework_Playframework 1.x - Fatal编程技术网

Design patterns 设计模式对内容链接和关系建模

Design patterns 设计模式对内容链接和关系建模,design-patterns,model,playframework,playframework-1.x,Design Patterns,Model,Playframework,Playframework 1.x,我在一个数据库中有一个大文本,它有三个主要部分:整个文本、构成主要文本的段落以及每个段落中的单词(标记) 对于这3个组件中的每一个,都会有特定的相关链接内容。例如,每个段落都有一个其他文本内容的列表,这些内容讨论从许多资源(学术著作、当代思想等)收集的段落的同一主题 我想设计一个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