// Copyright ©2021 The Gonum Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package rdf_test import ( "fmt" "strings" "gonum.org/v1/gonum/graph/formats/rdf" ) func ExampleLean() { for i, statements := range []string{ 0: ` _:author1 _:go . _:author2 _:go . _:author2 _:gonum . _:author3 _:gonum . `, 1: ` _:author1 _:go . _:author2 _:go . _:author2 _:gonum . _:author3 _:gonum . _:gonum _:go . `, 2: ` _:author1 _:go . _:author1 _:gonum . _:author2 _:go . _:author2 _:gonum . _:author3 _:gonum . _:gonum _:go . `, 3: ` _:author1 "Alice" . _:author1 _:go . _:author2 _:go . _:author2 _:gonum . _:author3 _:gonum . _:gonum _:go . `, 4: ` _:author1 _:go . _:author1 _:gonum . _:author2 _:go . _:author2 _:gonum . _:author3 _:gonum . _:author3 _:go . _:gonum _:go . `, 5: ` _:author1 "Alice" . _:author2 "Bob" . _:author1 _:go . _:author2 _:go . _:author2 _:gonum . _:author3 _:gonum . _:gonum _:go . `, 6: ` _:author1 "Alice" . _:author2 "Bob" . _:author3 "Charlie" . _:author1 _:go . _:author2 _:go . _:author2 _:gonum . _:author3 _:gonum . _:gonum _:go . `, } { // Decode the statement stream. dec := rdf.NewDecoder(strings.NewReader(statements)) var s []*rdf.Statement for { l, err := dec.Unmarshal() if err != nil { break } s = append(s, l) } // Lean the graph to remove redundant statements. lean, err := rdf.Lean(s) if err != nil { fmt.Println(err) } // Canonicalize the blank nodes in-place. _, err = rdf.URDNA2015(lean, lean) if err != nil { fmt.Println(err) continue } fmt.Printf("%d:\n", i) for _, s := range lean { fmt.Println(s) } fmt.Println() } // Output: // // 0: // _:c14n0 _:c14n1 . // // 1: // _:c14n0 _:c14n1 . // _:c14n0 _:c14n2 . // _:c14n2 _:c14n1 . // // 2: // _:c14n0 _:c14n1 . // _:c14n0 _:c14n3 . // _:c14n2 _:c14n1 . // _:c14n2 _:c14n3 . // _:c14n3 _:c14n1 . // // 3: // _:c14n0 _:c14n1 . // _:c14n0 _:c14n3 . // _:c14n2 _:c14n1 . // _:c14n2 "Alice" . // _:c14n3 _:c14n1 . // // 4: // _:c14n0 _:c14n1 . // _:c14n0 _:c14n2 . // _:c14n2 _:c14n1 . // _:c14n3 _:c14n1 . // _:c14n3 _:c14n2 . // _:c14n4 _:c14n2 . // _:c14n4 _:c14n1 . // // 5: // _:c14n1 _:c14n0 . // _:c14n1 _:c14n3 . // _:c14n1 "Bob" . // _:c14n2 _:c14n0 . // _:c14n2 "Alice" . // _:c14n3 _:c14n0 . // // 6: // _:c14n0 _:c14n1 . // _:c14n2 _:c14n0 . // _:c14n2 _:c14n1 . // _:c14n2 "Bob" . // _:c14n3 _:c14n1 . // _:c14n3 "Alice" . // _:c14n4 _:c14n0 . // _:c14n4 "Charlie" . }