0

简单通用的树状数据结构

数据结构示例

Animated Cartoons have 4 extremities (arm, leg,limb..)
Human have 4 ext.
Insects have 6 ext.
Arachnids have 6 ext.

Animated Cartoons have 4 by extremity
Human have 5 by ext.
Insects have 1 by ext.
Arachnids have 1 by ext.

某种实现

Level/Table0 
              Quantity, Item
Level/Table1
              ItemName, Kingdom    
Level/Table2 
              Kingdom, NumberOfExtremities    
Level/Table3 
              ExtremityName, NumberOfFingers

示例数据集

1 Homer Simpson、1 Ralph Wiggum、2 jon skeet、3 Atomic ant、2 Shelob(蜘蛛)

查询..“手指数”

数量 = 1*4*4 + 1*4*4 + 1*4*5 + 3*6*1 + 2*6*1 = 82 个手指(让乔恩成为人类)


我想知道是否有任何工具可以将其定义为可解析以自动创建继承的数据并绘制这种树(如果可能的话,还可以进行这种数据访问。)

它可以使用例如 FreeMind手动绘制,但 AFAIK 它不允许您定义数据类型或结构来自动创建继承的项目分支,因此必须通过复制重复和重复结构真的很烦人(并且有出错的风险) . 重复数据的重复工作,(人类运行重复的代码),这是一个错误的功能。

所以我想用正确的语言编写数据,让我可以重复使用它进行查询和可视化,如果所有数据都在 XML、Java 类或数据库文件等中。有一些工具可以查看树并进行查询?

PD:我希望在文件系统中创建嵌套文件夹并在树视图中使用 Norton Commander 不是一种选择(只是因为它必须手动构建)

4

3 回答 3

2

您的答案主要取决于您已经拥有的编程技能以及您愿意获得的技能。我可以告诉你我会用我所知道的做些什么。

我认为要绘制树,您需要像qtree这样的 LaTeX 包。如果你不喜欢这个,还有很多其他的。您必须使用您最喜欢的脚本语言编写一个脚本,以将您的输入解析为 LaTeX 代码以生成树,但如果我正确理解您的意图,在大多数语言中这可以很容易地用不到 100 行来完成。我肯定会推荐使用 Ruby 的REXML之类的库或任何您喜欢的脚本语言以 XML 格式存储您的数据。

如果您希望生成更具交互性的树,请查看Adob​​e Flex 框架。同样,如果你不喜欢这个特定的框架,还有很多其他的框架(我推荐博客FlowingData)。

希望这会有所帮助,我并没有严重误解你的问题。

于 2010-09-03T16:22:54.987 回答
1

您描述的数据结构看起来适合 xml 格式。看看Exist XML 数据库,如果可以这么说,它是最完整的 xml 数据库。它带有许多工具,可让您快速入门!像XQuery Sandbox管理 http 界面中的选项。

示例数据集 1 Homer Simpson, 1 Ralph Wiggum, 2 jon skeet, 3 Atomic ant, 2 Shelob (spider)

我假设有 2 个实例jon skeet,3 个实例Atomic ant和 2 个实例Shelob

这是一个 XQuery 示例:

let $doc := 
<root>
    <definition>
        <AnimatedCartoons>
            <extremities>4</extremities>
            <fingers_per_ext>4</fingers_per_ext>
        </AnimatedCartoons>
        <Human>
            <extremities>4</extremities>
            <fingers_per_ext>5</fingers_per_ext>
        </Human>
        <Insects>
            <extremities>6</extremities>
            <fingers_per_ext>1</fingers_per_ext>
        </Insects>
        <Arachnids>
            <extremities>6</extremities>
            <fingers_per_ext>1</fingers_per_ext>
        </Arachnids>
    </definition>

    <subject><name>Homer Simpson</name><kind>AnimatedCartoons</kind></subject>
    <subject><name>Ralph Wiggum</name><kind>AnimatedCartoons</kind></subject>
    <subject><name>jon skeet</name><kind>Human</kind></subject>
    <subject><name>jon skeet</name><kind>Human</kind></subject>
    <subject><name>Atomic ant</name><kind>Insects</kind></subject>
    <subject><name>Atomic ant</name><kind>Insects</kind></subject>
    <subject><name>Atomic ant</name><kind>Insects</kind></subject>
    <subject><name>Shelob</name><kind>Arachnids</kind></subject>
    <subject><name>Shelob</name><kind>Arachnids</kind></subject>
</root>
let $definitions := $doc/definition/*
let $subjects := $doc/subject

(: here goes some query logic :)
let $fingers := fn:sum( 
    for $subject in $subjects
    return (
        for $x in $definitions
        where fn:name($x) = $subject/kind
        return $x/extremities * $x/fingers_per_ext
        )
    )
return $fingers
于 2010-09-09T18:57:27.090 回答
0

具有可视化功能的 XML Schema Editor 也许是我正在寻找的

http://en.wikipedia.org/wiki/XML_Schema_Editor

检查它..

于 2010-09-07T16:53:57.090 回答