Look

The declarative rendering vocabulary. A resource declares how it presents itself by attaching a view of stacked bands; the SDK interprets that declaration instead of hardcoding layout, so appearance is authored in the graph and overridable without recompiling.

The look vocabulary lets a type say how it renders, declaratively. A view — Resource View, Package View, or Publisher View — is an ordered list of Bands, each a self-contained section: Hero for the header, Markdown for prose, Details for a generic property dump, Property Table / Property List for structured fields, Embedded Views / Instances for nested resources, and Referenced By for incoming links. Bands read their content from properties named declaratively — a Markdown band's Source, say — so the same machinery styles any vocabulary. Defaults and the rdfs.Resource floor live in the universal-look package; this package defines the building blocks.

Configuring a publisher's look

A publisher's landing page is just a Publisher resource rendered through a Publisher View. Attach a derivation.look to the Publisher and list the bands you want, top to bottom:

acme:
  type: ck.Publisher
  label: Acme
  comment: Tools for the road-runner age.
  derivation.look:
    type: look.PublisherView
    bands:
      - type: look.Hero
        look.title: rdfs.label
        look.subtitle: rdfs.comment
      - type: look.Markdown
        look.source: prose.documentation
      - type: look.PublisherPackages

That renders a Hero over the publisher's name and tagline, its Documentation as a Markdown section, and a Publisher Packages grid of every package it publishes (latest version of each).

To feature a curated headline set instead of the whole catalog, give Publisher Packages an explicit Packages list and introduce it with a Section Heading:

  - type: look.SectionHeading
    look.heading: Start here
  - type: look.PublisherPackages
    look.packages:
      - core-rdf
      - core-owl

Site-wide chrome — the Nav shown on every page and a Footer (copyright / license text plus optional links) — is declared the same way, on the Publisher resource, so it applies across the whole site from one place. Declare no look at all and the universal-look default applies (a Hero plus the full package grid), so every publisher has a usable landing page out of the box.

