json

package
v1.0.0-beta12 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 25, 2022 License: Apache-2.0 Imports: 11 Imported by: 1

Documentation

Index

Constants

View Source
const JSON = "https://json.org#"

JSON namespace

View Source
const X_LS = "x-ls"

Variables

View Source
var (
	StringTypeTerm  = ls.NewTerm(JSON, "string", false, false, ls.OverrideComposition, nil)
	NumberTypeTerm  = ls.NewTerm(JSON, "number", false, false, ls.OverrideComposition, nil)
	IntegerTypeTerm = ls.NewTerm(JSON, "integer", false, false, ls.OverrideComposition, nil)
	BooleanTypeTerm = ls.NewTerm(JSON, "boolean", false, false, ls.OverrideComposition, nil)
	ObjectTypeTerm  = ls.NewTerm(JSON, "object", false, false, ls.OverrideComposition, nil)
	ArrayTypeTerm   = ls.NewTerm(JSON, "array", false, false, ls.OverrideComposition, nil)
)

JSON related vocabulry

Functions

func DefaultBuildNodeKeyFunc

func DefaultBuildNodeKeyFunc(node graph.Node) (string, bool, error)

DefaultBuildNodeKeyFunc returns the attribute name term property from the node if it exists. If not, it looks at the attributeName of the node reached by instanceOf edge. If none found it return false

func Export

func Export(node graph.Node, options ExportOptions) (jsonom.Node, error)

Export the document subtree to the target. The returned result is OM, which respects element ordering

func GetBuildNodeKeyBySchemaNodeFunc

func GetBuildNodeKeyBySchemaNodeFunc(f func(schemaNode, docNode graph.Node) (string, bool, error)) func(graph.Node) (string, bool, error)

GetBuildNodeKeyBySchemaNodeFunc returns a function that gets the schema node and the doc node. If the doc node does not have a schema node, it is not exported. The function `f` should decide what key to use

func IngestBytes

func IngestBytes(ctx *ls.Context, baseID string, input []byte, parser Parser, builder ls.GraphBuilder) (graph.Node, error)

func IngestStream

func IngestStream(ctx *ls.Context, baseID string, input io.Reader, parser Parser, builder ls.GraphBuilder) (graph.Node, error)

func TandemWalk

func TandemWalk(tw TWCursor, w WalkType, each func(TWCursor) (bool, error)) (bool, error)

TandemWalk will walk the doc and schema at the current root, calling `each` for each entry. Processing stops if `each` returns false

func TandemWalkDocNodes

func TandemWalkDocNodes(tw TWCursor, each func(TWCursor) (bool, error)) (bool, error)

func TandemWalkPairs

func TandemWalkPairs(tw TWCursor, each func(TWCursor) (bool, error)) (bool, error)

Types

type CompiledEntity

type CompiledEntity struct {
	Entity
	Schema *jsonschema.Schema
}

CompiledEntity contains the JSON schema for the entity

func CompileEntities

func CompileEntities(entities ...Entity) ([]CompiledEntity, error)

CompileEntities compiles given entities

func CompileEntitiesWith

func CompileEntitiesWith(compiler *jsonschema.Compiler, entities ...Entity) ([]CompiledEntity, error)

CompileEntitiesWith compiles all entities as a single json schema unit using the given compiler

type Entity

type Entity struct {
	// Reference to the schema. This includes the full reference to the
	// JSON schema, and the reference in that schema that defines the
	// entity. For example, this can be
	// https://somenamespace/myschema.json#/definitions/Object
	Ref string `json:"ref" bson:"ref" yaml:"ref"`
	// ID of the layer that will be generated
	LayerID string `json:"layerId,omitempty" bson:"layerId,omitempty" yaml:"layerId,omitempty"`
	// The ID of the root node. If empty, ValueType is used for the root node id
	RootNodeID string `json:"rootNodeId,omitempty" bson:"rootNodeId,omitempty" yaml:"rootNodeId,omitempty"`
	// ValueType is the value type of the schema, that is, the entity type defined with this schema
	ValueType string `json:"valueType" bson:"valueType" yaml:"valueType"`
}

Entity defines an entity as a layered schema with respect to a JSON schema

func FindEntityByRef

func FindEntityByRef(entities []Entity, ref string) *Entity

FindEntityByRef finds the entity by ref value

func FindEntityByValueType

func FindEntityByValueType(entities []Entity, valueType string) *Entity

