结构概念中具有相同类型的多个属性

Multiple properties with the same type in a structure concept

看来结构概念不能有相同类型的属性。

例如,如果我有以下内容

structure (A) {
  description (blah blah)
  property (prop1) {
    type (Type1)
  }
  property (prop2) {
    type (Type1)
  }
}

我得到 "ERROR: property #prop1 duplicates the type of property #prop2"。我做错了什么或者它应该如何工作?我不明白为什么一个结构不能有两个相同类型的属性。无论如何,我已经通过创建一个扩展原始概念的附加概念来解决这个问题,因此这些类型在技术上具有不同的名称但在功能上是相同的。然而,这有点像 PITA,因为现在每当我需要一个需要多个 属性 相同类型的结构时,我就必须提出所有这些额外的概念。

是的,您需要为每个 属性 设置不同的类型,因为 Bixby 在解析用户话语时使用每个 属性 的类型作为上下文。

如果您的结构将所有相同类型的属性集中到一个中有意义,您可以使用 max(Many)(documentation) 来指示 prop 是类型 Type1 并且可能包含多个值。此选项的一个示例用例是需要处理配方成分的胶囊。所有成分都可以聚合成一个 ingredients 属性,而无需为每个成分单独设置 属性。

如果您的结构要求每个 属性 是分开的,您需要为每个 属性 创建一个不同的 type 以允许 Bixby 区分每个 属性 .此选项的一个示例用例是跟踪运动统计数据的胶囊。将篮球队中的每个球员都标记为 type(Player) 是不够的。您还需要定义播放器的类型。这将通过创建 Player 类型并将其扩展到每种类型的播放器来完成(这就是您目前所做的)。

根据您的用例,使用 role-of 可能是合适的。 role-of 的作用是具有相同底层数据的不同上下文。

例如在火车时刻表胶囊中,我可能有一个相同的出发站和到达站列表(作为枚举)。然而,这些在上下文中是不同的。使用 role-of 让我可以创建一个通用的火车站概念,但可以创建两个上下文不同的角色,例如出发站和到达站的概念

有了 role-of,我可以在结构化概念中同时使用两者。

一些示例代码(来自我的开源 Bixby 示例代码 - https://github.com/rogerkibbe/bixby_bart_commuter

摘自Station.model.bxb - 基地

enum (Station) {
  description (BART Station Names)
  symbol(12th St. Oakland City Center)
  symbol(16th St. Mission)
  symbol(19th St. Oakland)
  symbol(24th St. Mission)
  symbol(Antioch)

据此,我创建了两个角色概念:

enum (SearchDepartureStation) {
  description (Train Departure Station)
  features {
    transient
  }
  role-of (Station)
}

enum (SearchArrivalStation) {
  description (Train Arrival Station)
  features {
    transient
  }
  role-of (Station)
}

最后我可以在结构化概念中使用以上两者(摘录如下):

structure (TrainSchedule) {
  description (Train Schedule)
  property (searchDepartureStation) {
    type (SearchDepartureStation)
    min (Required)
    max (One)
  }
  property (searchArrivalStation) {
    type (SearchArrivalStation)
    min (Required)
    max (One)
  }