8

我有一组项目,用户需要以多种方式对其进行分组/分类。举个例子,假设它是汽车的集合,用户希望按以下方式对它们进行分类:

  • 颜色(红、银、蓝、黑等)
  • 车身形状(舱口盖、轿车、轿跑车、旅行车等)
  • 座位(2、4、5、6 等)
  • 等等

你有没有遇到过一种特别优雅的方式来允许用户完全自由地定义他们自己的类别和价值?

显然,在任何设计中都会有许多权衡取舍。例如,可学习的设计可能效率不高,反之亦然。或者某些设计可能比其他设计对房地产的要求更高。有些将比其他人花费更长的时间来开发。

无论如何,如果您已经看到 - 或设计了 - 一个很好的模式,我很想听听它。如果有截图就更好了。

尝试澄清:标签确实是一种对事物进行分类的好方法,但在我见过的所有实现中,只有一个级别的标签。用户通常不会定义类别/属性以及该类别中的项目。要使用上面的示例和 StackOverflow 的标记,您可以将汽车标记为“蓝色”、“轿车”、“4”等。StackOverflow 不知道一个项目不能同时标记为“轿车”和“轿跑车”。

我正在考虑的界面需要知道那种东西,所以用户定义的属性建议更符合我的想法。我只是想找到一个如何优雅地实现这种系统的具体示例(在桌面应用程序中,如果这会有所不同的话)。

那是不是更清楚了?如果没有,请发表评论,我会再次澄清。:)

4

7 回答 7

9

听起来您有两个任务:任务 1 对对象进行分类,对于一系列对象,用户在多个维度(属性)中的每一个上为每个对象分配一个类别(值)。任务 2:创建和修改维度和类别。

在数据建模人员、面向对象的程序员和数据库设计人员之外,维度和类别的概念是一个很难掌握的概念。您应该为不了解类别和维度之间差异的用户做好准备。但是,用户通常会理解表格,其中每一列是一个维度(包含多个类别),每一行是一个对象。尽可能使用表格。

第一个关键问题是通过用户研究弄清楚Task 1 和Task 2 是集成的还是分离的程度。

如果任务是集成的,用户经常在不加思索的情况下流畅地从一个切换到另一个,那么一种 UI 设计是有一个按维度划分的对象表,但提供一个空白列(或“插入”按钮)以允许用户添加维度。列标题具有用户可以编辑的维度名称。标题下方是一个空格,列出了该维度的类别。每个类别名称都是可编辑的,并且有一个空行(或“插入”按钮)来添加新类别。下面是要分类的对象,每个对象的每一列都有一个下拉列表用于维度。

在可用性测试中,注意用户试图通过单击类别列表中的类别而不是从下拉列表中选择来设置对象的类别。使类别列表在视觉上分开显示以防止这种情况。

您可能需要一个按钮来隐藏/显示类别列表,因为这可能会占用大量空间(即使使用滚动条)。即使任务 1 和 2 紧密集成,我想您也会发现用户有时可能希望让类别列表不碍事。

如果您发现任务 1 和 2 是分开的,很少一起完成(例如,用户通常设置他们的维度然后对一堆对象进行分类),那么您最好为每个任务使用单独的窗口(或页面),尽管在它们之间来回导航应该很容易。例如,虽然用户通常会预先设置他们的维度,然后很少修改它们,但有时用户会意识到在对不寻常的对象进行分类时需要一个新的维度类别,因此您提供一个“添加类别”菜单项,让用户到“管理类别”窗口,为当前维度插入一个新类别,等待用户提供名称。

任务 1 的窗口与以前相同:对象表具有每个维度的下拉列表列,但不包括类别列表、维度名称的编辑以及添加新维度的能力。如果用户需要扫描需要分类或重新分类的对象,或者如果用户通常需要将一个对象与其他一些对象进行比较(例如,决定如何对对象进行分类),这是最有效的。但是,如果用户的任务确实仅限于根据外部信息一次对一个对象进行分类(例如,从纸上转录信息),那么请考虑使用表格而不是表格,显示一组列表框,每个列表框一个属性。只需单击每个列表框即可设置每个类别,这比使用下拉列表要快。

任务 2 的窗口可能类似于任务 1 的标题部分。它与用于任务 1 的表格一致,并允许用户一次查看多个维度的类别,帮助他们找出最佳分类方案(例如,帮助他们找到本质上相同的类别出现在两个不同维度中的位置)。但是,如果空间是一个问题,那么考虑一个维度列表,每个维度都显示一个主从关系中的类别列表。

任务 2 的最终用户功能和灵活性是树状控件。树的根级别包括维度,层次结构中的下一步包括每个维度中的类别。主要优点是它支持 依赖于类别的维度。例如,一个人可能有一个车辆类型维度,其中包括汽车、船、飞机等类别。对于汽车类别,一个人可能有一个车身类型维度,其中的类别仅适用于该类别(双门轿车、掀背车等)。 )。从属维度在树中由一个类别的分支表示。结果是树在每个级别的维度和类别之间交替。

视觉上区分类别和维度很重要,可能是通过不同的图标,也可能是不同的字体——这告诉用户层次结构中的交替步骤在性质上是不同的(例如,如果你创建一个维度,那么你应该在至少两个类别)。即使这样,如果用户将维度与类别混淆(例如,允许他们将一堆“维度”移动到另一个维度下,将前者转换为类别),请提供一种轻松恢复的方法。

