Serialization yaml中的循环定义

Serialization yaml中的循环定义,serialization,yaml,Serialization,Yaml,我试图用yaml来表示一个有车站和线路的火车网络;一个最小的工作示例可能是3个站,线性连接,因此ABC。我代表三个车站如下: --- stations: - A - B - C --- stations: - &S-A A - &S-B B - &S-C C lines: - &L-A2C A to C: from: *S-A to: *S-C - &L-C2

我试图用yaml来表示一个有车站和线路的火车网络;一个最小的工作示例可能是3个站,线性连接,因此
ABC
。我代表三个车站如下:

---
stations:
    - A
    - B
    - C
---
stations:
    - &S-A A
    - &S-B B
    - &S-C C
lines:
    - &L-A2C A to C:
        from: *S-A
        to: *S-C
    - &L-C2A C to A:
        from: *S-C
        to: *S-A
现在我想在网络上存储不同的线路,以及它们的起点/终点。为此,我添加了一个lines数组和一些锚点,如下所示:

---
stations:
    - A
    - B
    - C
---
stations:
    - &S-A A
    - &S-B B
    - &S-C C
lines:
    - &L-A2C A to C:
        from: *S-A
        to: *S-C
    - &L-C2A C to A:
        from: *S-C
        to: *S-A
这是我遇到的问题:我想在每一站的每一条线路上存储下一站。理想情况下是这样的:

---
stations:
    - &S-A A:
        next:
            - *L-A2C: *S-B
    - &S-B B:
        next:
            - *L-A2C: *S-C
            - *L-C2A: *S-A
    - &S-C C:
        next:
           - *L-C2A: *S-B
数组保持不变)

但这失败了——至少在Python yaml库中是这样的,即
yaml.composer.composer错误:找到了未定义的别名“L-A2C”
。我知道这是为什么,因为我还没有定义这条线。但我不能先定义线,因为它们取决于车站,但现在车站取决于线


有没有更好的方法来实现这一点?

恭喜!您在大多数(如果不是全部的话)YAML实现中发现了一个问题。我最近也发现了这个限制,我正在研究如何解决(在Ruby世界中)。但这对你没有帮助。您需要做的是将“下一站”存储为一组单独的数据点

next-stops:
  *S-A:
    - *L-A2C: *S-B
  *S-B:
    - *L-A2C: *S-C
    - *L-C2A: *S-A
  *S-C:
    - *L-C2A: *S-B

那有帮助吗?

祝贺你!您在大多数(如果不是全部的话)YAML实现中发现了一个问题。我最近也发现了这个限制,我正在研究如何解决(在Ruby世界中)。但这对你没有帮助。您需要做的是将“下一站”存储为一组单独的数据点

next-stops:
  *S-A:
    - *L-A2C: *S-B
  *S-B:
    - *L-A2C: *S-C
    - *L-C2A: *S-A
  *S-C:
    - *L-C2A: *S-B

那有用吗?

谢谢!我想我必须这样做,尽管它并不完美。这是YAML库的缺点还是规范本身的缺点?谢谢!我想我必须这样做,尽管它并不完美。这是YAML库的缺点还是规范本身的缺点?