<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged skos</title>
<link>https://coderlegion.com/tag/skos</link>
<description>Powered by Question2Answer</description>
<item>
<title>SKOS as Operational Infrastructure for Deterministic Semantic Systems</title>
<link>https://coderlegion.com/16748/skos-as-operational-infrastructure-for-deterministic-semantic-systems</link>
<description>&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt; Most systems that call themselves &quot;semantic&quot; are probabilistic by design — they approximate meaning rather than anchor it. SKOS (Simple Knowledge Organization System), when deployed as load-bearing infrastructure rather than an annotation convenience, provides the structural guarantees those systems lack. We define what that shift requires, show the four formal properties that make it possible, and walk through the failure modes that emerge when the architecture is misapplied.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;1-the-problem-when-semantic-doesn-t-mean-reliable&quot;&gt;1. The Problem: When &quot;Semantic&quot; Doesn't Mean Reliable&lt;/h3&gt;
&lt;p&gt;The word &lt;em&gt;semantic&lt;/em&gt; now carries two incompatible meanings, and most engineering teams don't notice the conflict until something breaks.&lt;/p&gt;
&lt;p&gt;In machine learning and NLP, semantic means &lt;em&gt;embedding similarity&lt;/em&gt; — a probabilistic, context-dependent measure. A vector embedding of the word &lt;em&gt;bank&lt;/em&gt; shifts depending on surrounding tokens, model version, and quantization. Two identical queries against the same corpus can return different results on different days. That is not a bug; it is how the method works.&lt;/p&gt;
&lt;p&gt;This is appropriate for search and recommendation. It is not appropriate for domains where the same semantic decision must be reproduced exactly — across time, systems, and institutions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Regulatory classification&lt;/strong&gt; — ICD-10 codes, NAICS taxonomy assignments, drug classes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supply chain and procurement&lt;/strong&gt; — product category hierarchies with contractual precision&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-institutional data exchange&lt;/strong&gt; — where term equivalence carries legal standing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit and compliance&lt;/strong&gt; — where a classification made today must be reproducible in three years&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These domains require &lt;strong&gt;semantic determinism&lt;/strong&gt;: given the same input identifier and the same concept scheme version, a system must always resolve to the same concept, the same hierarchical position, and the same mapping relationships. No variation. No drift.&lt;/p&gt;
&lt;p&gt;SKOS, properly deployed, provides this. Vector embeddings cannot.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-what-skos-actually-is&quot;&gt;2. What SKOS Actually Is&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;SKOS&lt;/strong&gt; (Simple Knowledge Organization System) is a W3C standard for expressing controlled vocabularies, thesauri, and classification schemes in RDF — the data model underlying the Semantic Web.&lt;/p&gt;
&lt;h4 id=&quot;what-skos-defines&quot;&gt;What SKOS Defines&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Component &lt;/th&gt;&lt;th&gt;Property / Class &lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Concept &lt;/td&gt;&lt;td&gt;skos:Concept &lt;/td&gt;&lt;td&gt;Atomic unit of meaning — one idea, one URI&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Concept Scheme &lt;/td&gt;&lt;td&gt;skos:ConceptScheme &lt;/td&gt;&lt;td&gt;Bounded vocabulary namespace&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Labels &lt;/td&gt;&lt;td&gt;skos:prefLabel, skos:altLabel &lt;/td&gt;&lt;td&gt;Human-readable names; preferred label is canonical&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Hierarchy &lt;/td&gt;&lt;td&gt;skos:broader, skos:narrower &lt;/td&gt;&lt;td&gt;Parent/child structure; both are transitive&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Association &lt;/td&gt;&lt;td&gt;skos:related &lt;/td&gt;&lt;td&gt;Non-hierarchical link between concepts&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Documentation &lt;/td&gt;&lt;td&gt;skos:definition, skos:scopeNote &lt;/td&gt;&lt;td&gt;Defines intended meaning and scope&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Mapping &lt;/td&gt;&lt;td&gt;skos:exactMatch, skos:broadMatch, skos:narrowMatch, skos:closeMatch &lt;/td&gt;&lt;td&gt;Cross-vocabulary alignment&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;what-skos-does-not-define&quot;&gt;What SKOS Does Not Define&lt;/h4&gt;
&lt;p&gt;SKOS does not handle formal class membership (OWL's role), cardinality constraints (use SHACL), temporal versioning (requires named graphs or external governance), or instance data. A SKOS concept is &lt;em&gt;about&lt;/em&gt; a thing — not the thing itself.&lt;/p&gt;
&lt;p&gt;Teams that expect SKOS to behave like OWL will under-constrain their schemes. Teams that treat it as a tag cloud will over-expand label sets and lose the precision the model provides. The operational value of SKOS lives in the space between those two mistakes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-the-four-properties-that-enable-determinism&quot;&gt;3. The Four Properties That Enable Determinism&lt;/h3&gt;
&lt;p&gt;SKOS is not deterministic by default. It becomes deterministic when four properties are understood and enforced deliberately.&lt;/p&gt;
&lt;h4 id=&quot;3-1-uri-stability-concepts-have-addresses-not-just-names&quot;&gt;3.1 URI Stability: Concepts Have Addresses, Not Just Names&lt;/h4&gt;
&lt;p&gt;Every &lt;code&gt;skos:Concept&lt;/code&gt; is identified by a URI — a stable, resolvable address, not a label. A system that routes on a concept URI makes the same decision every time, regardless of how that concept's label has evolved.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-turtle&quot;&gt;&amp;lt;https://vocab.example.org/concept/C0047921&amp;gt;
    a skos:Concept ;
    skos:prefLabel &quot;Hypertension&quot;@en ;
    skos:inScheme &amp;lt;https://vocab.example.org/MedicalConditions&amp;gt; ;
    skos:exactMatch &amp;lt;http://id.nlm.nih.gov/mesh/D006973&amp;gt; .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A system routing on &lt;code&gt;&quot;Hypertension&quot;&lt;/code&gt; is not deterministic. A system routing on &lt;code&gt;https://vocab.example.org/concept/C0047921&lt;/code&gt; is. This is the foundation of the entire architecture.&lt;/p&gt;
&lt;h4 id=&quot;3-2-scheme-boundaries-closed-worlds-enable-validation&quot;&gt;3.2 Scheme Boundaries: Closed Worlds Enable Validation&lt;/h4&gt;
&lt;p&gt;A &lt;code&gt;skos:ConceptScheme&lt;/code&gt; creates a bounded semantic space. Concepts are explicitly declared members via &lt;code&gt;skos:inScheme&lt;/code&gt;. You can enumerate every valid concept and reject anything not in the scheme — making validation deterministic rather than a matter of confidence scores.&lt;/p&gt;
&lt;h4 id=&quot;3-3-preferred-label-uniqueness-two-way-lookup&quot;&gt;3.3 Preferred Label Uniqueness: Two-Way Lookup&lt;/h4&gt;
&lt;p&gt;SKOS specifies that a concept &lt;em&gt;should&lt;/em&gt; have no more than one &lt;code&gt;skos:prefLabel&lt;/code&gt; per language. Enforced via SHACL, this creates bidirectional lookup: concept → canonical label, and canonical label → concept, both deterministic.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sparql&quot;&gt;SELECT ?label (COUNT(?concept) AS ?count)
WHERE {
    ?concept a skos:Concept ;
             skos:inScheme &amp;lt;https://vocab.example.org/MedicalConditions&amp;gt; ;
             skos:prefLabel ?label .
    FILTER(LANG(?label) = &quot;en&quot;)
}
GROUP BY ?label
HAVING (COUNT(?concept) &amp;gt; 1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any label returned here is shared by more than one concept — that lookup is now ambiguous.&lt;/p&gt;
&lt;h4 id=&quot;3-4-transitivity-hierarchy-traversal-without-custom-recursion&quot;&gt;3.4 Transitivity: Hierarchy Traversal Without Custom Recursion&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;skos:broader&lt;/code&gt; and &lt;code&gt;skos:narrower&lt;/code&gt; are transitive. Ancestor and descendant queries need no recursive application logic:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sparql&quot;&gt;SELECT ?ancestor WHERE {
    &amp;lt;https://vocab.example.org/concept/C0047921&amp;gt; skos:broaderTransitive+ ?ancestor .
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This returns every ancestor of Hypertension — same result every time. It is the foundation of analytics roll-up, faceted classification, and scope-based access control.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;4-the-architecture-flipping-the-stack&quot;&gt;4. The Architecture: Flipping the Stack&lt;/h3&gt;
&lt;p&gt;The standard SKOS deployment puts the concept scheme downstream of the data: documents get tagged, tags get stored, queries get expanded using SKOS when needed. The scheme is consulted. It does not govern.&lt;/p&gt;
&lt;p&gt;The infrastructure model reverses this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;┌────────────────────────────────────────────────┐
│             CONCEPT SCHEME LAYER               │
│    (SKOS vocabularies — semantic authority)    │
└───────────────────┬────────────────────────────┘
                    │ governs
        ┌───────────┼───────────┐
        ▼           ▼           ▼
  ┌──────────┐ ┌─────────┐ ┌──────────┐
  │Ingestion │ │ Routing │ │Validation│
  │ Pipeline │ │  Logic  │ │ &amp;amp; Audit  │
  └──────────┘ └─────────┘ └──────────┘
                    │ produces
                    ▼
           ┌──────────────────────┐
           │  Instance Data       │
           │  (concept URIs,      │
           │   not free text)     │
           └──────────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ingestion&lt;/strong&gt; normalizes free text to canonical labels, resolves to URIs, and stores the URI as the semantic payload&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routing&lt;/strong&gt; uses hierarchy traversal to determine processing paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation&lt;/strong&gt; rejects data referencing concept URIs absent from the current scheme version&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instance data&lt;/strong&gt; carries concept URIs — this is the commitment that makes everything downstream reproducible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Keep three layers separate:&lt;/strong&gt; SKOS governs &lt;em&gt;what things mean&lt;/em&gt;. OWL governs &lt;em&gt;what things are&lt;/em&gt;. Instance data records &lt;em&gt;what exists&lt;/em&gt;. Extending SKOS with OWL class axioms forces entailment recalculation on every scheme change and eliminates the stability that makes SKOS useful as a reference layer.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;5-governing-change-versioning-as-a-semantic-contract&quot;&gt;5. Governing Change: Versioning as a Semantic Contract&lt;/h3&gt;
&lt;p&gt;Determinism requires version stability. A concept in version 2.1 must resolve identically against that version even after version 3.0 is published. Three practices make this work:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Version-scoped URIs&lt;/strong&gt;: &lt;code&gt;https://vocab.example.org/MedicalConditions/v2.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Never delete deprecated concepts&lt;/strong&gt; — mark with &lt;code&gt;owl:deprecated true&lt;/code&gt;, add &lt;code&gt;skos:historyNote&lt;/code&gt;, provide &lt;code&gt;skos:exactMatch&lt;/code&gt; to successor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Named graphs&lt;/strong&gt; to isolate scheme versions in the triple store&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Change Type &lt;/th&gt;&lt;th&gt;Impact &lt;/th&gt;&lt;th&gt;Required Action&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Add new concept &lt;/td&gt;&lt;td&gt;None &lt;/td&gt;&lt;td&gt;Mint new URI; no existing references break&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Change &lt;code&gt;skos:altLabel&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Low &lt;/td&gt;&lt;td&gt;Safe to update; log the change&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Change &lt;code&gt;skos:prefLabel&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Medium &lt;/td&gt;&lt;td&gt;Version the scheme; update lookup indexes&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Change &lt;code&gt;skos:broader&lt;/code&gt; &lt;/td&gt;&lt;td&gt;High &lt;/td&gt;&lt;td&gt;Version the scheme; recalculate all roll-ups&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Deprecate a concept &lt;/td&gt;&lt;td&gt;Critical &lt;/td&gt;&lt;td&gt;Mark deprecated; never delete; map to successor&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The discipline mirrors public API versioning: breaking changes require a version bump. Additive changes do not.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;6-mapping-relationships-as-inference-contracts&quot;&gt;6. Mapping Relationships as Inference Contracts&lt;/h3&gt;
&lt;p&gt;SKOS mapping properties are routinely treated as informal alignment hints. Operationally, they are &lt;strong&gt;inference contracts&lt;/strong&gt; with enforceable semantics.&lt;/p&gt;
&lt;h4 id=&quot;skos-exactmatch-symmetric-and-transitive&quot;&gt;&lt;code&gt;skos:exactMatch&lt;/code&gt; — Symmetric and Transitive&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;If A exactMatch B  →  B exactMatch A
If A exactMatch B and B exactMatch C  →  A exactMatch C
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any system accepting concept A must accept B as a valid substitute. A concept from ICD-11 marked &lt;code&gt;skos:exactMatch&lt;/code&gt; to SNOMED CT can be processed by SNOMED-only systems — without additional routing logic.&lt;/p&gt;
&lt;h4 id=&quot;skos-broadmatch-asymmetric&quot;&gt;&lt;code&gt;skos:broadMatch&lt;/code&gt; — Asymmetric&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;If A broadMatch B  →  B is the more general concept
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Data tagged with A can aggregate under B. The reverse is not valid — data tagged with B cannot be inferred to belong to A. Violating this direction produces incorrect roll-ups.&lt;/p&gt;
&lt;h4 id=&quot;validate-mappings-in-ci-cd&quot;&gt;Validate Mappings in CI/CD&lt;/h4&gt;
&lt;p&gt;Declaring A as an exact match for B while also declaring A narrower than B is a logical contradiction. Run integrity checks as automated tests on every scheme update:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sparql&quot;&gt;ASK {
    ?a skos:exactMatch ?b .
    ?b skos:exactMatch ?c .
    ?a skos:broadMatch ?c .
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If this returns &lt;code&gt;true&lt;/code&gt;, the mapping set is internally inconsistent.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;7-four-failure-modes-and-how-to-detect-them&quot;&gt;7. Four Failure Modes and How to Detect Them&lt;/h3&gt;
&lt;h4 id=&quot;7-1-uncontrolled-polyhierarchy&quot;&gt;7.1 Uncontrolled Polyhierarchy&lt;/h4&gt;
&lt;p&gt;SKOS permits multiple &lt;code&gt;skos:broader&lt;/code&gt; parents. Without explicit governance, roll-up logic becomes ambiguous and scope note inheritance produces contradictions.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sparql&quot;&gt;SELECT ?concept (COUNT(?parent) AS ?parentCount)
WHERE {
    ?concept skos:broader ?parent ;
             skos:inScheme &amp;lt;https://vocab.example.org/MyScheme&amp;gt; .
}
GROUP BY ?concept
HAVING (COUNT(?parent) &amp;gt; 1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Every concept returned requires documented justification or a scheme revision.&lt;/p&gt;
&lt;h4 id=&quot;7-2-label-bleed-across-schemes&quot;&gt;7.2 Label Bleed Across Schemes&lt;/h4&gt;
&lt;p&gt;When multiple schemes share a triple store, an unscoped label query can resolve to different concepts from different schemes. Always scope label queries:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sparql&quot;&gt;SELECT ?concept WHERE {
    ?concept skos:prefLabel &quot;Revenue&quot;@en ;
             skos:inScheme &amp;lt;https://vocab.example.org/FinancialConcepts&amp;gt; .
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An unscoped version is structurally incorrect in any multi-scheme store.&lt;/p&gt;
&lt;h4 id=&quot;7-3-mapping-drift&quot;&gt;7.3 Mapping Drift&lt;/h4&gt;
&lt;p&gt;An &lt;code&gt;skos:exactMatch&lt;/code&gt; declared in 2021 may no longer hold in 2026 if either concept has been redefined. The mapping is still asserted; the alignment is gone. Automate review triggers: when a concept's &lt;code&gt;skos:definition&lt;/code&gt;, &lt;code&gt;skos:scopeNote&lt;/code&gt;, or &lt;code&gt;skos:broader&lt;/code&gt; changes, flag all outbound mappings for human review before publishing the new version.&lt;/p&gt;
&lt;h4 id=&quot;7-4-non-resolvable-uris&quot;&gt;7.4 Non-Resolvable URIs&lt;/h4&gt;
&lt;p&gt;A concept URI returning HTTP 404 eliminates the primary value of identifier-based routing. Every URI must resolve to a document containing — at minimum — the concept's labels, scheme membership, and hierarchical position.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;8-building-it-implementation-patterns&quot;&gt;8. Building It: Implementation Patterns&lt;/h3&gt;
&lt;h4 id=&quot;8-1-enforce-integrity-with-shacl&quot;&gt;8.1 Enforce Integrity with SHACL&lt;/h4&gt;
&lt;p&gt;SKOS leaves its most important constraints as recommendations. SHACL promotes them to hard requirements:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-turtle&quot;&gt;@prefix sh:   &amp;lt;http://www.w3.org/ns/shacl#&amp;gt; .
@prefix skos: &amp;lt;http://www.w3.org/2004/02/skos/core#&amp;gt; .

ex:ConceptShape
    a sh:NodeShape ;
    sh:targetClass skos:Concept ;
    sh:property [
        sh:path      skos:prefLabel ;
        sh:uniqueLang true ;
        sh:minCount  1 ;
        sh:message   &quot;Concept must have exactly one preferred label per language.&quot;
    ] ;
    sh:property [
        sh:path     skos:inScheme ;
        sh:minCount 1 ;
        sh:message  &quot;Concept must belong to at least one scheme.&quot;
    ] .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run SHACL validation as a gate in the concept scheme publishing pipeline. A scheme that fails validation does not get deployed.&lt;/p&gt;
&lt;h4 id=&quot;8-2-expose-concept-resolution-as-an-http-service&quot;&gt;8.2 Expose Concept Resolution as an HTTP Service&lt;/h4&gt;
&lt;p&gt;Concept resolution should be a cacheable, auditable HTTP operation — not an in-process lookup. Expose a lightweight service over your SPARQL endpoint that returns JSON-LD per concept URI. HTTP caching provides speed; the service boundary provides a single audit logging point.&lt;/p&gt;
&lt;h4 id=&quot;8-3-treat-resolution-failures-as-exceptions-not-nulls&quot;&gt;8.3 Treat Resolution Failures as Exceptions, Not Nulls&lt;/h4&gt;
&lt;p&gt;In data pipelines, a record that cannot be resolved to a concept URI belongs in a &lt;strong&gt;semantic exception queue&lt;/strong&gt; — not silently dropped or passed through with an empty field. Null concept fields in downstream storage are the origin of most production failures in systems claiming semantic precision.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;def resolve_concept(label: str, scheme_uri: str, lang: str = &quot;en&quot;) -&amp;gt; str | None:
    query = f&quot;&quot;&quot;
    SELECT ?concept WHERE {{
        ?concept skos:prefLabel|skos:altLabel &quot;{label}&quot;@{lang} ;
                 skos:inScheme &amp;lt;{scheme_uri}&amp;gt; .
    }} LIMIT 1
    &quot;&quot;&quot;
    result = sparql_endpoint.query(query)
    return result[0][&quot;concept&quot;] if result else None
    # None must route to an exception queue — never be stored as-is
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;8-4-where-llms-fit&quot;&gt;8.4 Where LLMs Fit&lt;/h4&gt;
&lt;p&gt;LLMs are probabilistic. SKOS is deterministic. Use the LLM only to produce a concept candidate, then hand off to SKOS resolution for everything after:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Free text → LLM extraction → concept candidate (label)
         → SKOS Resolution Service (label → URI, validation)
         → Canonical concept URI  [deterministic from here]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nothing downstream of the SKOS service ever processes LLM output directly.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;9-measuring-it-benchmarks-and-evaluation&quot;&gt;9. Measuring It: Benchmarks and Evaluation&lt;/h3&gt;
&lt;p&gt;A SKOS deployment functioning as infrastructure must be measurable. These are the minimum metrics that indicate whether determinism guarantees are being met:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Metric &lt;/th&gt;&lt;th&gt;Target&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Concept resolution latency (p99) &lt;/td&gt;&lt;td&gt;&amp;lt; 20ms cached / &amp;lt; 100ms uncached&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Preferred label uniqueness per language &lt;/td&gt;&lt;td&gt;100% — enforced by SHACL&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Orphan concepts (no &lt;code&gt;skos:broader&lt;/code&gt;, not a top concept) &lt;/td&gt;&lt;td&gt;&amp;lt; 1%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;URI dereferencability &lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Deprecated concepts with successor mapping &lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Instance data resolvable against pinned scheme version &lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;These are not aspirational. They are structural prerequisites. Any metric below threshold is a determinism violation that will surface as inconsistent downstream behavior — typically in a way that is hard to trace back to the semantic layer.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;10-conclusion&quot;&gt;10. Conclusion&lt;/h3&gt;
&lt;p&gt;SKOS is routinely dismissed as a cataloging tool — useful for librarians, irrelevant to production systems. That is a category error with real costs.&lt;/p&gt;
&lt;p&gt;The case here is structural. SKOS provides four things probabilistic systems do not: URI-stable concept identity, bounded scheme semantics, transitively inferrable hierarchies, and formally defined mapping contracts. These are precisely the primitives required for reproducible semantic decisions.&lt;/p&gt;
&lt;p&gt;The shift from annotation layer to operational infrastructure requires three commitments: route on URIs rather than strings, govern concept schemes as versioned contracts, and enforce the integrity conditions the spec leaves optional. Nothing about this requires new tooling — only a clearer understanding of what SKOS already provides, and the discipline to use it that way.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;11-references&quot;&gt;11. References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;W3C SKOS Reference&lt;/strong&gt; — &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/TR/skos-reference/&quot;&gt;https://www.w3.org/TR/skos-reference/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;W3C SKOS Primer&lt;/strong&gt; — &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/TR/skos-primer/&quot;&gt;https://www.w3.org/TR/skos-primer/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SHACL Specification&lt;/strong&gt; — &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/TR/shacl/&quot;&gt;https://www.w3.org/TR/shacl/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cool URIs for the Semantic Web&lt;/strong&gt; — &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/TR/cooluris/&quot;&gt;https://www.w3.org/TR/cooluris/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SPARQL 1.1 Query Language&lt;/strong&gt; — &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/TR/sparql11-query/&quot;&gt;https://www.w3.org/TR/sparql11-query/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dodds &amp;amp; Davis — &lt;em&gt;Linked Data Patterns&lt;/em&gt; (2012)&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Tutorials</category>
<guid isPermaLink="true">https://coderlegion.com/16748/skos-as-operational-infrastructure-for-deterministic-semantic-systems</guid>
<pubDate>Tue, 05 May 2026 10:58:43 +0000</pubDate>
</item>
</channel>
</rss>