github.com/cayleygraph/cayley@v0.7.7/schema/schema_test.go (about)

     1  package schema_test
     2  
     3  import (
     4  	"sort"
     5  	"time"
     6  
     7  	"github.com/cayleygraph/cayley/schema"
     8  	"github.com/cayleygraph/quad"
     9  	"github.com/cayleygraph/quad/voc"
    10  	"github.com/cayleygraph/quad/voc/rdf"
    11  )
    12  
    13  func init() {
    14  	voc.RegisterPrefix("ex:", "http://example.org/")
    15  	schema.RegisterType(quad.IRI("ex:Coords"), Coords{})
    16  }
    17  
    18  type item struct {
    19  	rdfType struct{} `quad:"rdf:type > some:item"`
    20  	ID      quad.IRI `quad:"@id"`
    21  	Name    string   `quad:"name"`
    22  	Spec    string   `quad:"spec,optional"`
    23  }
    24  
    25  type item2 struct {
    26  	Name string `quad:"name"`
    27  	Spec string `quad:"spec"`
    28  }
    29  
    30  type timeItem struct {
    31  	ID   quad.IRI  `quad:"@id"`
    32  	Name string    `quad:"name"`
    33  	TS   time.Time `quad:"ts"`
    34  }
    35  
    36  type treeItemByIRI []treeItem
    37  
    38  func (o treeItemByIRI) Len() int           { return len(o) }
    39  func (o treeItemByIRI) Less(i, j int) bool { return o[i].ID < o[j].ID }
    40  func (o treeItemByIRI) Swap(i, j int)      { o[i], o[j] = o[j], o[i] }
    41  
    42  type treeItem struct {
    43  	ID       quad.IRI   `quad:"@id"`
    44  	Name     string     `quad:"name"`
    45  	Children []treeItem `quad:"child"`
    46  }
    47  
    48  func (t *treeItem) Sort() {
    49  	for _, c := range t.Children {
    50  		c.Sort()
    51  	}
    52  	sort.Sort(treeItemByIRI(t.Children))
    53  }
    54  
    55  type treeItemOptByIRI []treeItemOpt
    56  
    57  func (o treeItemOptByIRI) Len() int           { return len(o) }
    58  func (o treeItemOptByIRI) Less(i, j int) bool { return o[i].ID < o[j].ID }
    59  func (o treeItemOptByIRI) Swap(i, j int)      { o[i], o[j] = o[j], o[i] }
    60  
    61  type treeItemOpt struct {
    62  	ID       quad.IRI      `quad:"@id"`
    63  	Name     string        `quad:"name"`
    64  	Children []treeItemOpt `quad:"child,optional"`
    65  }
    66  
    67  func (t *treeItemOpt) Sort() {
    68  	for _, c := range t.Children {
    69  		c.Sort()
    70  	}
    71  	sort.Sort(treeItemOptByIRI(t.Children))
    72  }
    73  
    74  type treeItemReqByIRI []treeItemReq
    75  
    76  func (o treeItemReqByIRI) Len() int           { return len(o) }
    77  func (o treeItemReqByIRI) Less(i, j int) bool { return o[i].ID < o[j].ID }
    78  func (o treeItemReqByIRI) Swap(i, j int)      { o[i], o[j] = o[j], o[i] }
    79  
    80  type treeItemReq struct {
    81  	ID       quad.IRI      `quad:"@id"`
    82  	Name     string        `quad:"name"`
    83  	Children []treeItemReq `quad:"child,required"`
    84  }
    85  
    86  func (t *treeItemReq) Sort() {
    87  	for _, c := range t.Children {
    88  		c.Sort()
    89  	}
    90  	sort.Sort(treeItemReqByIRI(t.Children))
    91  }
    92  
    93  type genObject struct {
    94  	ID   quad.IRI `quad:"@id"`
    95  	Name string   `quad:"name"`
    96  }
    97  
    98  type MyString string
    99  
   100  type genObjectTypedef struct {
   101  	ID   quad.IRI `quad:"@id"`
   102  	Name MyString `quad:"name"`
   103  }
   104  
   105  type subObject struct {
   106  	genObject
   107  	Num int `quad:"num"`
   108  }
   109  
   110  type subSubObject struct {
   111  	subObject
   112  	Num2 int `quad:"num2"`
   113  }
   114  
   115  type Coords struct {
   116  	Lat float64 `json:"ex:lat"`
   117  	Lng float64 `json:"ex:lng"`
   118  }
   119  
   120  type NodeLoop struct {
   121  	ID   quad.IRI  `quad:"@id"`
   122  	Name string    `quad:"name"`
   123  	Next *NodeLoop `quad:"next"`
   124  }
   125  
   126  type NestedNode struct {
   127  	ID   quad.IRI  `quad:"@id"`
   128  	Name string    `quad:"name"`
   129  	Prev genObject `quad:"prev,opt"`
   130  	Next genObject `quad:"next,opt"`
   131  }
   132  
   133  type Alts struct {
   134  	Alt []OptFields `quad:"alt"`
   135  }
   136  
   137  type OptFields struct {
   138  	One string `quad:"one,optional"`
   139  	Two string `quad:"two,optional"`
   140  }
   141  
   142  func iri(s string) quad.IRI { return quad.IRI(s) }
   143  
   144  const typeIRI = quad.IRI(rdf.Type)
   145  
   146  var treeQuads = []quad.Quad{
   147  	{iri("n1"), iri("name"), quad.String("Node 1"), nil},
   148  	{iri("n2"), iri("name"), quad.String("Node 2"), nil},
   149  	{iri("n3"), iri("name"), quad.String("Node 3"), nil},
   150  	{iri("n4"), iri("name"), quad.String("Node 4"), nil},
   151  	{iri("n5"), iri("name"), quad.String("Node 5"), nil},
   152  
   153  	{iri("n1"), iri("child"), iri("n2"), nil},
   154  	{iri("n1"), iri("child"), iri("n3"), nil},
   155  
   156  	{iri("n3"), iri("child"), iri("n4"), nil},
   157  }