Dependency-light Go metadata package for OData service metadata artifacts.
github.com/OpenUdon/odata parses OData CSDL XML and JSON metadata into
native metadata for downstream authoring, packaging, validation, and review
tools. The package is intentionally metadata-first: it preserves entity sets,
singletons, entity types, complex types, enum types, properties, navigation
properties, functions, actions, annotations, and query-relevant metadata
without executing OData requests.
go get github.com/OpenUdon/odataThis package is metadata-only. It does not call OData services, resolve tenant credentials, execute queries, or fetch remote metadata.
package main
import (
"fmt""os""github.com/OpenUdon/odata"
)
funcmain() {
data, err:=os.ReadFile("metadata.xml")
iferr!=nil {
panic(err)
}
model, err:=odata.Parse(data)
iferr!=nil {
panic(err)
}
fmt.Printf("%d schemas\n", len(model.Schemas))
ifop, ok:=model.OperationByID("entitySet.Books.query"); ok {
fmt.Printf("%s returns %s\n", op.ID, op.ReturnType.Type)
}
ifbook, ok:=model.EntityTypeByName("Library.Book"); ok {
fmt.Printf("%s has %d properties\n", book.FullName, len(book.Properties))
}
}Parseparses CSDL XML or CSDL JSON bytes.ParseXMLparses CSDL XML bytes.ParseJSONparses CSDL JSON bytes.ParseJSONMapparses an already-decoded CSDL JSON object.OperationByIDlooks up selectable entity, function, and action operation summaries.EntityTypeByName,ComplexTypeByName, andEnumTypeByNamelook up parsed types by fully-qualified OData name.EntityContainerByNamelooks up parsed entity containers by fully-qualified OData name.SelectorAliaseslists canonical operation IDs and local JSON Pointer-style selectors.ResolveSelectorresolves operation IDs,#/operations/{id}, container, entity set, singleton, type, function, and action selectors.
Consumer-readiness examples are tracked in later milestones in
memory-bank/milestone.md.
See Consumer Readiness for apitools, OpenUdon,
and UWS source-profile planning boundaries.
See UWS Source-Profile Evidence for the non-normative OData source-profile evidence recorded by this package.
GOWORK=off go test ./...
GOWORK=off go vet ./...
git diff --check