Publisher Conformance and Projections#
Publisher classes consume the same validated CogsModel. A publisher MUST
NOT reinterpret model CSV, fabricate datatypes, mutate the model, or continue
after reader/validation errors. Its target directory must not be the model
directory, an ancestor of it, or otherwise overlap it. --overwrite never
relaxes that safety rule.
Projection targets#
LinkML, DCTAP, GraphQL, DOT, and Sphinx are projections. They are not alternate authorities for the JSON/XML instance model. Each generated artifact MUST carry or accompany a capability report that labels every COGS feature as:
preserved;
deliberately approximated;
explicitly unsupported; or
omitted because it is documentation-only.
Silent loss is non-conforming. If a model uses a feature whose approximation would be misleading, the publisher must emit a diagnostic or fail. Consumers must not use a projection to infer a wire contract that conflicts with the generated schemas.
Publisher capability matrix#
The following matrix is the COGS 2 capability contract for projection targets and the documented exceptions or boundaries of authoritative UML and OWL outputs. “Preserved” means the target has a native or explicit representation. “Approximated” means the publisher emits the named stable diagnostic. JSON Schema and XSD remain authoritative for instance validation.
Target |
Preserved |
Approximated or unsupported |
Diagnostics |
|---|---|---|---|
OWL 2/RDF |
Authoritative PascalCase classes, inheritance, shared camelCase property
IRIs without global domains, class-local |
|
|
LinkML |
PascalCase classes/ranges, camelCase global slots with explicit
|
Exact property-local subtype exclusion, exclusive bounds, portable length facets, and non-string lexical enumerations are omitted with warnings when LinkML has no equivalent slot expression. |
|
DCTAP |
PascalCase declared/effective shapes and value shapes, camelCase model
|
Abstractness, property-local subtype exclusion, ordering, the
|
|
GraphQL |
Scalar/helper declarations, a query root, abstract interfaces, assignable-base interfaces, item lookup/list fields, nullability, and COGS cardinality/facet/order directives. |
Directives are metadata: resolvers must enforce cardinality, facets, ordering behavior. An otherwise empty type receives a deprecated metadata field because GraphQL requires at least one field. |
|
UML/XMI |
Authoritative classes, abstractness, inheritance, associations/attributes, multiplicity, order/uniqueness, primitive definitions, identity annotations, and machine-readable facet constraints. Normative mode is UML/XMI 2.4.2; EA mode is XMI 2.5.1 with deterministic diagram extensions. |
|
|
Graphviz/DOT |
Isolated nodes and actual cardinalities. Per-type diagrams preserve declared direct incoming/outgoing links, optional immediate inheritance edges, and optional contained composite detail. Full-model/topic graphs also include inherited and nested/recursive relationships. |
DOT is a relationship visualization and carries no authoritative identity, facet, primitive, namespace, or instance-shape constraints. Local diagrams do not expand item neighbors, inherited properties, or hidden composite paths. Raw DOT needs no renderer; SVG/PNG/JPEG/PDF require Graphviz. |
|
Sphinx |
Type/topic/article inventories, authored MyST Markdown and
reStructuredText, descriptions, properties, facets, and
relationships. Article TOCs are exact-case, unique, root-contained
references to existing |
Sphinx is documentation rather than a constraint language. If Graphviz is absent, one warning is emitted and all diagram markup is omitted; an executable that is found but fails is an error. Unsafe article paths, links, overlaps, and toctree directive syntax are rejected before the target changes. |
|
Verification boundary#
Repository unit tests parse W3C Turtle with dotNetRDF, deserialize LinkML YAML and
DCTAP CSV, build and inspect GraphQL structure, resolve internal UML/XMI
references, inspect raw DOT, and inspect generated Sphinx sources. The
generated-runtime conformance probe drives the complete instance corpus through
C# → Python → TypeScript and the reverse order, alternates JSON/XML, and runs
validate-instance on every emitted boundary while asserting values and
reference identity. The two-platform conformance workflow additionally runs
linkml-lint and LinkML
code generation, builds the GraphQL schema with graphql-js, invokes
Graphviz for SVG/PNG/JPEG/PDF projections, and builds generated and repository
Sphinx projects with -W. It also invokes OWLAPI for Turtle parsing and OWL 2
DL profile membership, the checked-in semantic DCTAP profile validator, and
the checked-in UML/XMI structure/reference validator.
Those checks do not claim more than they execute. The current DCTAP gate is a
repository semantic-profile check, not independent DCTAP certification. The
OWLAPI gate checks parsing and OWL 2 DL profile membership, not entailment or
reasoning. Official XMI schema validation and headless Eclipse UML2 import are
listed as unavailable in conformance/tools.json; the checked-in UML/XMI
validator is authoritative only for the generated COGS structural contract.
The audit status records whether each configured workflow gate has actually
completed successfully; merely declaring a command in CI is not evidence that
it passed. Equivalent Windows and isolated Debian 12 baselines have completed
the suite, including pinned LinkML 1.9.6/linkml-runtime 1.9.5 and Sphinx
8.2.3/MyST 4.0.1. That Linux evidence is not represented as Ubuntu Noble or as
a hosted GitHub Actions result; the first hosted matrix run remains a release
qualification.
ShEx and SHACL are not current COGS publishers and are not advertised output targets. Adding either requires a publisher, CLI command, documentation, capability contract, and conformance tests.
Markdown, MyST, and Graphviz#
Authored *.markdown content remains Markdown. A Sphinx projection must
either emit .md sources and enable MyST Parser or perform an explicit,
tested conversion; it must not insert Markdown text into reStructuredText and
assume equivalent parsing.
Graphviz is an optional enhancement for Sphinx documentation. If no configured
or discoverable Graphviz executable is available, publish-sphinx warns,
omits every diagram and every corresponding image/link directive, and still
emits a self-consistent text-only project. If an explicit or discovered
Graphviz executable is invoked and returns a failure, generation fails. It must
not publish broken image references.
publish-dot requires Graphviz for rendered formats and reports its absence
as an error. Raw DOT output does not require rendering. Graphviz exit status and
stderr are part of command success, binary output is never processed as text,
and SVG-only post-processing must parse SVG as XML.