简介

简介#

[1]:
#r "nuget:YiJingFramework.Annotating"
#r "nuget:YiJingFramework.PrimitiveTypes"
using System.Diagnostics;
using System.Text.Json;
using YiJingFramework.Annotating;
using YiJingFramework.PrimitiveTypes;
Installed Packages
  • YiJingFramework.Annotating, 5.0.1
  • YiJingFramework.PrimitiveTypes, 4.0.1

此包提供了一个泛用的注解仓库结构。所谓的注解,例如《周易》就是为卦和卦爻所作的注解。

此仓库关注的是通用结构,如果只关注《周易》,可以使用 YiJingFramework.Annotating.Zhouyi

此包原来给出的结构相对复杂,有好多种可以作为 key 的类型,比如一整个卦、某几根爻。但是在 4.0.0 版本之后,只有字符串类型可以作为 key ,因此现在的结构是非常简单的。

每个 AnnotationStore 应该对应一个 json 文件,其中包含一个 string? Title (对应的 json 文件中为 n )、一个 IList<string> Tagst )和一个 IList<AnnotationGroup> Groupsg )。其中每个 AnnotationGroup 又包含 string? Titlet )、 string? Commentc )和 IList<AnnotationEntry> Entriese )。而每个 AnnotationEntry 中又包含 string? Targett )和 string? Contentc )。

举例而言:

[2]:
var store = new AnnotationStore()
{
    Title = "Sample Store"
};

store.Tags.Add("Tag1");
store.Tags.Add("Tag2");
store.Tags.Add("Tag3");

var qian = new Gua(Enumerable.Repeat(Yinyang.Yang, 3));
var kun = new Gua(Enumerable.Repeat(Yinyang.Yin, 3));

var namingGroup = store.AddGroup(title: "Gua Name", comment: "Names of the Guas");
namingGroup.AddEntry(qian.ToString(), "Qian");
namingGroup.AddEntry(kun.ToString(), "Kun");

var options = new JsonSerializerOptions() { WriteIndented = true };
var serialized = store.SerializeToJsonString(options);
Console.WriteLine(serialized);

var d = AnnotationStore.DeserializeFromJsonString(serialized);
Debug.Assert(d is not null);
Console.WriteLine(d.Groups.Single(x => x.Title == "Gua Name").Entries[0].Target); // 111
{
  "n": "Sample Store",
  "t": [
    "Tag1",
    "Tag2",
    "Tag3"
  ],
  "g": [
    {
      "t": "Gua Name",
      "e": [
        {
          "t": "111",
          "c": "Qian"
        },
        {
          "t": "000",
          "c": "Kun"
        }
      ],
      "c": "Names of the Guas"
    }
  ]
}
111

总之,这个包给出的是通用结构,没有具体关注的内容。除非是在自己制作一种新的注解仓库,一般情况下不会直接依赖此包。