Alpha Path`/`-separated path resolving to the Beta distribution's alpha (α) shape parameter, e.g. "wv.confidence/est.betaAlpha".AvatarFor Hero: like `icon`, but a larger, card-styled profile picture of the resource's own SemanticSvg (rendered at its card tier) beside the title block — a…Axis MaxOptional fixed upper bound for the Timeline trajectory chart's Y axis. When omitted, the axis autoscales to the data.Axis MinOptional fixed lower bound for the Timeline trajectory chart's Y axis. When omitted, the axis autoscales to the data. Declare alongside axisMax to pin an…Badge PathOptional `/`-separated path resolved on each referenced resource to a short badge value shown on its detail row (e.g. "wv.evidenceStrength"). Only used when…Badge RowRenders type references as clickable badges with tooltips drawn from each target's rdfs.comment. `source` is the property holding the type references…Badges PropertyOptional property whose value is a list of type references to render as clickable badges with tooltips. urlForm is "*" so badges always link to the latest…BandAbstract base for all bands. A band is a semantic building block of a View — it reads properties off the input resource and renders one region of the page.…BandsOrdered list of bands that compose this view. Render order matches list order.Beta Path`/`-separated path resolving to the Beta distribution's beta (β) shape parameter, e.g. "wv.confidence/est.betaBeta".Cell AsOptional band class to render each cell with. When absent, cells render their value via the universal value-walker.Cell MaxMaximum value for normalized cell renderers.Cell MinMinimum value for normalized cell renderers (e.g., BarMeter).ChannelA quantitative channel layered on a Facet's topology role: maps a numeric value read from each node onto a visual variable. Rides on the role — e.g. a…ChannelsOptional quantitative channels layered on the facet's topology role.Chip RowInline labeled chips, one per property in `chips`. Each chip shows the property's label and the input's value for that property. Chips with no value on the…ChipsList of property references; each becomes a labeled chip showing the property's label and the input's value.ClusterRenders the facet's related instances as a labeled group of node tiles. The simplest topology role — a grouped set, no edges.ConnectorDraws the facet's relationship as directed edges between node tiles.ContentsFor EmbeddedViews: when true, a table-of-contents nav is rendered above the sections, with one link per item pointing at that item's on-page anchor. Each…CountsList of count-entries to display.DetailsA generic, recursive property sheet for the page instance — the nice default detail view for any resource. Walks every statement (skipping the meta ones…DiagramA relationship diagram derived from the page instance. Declares one or more `facets`, each traversing a relationship the class exposes and encoding it as a…Diagram TierDeclared ON A CLASS — the semantic-zoom tier ("chip"/"icon"/"card"/"full") its instances render at when they appear as NODES in a tile-based diagram (cluster /…Direction"ascending" or "descending". Defaults to "ascending".Display LabelThe property whose value supplies a resource's display name. A class declares it to say its instances' label comes from a domain-specific property (e.g.…Display SummaryThe property whose value supplies a resource's one-line summary. The summary companion to displayLabel, resolved the same way through the type cascade; the…DistributionA small SVG of a Beta probability density computed from the page instance's statistics — so a confidence reads as a shape, not just a number. `alphaPath` and…Edge LabelStatic text drawn on each of the facet's edges (connector / DAG) to say WHAT the relationship is. Overrides `labelEdges`.Edge ValueOptional `/`-path resolved PER EDGE to a dynamic value shown on that edge (e.g. "weight" → the actual weight on each "weighs on" relationship). Appended to…EdgesOptional inter-node predicate for a `connector` facet. When present, the facet renders as a layered DAG: an edge is drawn for every statement `nodeA <edges>…Embedded ViewsRenders each item of an embedded-list property through that item's OWN class look, rather than dumping the list as a generic property sheet. `source` names the…EncodeThe EncodingRole this facet maps its relationship to — `look.cluster`, `look.connector`, and so on.Encoding RoleA visual role a facet maps its relationship to. An open, extensible registry — publishers may define additional roles. Topology roles arrange nodes spatially…EntriesList of property references; each property's references render as a labeled cross-reference group. Group label derives from the property's rdfs.label. urlForm…EqualsThe value the property must equal for the condition to match.ExpandOptional reference to a named Diagram that each node EXPANDS into as its own sub-diagram — recursion. The referenced Diagram may reference itself, giving…Eyebrow PropertyOptional property whose value supplies the small uppercase text above the title. Typically `rdf:type`.FacetOne dimension of a Diagram. `relation` is the property traversed from the page instance to the facet's nodes; `encode` is the EncodingRole that determines how…FacetsThe ordered list of Facets that compose the Diagram. Each is traversed from the page instance and rendered into the diagram SVG.Featured ResourceEmbed a specific resource's full view inline. `source` is a direct reference to the resource; its own cascaded look bands are rendered inside the page,…FigureEmbeds a resource's SemanticSvg at full tier as a page figure. With no slots it shows the page instance's own svg — a resource's visual identity displayed on…Figure TitleOptional caption shown with the diagram. Placed above the figure by default, or below it when `titlePosition` is "bottom".FooterSite-wide footer content — optional text (license, copyright) plus a list of additional links.FooterOptional site-wide footer content, authored on the publisher's core-kanonak.Publisher resource. No domain is asserted.HeadingThe literal section name shown by a SectionHeading band.HeroPage header band. Renders a title (typically the resource's rdfs.label), optionally preceded by an eyebrow tag (rdf:type or similar), followed by a subtitle…HorizonRenders a structured condition tree off the page instance — typically an invalidationCondition: the typed AND/OR/Threshold/Event/Sequenced grammar that defines…Hue ByFor the metric-series bands: an optional `/`-separated path from each tracked sub-resource to a numeric hue (0..360) used to theme that series. When absent or…IconFor Hero: when true, the resource's own chip-tier SemanticSvg is shown as a small glyph beside the title block, so the identity icon and the heading (eyebrow /…Instance VariantA conditional override that fires when an instance matches a WhenCondition. Used to swap tokens (or, rarely, the entire view) based on instance state — e.g., a…InstancesOn a class resource's own page, the resources whose rdf:type is this class, rendered as a card grid. DIRECT by default (exact type); `transitive: true` widens…Label EdgesWhen true and no static `edgeLabel` is set, label each edge with the relationship predicate's own `rdfs.label` — ontology-driven edge labels.Label PathOptional `/`-separated path used to render each referenced resource's display text (instead of its rdfs.label) in a ReferenceList. Switches the band from…Lane ByOptional `/`-separated path resolved on each plotted resource to a category value; the TimePlot splits points into one lane per distinct value and colors them…LimitMaximum number of results. Omit for unlimited.LinksRenders a resource's outbound links (a `link.links`-style property of `link.Link` values) as a row of real `<a href>` anchors — the label is the link text, the…LinksOptional list of additional links in the footer.Lower PathOptional `/`-separated path (same syntax as metricPath) to a per-point lower bound. When both lowerPath and upperPath resolve, the trajectory chart draws a…Map PathA `/`-separated path resolving to the numeric value on each node, e.g. "wv.confidence/est.estimateMean" — the same path syntax as a Distribution's metricPath.…MarkOptional band rendered as each node's glyph in place of its identity tile — ANY look band (Distribution, TimePlot, StatRow, ...) computed against the node as…MarkdownProse section rendered as Markdown. `source` is a string-valued property whose content is processed through the SDK's CommonMark renderer.Metric PathFor the metric-series bands: a `/`-separated path resolved from each tracked sub-resource to the numeric value plotted. Each step matches a statement by…NavOrdered list of nav entries for a publisher's site chrome, shown on every page. Authored on the publisher's core-kanonak.Publisher resource (the single config…Nav GroupRenders the publisher's site nav — the `nav` list on their core-kanonak.Publisher resource — as a `<nav>` block. The renderer emits this chrome at the top of…Nav LinkA single entry in a publisher's navigation. References a target resource (typically a package or named resource); the rendered label comes from `rdfs.label`…Node NoteOptional `/`-path resolved on each node to a value shown as small secondary text beside the node label (e.g. "weight" or a short description) — extra…Node TierSemantic-zoom tier each node tile renders at — "chip", "icon" (default), "card", or "full". Because a node tile is a responsive SemanticSvg, its rendered size…NoteAn optional one-line description shown under a SectionHeading.Of ClassThe class to query for instances of.Order ByOptional property to order results by. Property's value must be comparable (numbers, strings, dates).Package ContentsThe default package listing. On a Package self-resource page, it enumerates every other resource sharing the package's namespace (the package's members) and…Package ViewThe content of a package page (`/{package}` or `/{package}/{version}`). Bound to a Package resource via `derivation.look`. Aggregation bands (ResourceGrid,…PackagesFor PublisherPackages: an optional explicit, ordered list of the packages to feature. Each value references a package's self-resource (the Package instance…PlacementFloat placement for ANY visual band: "floatLeft" or "floatRight" pulls the band out of the vertical flow so the following band's prose wraps around it…PropertyThe property of the input instance to test.Property ListDefinition-list rendering of one property's contents. `source` is the property to read (typically an embedded or list-of-embeddeds). The list title defaults to…Property TableTable rendering for a list of dict-keyed embeddeds. Each row is one embedded; columns are the union of predicate names across the embeddeds. Optional `cellAs`…Publisher PackagesA grid of the publisher's packages as cards (SemanticSvg + label + truncated comment) linking to each bare `/{package}` overview. The discovery section of a…Publisher ViewThe content of the publisher root URL (`/`). Set as the `rootView` slot of a PublisherKit.Reference ListLabeled groups of cross-references. `entries` is a list of properties; each property's references are rendered as a labeled group. Each link's label comes from…Referenced ByThe inverse of ReferenceList — incoming references. Lists every resource in the catalog that points AT the page instance, rendered as a card grid (the…RelationThe property traversed from the page instance to this facet's nodes, e.g. `protocols.hasConvention`. Resolved through the object model: the renderer reads…Resource CountPer-class count aggregates. `counts` is a list of ResourceCountEntry resources, each scoping to one class. Labels come from each class's rdfs.label; the count…Resource Count EntryOne entry in a ResourceCount band. `source` references the class to count. The label is derived from the class's rdfs.label.Resource GridGrid of resource cards. `source` is a ResourceQuery selecting which resources to include. Each card renders the resource's own derivation.look in `compact`…Resource QueryDeclarative resource selector — class, optional orderBy property, optional direction (ascending / descending), optional limit. v0.1 keeps the DSL intentionally…Resource ViewThe content of a resource page. Bound to a class via `derivation.look`; every instance of the class renders its resource URL through this view.Section HeadingA subtle labeled section break placed between content bands. `heading` is the section name and `note` an optional one-line description. One of the few bands…Section NavAn in-page table of contents: a row of anchor links to every SectionHeading on the page, in document order, letting a reader jump straight to a section. Takes…Semantic SVGA single responsive SVG with four nested visibility tiers — tier-chip (rendered at <60px wide), tier-icon (60-160), tier-card (160-400), and tier-full (>=400).…Semantic SVGThe class-level or instance-level SemanticSvg declaration. Renderers asking for a resource's SVG walk the type cascade looking for this property, and the…SizeFor Figure: how large to render the embedded SemanticSvg — "small", "medium", or "large". Because the SemanticSvg is responsive, the width also selects which…SkipOptional list of properties for a Details band to omit — typically a property already surfaced elsewhere (e.g. the one used as the Hero title), to avoid…SourceFor property-reading bands (BadgeRow, PropertyList, PropertyTable, Markdown): the property whose value supplies the band's content. For resource-targeting…StatOne cell in a StatRow: a `statLabel` (the displayed key) and a `statPath` (resolved against the page instance for the value).Stat LabelThe displayed key for a Stat cell (e.g. "μ", "95% CI low").Stat PathThe `/`-separated path (same DSL as metricPath) resolved against the page instance to produce this stat's value. Reaches into embeddeds — e.g.…Stat RowA strip of labeled stats read off the page instance. `stats` is a list of Stat specs; each resolves a `statPath` (the `/`-separated path DSL, reaching into…StatsOrdered list of Stat cells rendered by a StatRow.Subtitle PropertyOptional property whose value supplies a subtitle paragraph below the title. Typically `rdfs.comment`.TargetThe resource this nav link points to. Range is rdfs.Resource — typically a Package (for `/snapshot`) or a named resource (for `/snapshot/view`). The rendered…TextLiteral footer text (license info, copyright). One of the few places in the look vocabulary where a literal string is appropriate — there's no canonical…Tier Card SVGRaw SVG fragment for 160-400px renders — ResourceGrid card thumbnails. Same placeholder + CSS-variable rules as tierChip.Tier Chip SVGRaw SVG fragment shown when the resource's SVG is rendered at <60px wide — favicon, tree node, breadcrumb dot. Placed inside the `<g class="tier-chip">` group.…Tier Full SVGRaw SVG fragment for >=400px renders — hero figures, embed cards. Same placeholder + CSS-variable rules as tierChip.Tier Icon SVGRaw SVG fragment for 60-160px renders — sidebar tiles, hover previews. Same placeholder + CSS-variable rules as tierChip.Time PlotPlots the referenced resources held by `source` on a horizontal time axis — `orderBy` is the date property read on each. With `laneBy` (a path to a category…TimelineA chronological view of a versioned series. `source` is the class whose instances are placed on the time axis; `orderBy` is the date/datetime property to sort…Title PositionWhere the `figureTitle` sits relative to the figure — "top" (default) or "bottom" (caption style).Title PropertyProperty whose value supplies the Hero's headline text. Typically `rdfs.label`. The renderer reads input[title] and emits the value.ToThe visual variable the scaled value maps to: "thickness" (connector edge stroke width) or "opacity" (node/edge alpha).TrackFor the metric-series bands (Timeline trajectory mode, VersionDiff): the property on each source instance that holds the sub-resources to follow across the…TransitiveFor Instances: when true, include instances of subclasses (the transitive subclass closure), not only resources typed exactly as this class. Absent or false…Upper PathOptional `/`-separated path to a per-point upper bound, paired with lowerPath to shade an envelope on the trajectory chart. Example:…URL FormOperator controlling how this property's reference values render as URLs. Four valid values, matching Kanonak's version-compatibility operators: - "*" : any…Value LabelOptional short prefix shown before each series' value in the trajectory chart legend (e.g. "μ" to render "μ=0.74"). Domain-specific framing the publisher…VariantsOptional list of conditional overrides. Each variant's WhenCondition is evaluated against the input instance; matching variants layer their token / look…Version DeltaA visual of how a metric changed from the previous version of THIS resource — the same canonical key at the highest version below the current. `metricPath` is…Version DiffA compact per-key change view over a versioned series — the "trend rows" companion to the Timeline trajectory chart. Takes the same inputs (`source` +…ViaFor ReferencedBy: the single incoming property to scan for. Only resources that reference the page instance THROUGH this predicate are listed. When absent, any…ViewAbstract base for the three view types — ResourceView, PackageView, PublisherView. A view is an ordered list of Bands plus optional InstanceVariant rules.…WhenThe predicate that gates this variant. When the condition matches the input instance, the variant's token / look overrides apply.When ConditionA predicate matching an instance's property value. v0.1 supports only equality matching (property + equals). More complex predicates (numeric thresholds,…WidthWidth of a floated band as a CSS length, e.g. "42%" or "320px". Defaults to 42% when omitted. Has no effect unless `placement` floats the band.