FindEntityByValueType finds the entity by ValueType value

func (Entity) GetLayerRoot

func (e Entity) GetLayerRoot() string

type EntityLayer

type EntityLayer struct {
	Entity CompiledEntity

	Layer *ls.Layer `json:"-"`
}

EntityLayer contains the layer for the entity

func BuildEntityGraph

func BuildEntityGraph(targetGraph graph.Graph, typeTerm string, linkRefsBy LinkRefsBy, entities ...CompiledEntity) ([]EntityLayer, error)

BuildEntityGraph imports JSON schemas or overlays

A JSON schema may include many object definitions. This import algorithm creates a layer for each entity in the given target graph.

typeTerm should be either ls.SchemaTerm or ls.OverlayTerm

type ErrCyclicSchema

type ErrCyclicSchema struct {
	Loop []*jsonschema.Schema
}

func (ErrCyclicSchema) Error

func (e ErrCyclicSchema) Error() string

type ErrInvalidBooleanValue

type ErrInvalidBooleanValue struct {
	NodeID string
	Value  string
}

func (ErrInvalidBooleanValue) Error

func (e ErrInvalidBooleanValue) Error() string

type ErrValueExpected

type ErrValueExpected struct {
	NodeID string
}

func (ErrValueExpected) Error

func (e ErrValueExpected) Error() string

type ExportOptions

type ExportOptions struct {
	// BuildNodeKeyFunc builds a node key from the node
	BuildNodeKeyFunc func(graph.Node) (string, bool, error)

	// If ExportTypeProperty is set, exports "@type" properties that
	// have non-LS related types
	ExportTypeProperty bool
}

ExportOptions are used to produce the output from the document

func (ExportOptions) BuildNodeKey

func (options ExportOptions) BuildNodeKey(node graph.Node) (string, bool, error)

type LinkRefsBy

type LinkRefsBy int

LinkRefsBy is an enumeration that specifies how the links for the imported schema should be written

const (
	// Remote references are schema references (entity.Ref)
	LinkRefsBySchemaRef LinkRefsBy = iota
	// Remote references are layer ids (entity.LayerID)
	LinkRefsByLayerID
	// Remote references are value types (entity.ValueType)
	LinkRefsByValueType
)

type ParsedDocNode

type ParsedDocNode struct {
	// contains filtered or unexported fields
}

func (ParsedDocNode) GetChildren

func (i ParsedDocNode) GetChildren() []ls.ParsedDocNode

func (ParsedDocNode) GetID

func (i ParsedDocNode) GetID() string

func (ParsedDocNode) GetProperties

func (i ParsedDocNode) GetProperties() map[string]interface{}

func (ParsedDocNode) GetSchemaNode

func (i ParsedDocNode) GetSchemaNode() graph.Node

func (ParsedDocNode) GetTypeTerm

func (i ParsedDocNode) GetTypeTerm() string

func (ParsedDocNode) GetValue

func (i ParsedDocNode) GetValue() string

func (ParsedDocNode) GetValueTypes

func (i ParsedDocNode) GetValueTypes() []string

type Parser

type Parser struct {
	OnlySchemaAttributes bool
	IngestNullValues     bool
	SchemaNode           graph.Node
}

func (Parser) ParseDoc

func (ing Parser) ParseDoc(context *ls.Context, baseID string, input jsonom.Node) (*ParsedDocNode, error)

type TWCursor

type TWCursor struct {
	SchemaPath []graph.Node
	DocPath    []jsonom.Node
	Path       ls.NodePath
}

TWCursor is the tandem walk cursor.

func NewTWCursor

func NewTWCursor(schemaNode graph.Node, docNode jsonom.Node) TWCursor

func (TWCursor) GetDocNode

func (tw TWCursor) GetDocNode() jsonom.Node

func (TWCursor) GetSchemaNode

func (tw TWCursor) GetSchemaNode() graph.Node

func (TWCursor) Push

func (tw TWCursor) Push(schemaNode graph.Node, docNode jsonom.Node, path interface{}) TWCursor

type WalkType

type WalkType int
const (
	// WalkDocNodes will walk all doc nodes, even if there is not a
	// matching schema node
	WalkDocNodes WalkType = iota

	// WalkSchemaNodes will walk all schema nodes, even if there is
	// not a matching doc node. This will not process the schema
	// recursively
	WalkSchemaNodes

	// WalkPairs will only walk doc nodes with matching schema
	WalkPairs
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL