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. In 2.0.0 the band path carriers (metricPath, statPath, mapPath, alphaPath, betaPath, lowerPath, upperPath, hueBy, laneBy, labelPath, badgePath, nodeNote, edgeValue) are typed as `tx.Expression` rather than `/`-separated path strings, so every path a band reads resolves through the object model and validates at `kanonak validate` time — no magic-string local-name matching.

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.

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`tx.Expression` (same shape as metricPath) resolving to the Beta distribution's alpha (α) shape parameter, e.g. the confidence estimate's betaAlpha field.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 `tx.Expression` (same shape as metricPath) evaluated on each referenced resource to a short badge value shown on its detail row (e.g. a…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.Bar MeterRenders a numeric value in [0, 1] as a horizontal bar - a compact inline gauge. Typically used via a PropertyTable `cellAs` override to draw a probability or…Beta Path`tx.Expression` (same shape as metricPath) resolving to the Beta distribution's beta (β) shape parameter, e.g. the confidence estimate's betaBeta field.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 `tx.Expression` (same shape as metricPath) evaluated PER EDGE to a dynamic value shown on that edge (e.g. the actual weight on each "weighs on"…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 `tx.Expression` (same shape as metricPath) evaluated against each tracked sub-resource to a numeric hue (0..360) used…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 `tx.Expression` (same shape as metricPath) evaluated on each referenced resource to its display text (instead of its rdfs.label) in a ReferenceList.…Lane ByOptional `tx.Expression` (same shape as metricPath) evaluated on each plotted resource to a category value; the TimePlot splits points into one lane per…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 `tx.Expression` (same shape as metricPath) to a per-point lower bound. When both lowerPath and upperPath resolve, the trajectory chart draws a shaded…Map PathA `tx.Expression` (same shape as metricPath) resolving to the numeric value on each node — e.g. a `tx.Traverse` through wv.confidence to est.estimateMean. The…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 `tx.Expression` evaluated against each tracked sub-resource (bound to the `input` variable) to the numeric value plotted. A…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 `tx.Expression` (same shape as metricPath) evaluated on each node to a value shown as small secondary text beside the node label (e.g. a weight or…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 `tx.Expression` (same shape as metricPath) evaluated against the page instance (bound to `input`) to produce this stat's value. Reaches into embeddeds and…Stat RowA strip of labeled stats read off the page instance. `stats` is a list of Stat specs; each resolves a `statPath` (a `tx.Expression` reaching into embeddeds and…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 SVGSVG fragment for 160-400px renders — ResourceGrid card thumbnails. Same authoring contract as tierChip.Tier Chip SVGSVG 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 SVGSVG fragment for >=400px renders — hero figures, embed cards. Same authoring contract as tierChip.Tier Icon SVGSVG fragment for 60-160px renders — sidebar tiles, hover previews. Same authoring contract 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 `tx.Expression` (same shape as metricPath) to a per-point upper bound, paired with lowerPath to shade an envelope on the trajectory chart — e.g. the…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 four look view types — ResourceView, PackageView, PublisherView, SemanticSvg. A look view is the VISUAL specialization of [[view.View]]:…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.