我想再次强调人们对维度和类别等抽象的困难。即使他们确实理解它,人们通常也很难自行创建体面的维度和类别。有一些复杂的交互可能会导致您需要仔细考虑(例如,当一个类别移动到一个新维度时,对象分类会发生什么?)。如果您希望每个用户真正创建自己的新颖维度,那么您可能需要认真重新考虑您的整个方法。这是一项本质上复杂的任务。

如果在文化、组织或领域中已经存在相关的多维方案(例如我们的汽车),用户会做得更好。当然,如果已经有一个方案,那么您可以研究它并将其安装为您产品中的默认维度集。只需要支持任务 2 以允许专家用户对其进行微调。

于 2008-11-12T14:53:32.150 回答
4

您可以使用标签:让用户标记每个图像,然后显示一组按标签排序的图像缩略图。

也许比标签更高级的是一组用户定义的属性。例如,不要用“red”标记图片,而是用属性“color=red”标记它。

于 2008-11-11T16:04:57.997 回答
1

我建议使用类似于 stackoverflow 上的标记系统。允许他们标记图像,然后按标记或选项卡组合查看。查看页面时,在其下方显示图像的缩略图和该图像的标签。

编辑:根据您的说明,您可以拥有标签类型。当用户定义他们自己的标签时,他们需要指定它来自哪个类型。考虑到这一点,您需要将标签限制为仅其中一种类型。

TagType { Color, Seats, BodyType, Seats }
TabSubType { Color-Red, Color-Blue, Color-Green, Seats-2, Seats-4, ... }

当用户想要添加标签时,给他们一个带有标签类型的下拉菜单。在此之下,再给出一个带有 TabSubTypes 的下拉列表。给他们一个“定义新的”选项,这将导致一个文本框出现在他们可以输入新类型的地方。

我还将这些选项添加到上下文菜单中,以便用户可以在树形菜单中查看标签。即使图像被聚焦,您也可以抓住按键,查找 TagType 和 TagSubType 名称并显示可供选择的选项菜单。如果未找到匹配项,请提供“单击以添加新标签”选项。

于 2008-11-11T16:06:20.380 回答
1

分面分类是一种对没有得到应有关注的事物进行分类的方法。它允许您定义互斥类别并为每个类别的每个内容项提供一个值。例如,您可以按地区、品种、年份和价格对葡萄酒进行分类,用户将通过在一个或多个类别中选择一个或多个值来进行搜索。例如,“40 美元以下的法国或意大利红葡萄酒”。假设您手头有类别数据,这通常是可用的最强大的分类和搜索技术,比尝试将所有内容放入单个层次结构或依赖标签更好。

要在后端实现这一点,请为每个类别制作表格并用不同的值填充它们。然后制作一个表,其中包含每个类别表的外键以及包含内容的字段。这类似于维度数据库设计中的“事实”表。

要了解它如何在 UI 中工作,请查看 Facetmap。我不能保证他们的产品,因为我没有使用过它,但我已经为我自己的应用程序实现了类似的东西,效果很好。

http://www.facetmap.com/

再一次,多面分类背后的想法值得更多关注,我知道我在这里没有公平对待它们。对于 Clay Shirky 对这个主题的有趣处理,请听“Ontology is Overrated”:

http://itc.conversationsnetwork.org/shows/detail470.html

于 2008-11-11T19:42:01.990 回答
0

我可能误解了你的问题,但如果不是标签的确切用途(如堆栈溢出和 gmail),那也不是很相似。还是您正在寻找比这更具体的东西?

于 2008-11-11T16:04:32.693 回答
0

好的,好吧,我倾向于继续谈论这个太多,但标记只是你可以用三重图做什么的一个例子,例如使用 RDF。[插入维基百科的链接]。现在我知道你说标签是不够的,基于嵌套的要求,但你没有理由不能进一步“标签标签”作为彼此的孩子。

Car|Tagged_with|Red
Red|Is_child_of|Colours

通过这种方式,您的数据仍然非常灵活,并且实际上什么是数据和什么是元数据之间的界限变得模糊。

于 2008-11-11T22:18:59.050 回答
0

这似乎是一个需要解决的问题,尤其是让用户将维度数据分类为更进一步、更简化的维度(组或类别,无论您想如何称呼它们),以便他们可以通过简化的类别/维度更好地可视化数据。

用户需要能够导入列表,并为列表创建维度,然后根据这些维度直观地对列表进行分类。创建维度包括命名/重命名维度(列名),然后添加/重命名/删除该维度的类别(列项)。在创建新维度和使用用户创建的新维度单独或批量对列表项进行实际分类之间切换应该是无缝的。然后,用户可以导出包含新创建类别的附加列或列(维度)的列表。

这个想法是,它会比只拥有一个表格并向其添加列更加用户友好。理想情况下,您可以选择列表中的项目,然后从用户创建的维度列表中为它们分配一个经过验证的类别项目,该列表将自动填充可以导出的只读表。输入=列表,输出=综合分类列表。无需电子表格。

于 2015-12-09T21:03:37.927 回答