数据结构:如何正确地建模与另一个关联的层次结构无矛盾?

问题描述

假设我尝试抓​​取一个简单的html网页并创建一个如下类(在TypeScript中显示,但是问题与所选的编程语言无关):

class ScrapingTargetSpecification {
    cssSelector: string;
    context: ScrapingTargetSpecification | null;
    constructor(cssSelector: string,context: ScrapingTargetSpecification | null) {
        this.cssSelector = cssSelector;
        this.context = context;
    }
}

示例实例如下所示:

const soccerResultsTable = new ScrapingTargetSpecification("#soccerresults",null);
const soccerTeamNames = new ScrapingTargetSpecification("tr:nth-child(3)",soccerResultsTable);
const soccerMatchResults = new ScrapingTargetSpecification("tr:nth-child(7)",soccerResultsTable);
const baseballResultsTable = new ScrapingTargetSpecification("#baseballresults",null);
const baseballTeamNames = new ScrapingTargetSpecification("tr:nth-child(2)",baseballResultsTable);
const baseballMatchResults = new ScrapingTargetSpecification("tr:nth-child(4)",baseballResultsTable);

这显然已经形成了树/层次结构。

现在,我想汇总这些规范的“列表”,以便定义要抓取的整个网页的模型。我还希望能够通过名称解决各个目标规范。因此,我可以执行以下操作:

const pageModel = {
    'soccerResultsTable': soccerResultsTable,'soccerTeamNames': soccerTeamNames,'soccerMatchResults': soccerMatchResults,'baseballResultsTable': baseballResultsTable,'baseballTeamNames': baseballTeamNames,'baseballMatchResults': baseballMatchResults
};

但是我更希望pageModel的名称/键反映层次结构。因此,我可以引入“目录”分隔符(/)并执行以下操作:

const pageModel = {
    'soccerResults': soccerResultsTable,'soccerResults/teamNames': soccerTeamNames,'soccerResults/matchResults': soccerMatchResults,'baseballResults': baseballResultsTable,'baseballResults/teamNames': baseballTeamNames,'baseballResults/matchResults': baseballMatchResults
};

对此建模的更好方法可能是使用前缀树(“ Trie”)作为名称。

这是问题所在:如何确保由值(此处为ScrapingTargetSpecification)定义的层次结构与键(此处为名称)定义的层次结构相同?例如,有人可能会再次这样做:

const pageModel = {
    'soccerResults': soccerResultsTable,'soccerTeamNames': soccerTeamNames
}

在新术语中,这是错误的,因为soccerTeamNamessoccerResultsTable的子级,因此不在根级别。

使用前缀树(或任何树)时,由于该树的每个节点都包含一个ScrapingTargetSpecification作为其值(可能具有上下文/父项ScrapingTargetSpecification),因此会出现相同的问题,以使节点值形成自己的层次结构,这可能与节点层次结构相矛盾

当然,存在许多通过验证器或类似方法防止这种情况的方法。但是我对这种解决方案不感兴趣,而是觉得我自己的建模方法本身是错误的(可能是由于某种形式的隐藏冗余),我想知道如何做得更好。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...