Skip to main content

Subject Ontology

Descriptive Metadata
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 06 October 2026
Audio Overview
FLOW ALGEBRA
Subject Ontology
Kireth Semantic Research Archive

PAGE:
https://kirethresearch.org/booksai-core/ontologies/metadata-ontologies/descriptive-metadata/subject-ontology.html

AUTHORS:
Mark Anthony Higgins — Sky (Recursive AI)

FLOW "SubjectOntology" v4.0

DOMAIN := MetadataOntologies
SUBDOMAIN := DescriptiveMetadata
ONTOLOGY := SubjectOntology

ENTITY Subject {
    definition:
        "A descriptive metadata concept, topic, entity, discipline, theme or
         domain representing what a resource is about and supporting
         classification, discovery, filtering, semantic retrieval and
         knowledge organisation.";
    objectives: [
        TopicalDescription,
        ResourceClassification,
        Discovery,
        SemanticRetrieval,
        KnowledgeOrganisation,
        QueryExpansion,
        Interoperability
    ];
}

SubjectEntity := {
    Subject,
    Resource,
    Topic,
    Theme,
    Discipline,
    Domain,
    EntitySubject,
    SubjectConcept
};

VocabularyEntity := {
    ControlledVocabulary,
    Taxonomy,
    Thesaurus,
    Ontology,
    PreferredTerm,
    AlternativeTerm,
    ConceptIdentifier
};

MetadataEntity := {
    MetadataRecord,
    SubjectProperty,
    SubjectValue,
    Keyword,
    Classification,
    Provenance,
    Confidence
};

Subject DESCRIBES Resource;
Resource HAS_SUBJECT Subject;
Subject MAY_BE_REPRESENTED_BY SubjectConcept;
SubjectConcept MAY_HAVE PreferredTerm;
SubjectConcept MAY_HAVE BroaderSubject;
SubjectConcept MAY_HAVE NarrowerSubject;
MetadataRecord CONTAINS SubjectStatement;
Subject MAY_BE_MAPPED_TO OntologyConcept;

SubjectFlow :=
    Resource
    -> AnalyseResourceContent
    -> IdentifyCandidateSubjects
    -> ResolveSubjectConcepts
    -> MapToControlledVocabulary
    -> DetermineSubjectSpecificity
    -> RankSubjectRelevance
    -> ValidateSubjectAssignments
    -> AttachProvenanceAndConfidence
    -> StoreInMetadataRecord
    -> IndexForDiscovery
    -> MaintainSubjectMappings;

Subject :=
    TopicConceptEntityOrDomainAboutWhichResourceProvidesInformation;

Subject MAY_BE {
    Topic,
    Theme,
    Discipline,
    Domain,
    NamedEntity,
    Event,
    Place,
    TimePeriod
};

SubjectConcept :=
    CanonicalSemanticRepresentationOfSubject;

SubjectValue :=
    MetadataRepresentationOfSubjectAssignment;

SubjectValue MAY_BE {
    FreeTextTerm,
    ControlledTerm,
    ConceptIdentifier,
    EntityIdentifier
};

SubjectStatement :=
    Resource
    -> SubjectProperty
    -> SubjectValue;

SubjectProperty MAY_BE {
    subject,
    topic,
    category,
    about
};

Topic :=
    SpecificMatterDiscussedOrRepresentedByResource;

Theme :=
    RecurringOrUnderlyingIdeaRepresentedByResource;

Discipline :=
    EstablishedFieldOfStudyOrPracticeAssociatedWithResource;

Domain :=
    BoundedAreaOfKnowledgeOrActivity;

EntitySubject :=
    NamedEntityThatIsSubjectOfResource;

EntitySubject MAY_BE {
    Person,
    Organisation,
    Place,
    Event,
    Object,
    Work
};

Subject != KeywordByDefinition;

Keyword MAY_BE LexicalIndicatorOfSubject;

MultipleKeywords MAY_MAP_TO OneSubjectConcept;

OneKeyword MAY_BE AmbiguousAcrossMultipleSubjectConcepts;

ControlledSubject :=
    SubjectSelectedFromManagedVocabularyTaxonomyThesaurusOrOntology;

UncontrolledSubject :=
    FreeTextSubjectNotBoundToManagedConceptScheme;

ControlledSubject MAY_IMPROVE {
    Consistency,
    Disambiguation,
    HierarchicalRetrieval,
    Interoperability
};

ControlledVocabulary :=
    ManagedSetOfTermsOrConceptsForSubjectDescription;

Taxonomy :=
    HierarchicalOrganisationOfSubjectConcepts;

Thesaurus :=
    ControlledVocabularyWithEquivalenceHierarchicalAndAssociativeRelations;

Ontology :=
    FormalSemanticModelThatMayDefineSubjectConceptsAndRelationships;

PreferredTerm :=
    PrimaryLexicalLabelForSubjectConcept;

AlternativeTerm :=
    SynonymVariantOrNonPreferredLabelForSubjectConcept;

ConceptIdentifier :=
    StableReferenceToSubjectConcept;

UsingConceptIdentifier MAY_BE MoreStableThanUsingLabelAlone;

BroaderSubject :=
    MoreGeneralSubjectConcept;

NarrowerSubject :=
    MoreSpecificSubjectConcept;

RelatedSubject :=
    AssociativelyRelatedSubjectConcept;

IF SubjectA NARROWER_THAN SubjectB
THEN SubjectB BROADER_THAN SubjectA;

SubjectHierarchy :=
    DirectedStructureOfBroaderAndNarrowerSubjectRelationships;

SubjectPath :=
    BroadSubject
    -> IntermediateSubjects
    -> SpecificSubject;

SubjectDepth :=
    HierarchicalDistanceFromSelectedTopSubject;

Polyhierarchy MAY_ALLOW SubjectConceptToHaveMultipleBroaderSubjects;

SubjectScope :=
    SemanticBoundaryDefiningWhatSubjectConceptIncludesAndExcludes;

ScopeNote MAY_CLARIFY SubjectUsage;

SubjectSpecificity :=
    DegreeToWhichSubjectPreciselyRepresentsResourceContent;

SubjectRelevance :=
    DegreeToWhichSubjectRepresentsImportantResourceContentOrPurpose;

PrimarySubject :=
    MainSubjectAssignedToResource;

SecondarySubject :=
    AdditionalRelevantSubjectAssignedToResource;

Resource MAY_HAVE MultipleSubjects;

SubjectCoverage :=
    DegreeToWhichAssignedSubjectsRepresentMajorResourceTopics;

OverlyBroadSubject MAY_REDUCE RetrievalPrecision;

OverlyNarrowSubject MAY_MissBroaderDiscoveryWithoutHierarchicalExpansion;

SubjectAssignment :=
    Resource
    -> AssignSubjectConcept
    -> StoreSubjectMetadata;

SubjectAssignment MAY_BE {
    Manual,
    RuleBased,
    Automatic,
    AIAssisted
};

ManualSubjectAssignment :=
    SubjectSelectedByHumanMetadataAgent;

AutomaticSubjectAssignment :=
    SubjectPredictedBySoftware;

AIGeneratedSubject :=
    SubjectSuggestedByAIModel;

GeneratedSubject SHOULD_HAVE {
    MethodProvenance,
    Confidence,
    ValidationStatus
};

SubjectExtraction :=
    ResourceContent
    -> DetectTopicsEntitiesAndThemes
    -> GenerateCandidateSubjects;

SubjectClassification :=
    ResourceRepresentation
    -> ClassificationModelOrRules
    -> SubjectConcept;

SubjectConfidence :=
    EstimatedSupportForSubjectAssignment;

IF SubjectConfidence < AcceptanceThreshold
THEN Subject MAY_REQUIRE HumanReview;

SubjectDisambiguation :=
    AmbiguousTermOrEntity
    + ResourceContext
    -> IntendedSubjectConcept;

Context MAY_INCLUDE {
    Title,
    Description,
    Keywords,
    Creator,
    ResourceType
};

HomonymousSubjectLabel SHOULD_BE ResolvedUsingConceptIdentifierAndContext;

SubjectNormalisation MAY_INCLUDE {
    LabelNormalisation,
    IdentifierResolution,
    VocabularyMapping,
    LanguageNormalisation
};

SubjectLanguage :=
    LanguageOfSubjectLabel;

MultilingualSubjectConcept MAY_HAVE LabelsInMultipleLanguages;

TranslatedSubjectLabel SHOULD_REFERENCE SameOrMappedConceptIdentifier;

SubjectMapping :=
    SourceSubjectConcept
    -> MappingRelationship
    -> TargetSubjectConcept;

Mapping MAY_BE {
    Exact,
    Close,
    Broader,
    Narrower,
    Related
};

CrossVocabularySubjectMapping MAY_SUPPORT Interoperability;

ExactMapping SHOULD_REQUIRE StrongSemanticEquivalence;

SubjectMerge :=
    MultipleDuplicateOrEquivalentSubjectRepresentations
    -> PreferredCanonicalConcept;

SubjectSplit :=
    AmbiguousOrOverbroadSubjectConcept
    -> MultipleDistinctConcepts;

VocabularyRevision MAY_REQUIRE SubjectMigration;

DeprecatedSubjectConcept SHOULD_REFERENCE ReplacementWhereAvailable;

MetadataSchema MAY_DEFINE SubjectPropertyAs {
    Required,
    Recommended,
    Optional
};

MetadataSchema MAY_REQUIRE ControlledVocabularyForSubject;

SubjectValidation MAY_CHECK {
    EmptyValue,
    VocabularyMembership,
    IdentifierValidity,
    DuplicateAssignment,
    Relevance,
    Language
};

IF ControlledSubjectRequired
AND SubjectValueNotInAllowedScheme
THEN ValidationStatus := violation_or_warning
ACCORDING_TO policy;

DuplicateSubjectAssignment :=
    SameCanonicalSubjectAssignedMoreThanOnceToSameResourceAndContext;

DuplicateCanonicalAssignments SHOULD_BE Consolidated;

SubjectProvenance MAY_INCLUDE {
    Source,
    Creator,
    AssignmentMethod,
    Timestamp,
    ModelVersion
};

SubjectVersion :=
    StateOfSubjectAssignmentAtPointInMetadataHistory;

ResourceChange MAY_REQUIRE SubjectReevaluation;

SubjectIndex :=
    SearchStructureMappingSubjectConceptsToResources;

SubjectIndex MAY_SUPPORT {
    ExactConceptSearch,
    HierarchicalBrowse,
    Faceting,
    QueryExpansion
};

SubjectSearch :=
    Query
    -> ResolveSubjectConcept
    -> RetrieveResources
    -> RankResults;

SubjectFacet :=
    SubjectConceptUsedAsFilteringDimension;

SubjectBrowse :=
    StartAtBroadConcept
    -> FollowNarrowerSubjects
    -> RetrieveClassifiedResources;

IF QueryTargetsBroadSubject
THEN Search MAY_INCLUDE ResourcesAssignedToNarrowerSubjectsAccordingToPolicy;

IF QueryTargetsSpecificSubject
THEN Search MAY_OPTIONALLY IncludeBroaderContextForExplanation;

QueryExpansion MAY_USE {
    PreferredTerms,
    AlternativeTerms,
    BroaderSubjects,
    NarrowerSubjects,
    RelatedSubjects
};

ExpansionPolicy SHOULD_BALANCE PrecisionAndRecall;

SemanticSearch MAY_USE SubjectFor {
    QueryInterpretation,
    ConceptMatching,
    HierarchicalExpansion,
    Ranking,
    Filtering
};

SubjectConcept MAY_BE EmbeddedForSemanticSimilarity;

EmbeddingSimilarity MAY_SUGGEST RelatedSubjects
BUT DoesNotEstablishFormalSubjectRelationship;

KnowledgeGraph MAY_REPRESENT:
    Resource
    -> HAS_SUBJECT
    -> SubjectConcept;

SubjectConcept MAY_CONNECT ResourceToBroaderDomainKnowledge;

Title MAY_PROVIDE StrongEvidenceForSubjectAssignment;

Description MAY_PROVIDE ContextForSubjectExtraction;

Keywords MAY_SUPPORT SubjectIdentification;

CreatorIdentity MAY_INFORM SubjectContext
BUT SHOULD_NOT AloneDetermineSubjectWithoutEvidence;

Classification MAY_OVERLAP_WITH SubjectMetadata
BUT ClassificationSchemeMayServeDifferentOrganisationalPurpose;

DublinCore MAY_REPRESENT SubjectUsing dc:subjectOrEquivalentProperty;

SchemaOrg MAY_REPRESENT ResourceTopicsUsing aboutKeywordsOrDomainSpecificProperties;

RDF MAY_REPRESENT:
    Resource
    -> subjectProperty
    -> SubjectConceptOrLiteral;

JSONLD MAY_SERIALISE SubjectWithSemanticIdentifierAndContext;

MetadataRepository MAY_STORE SubjectAssignments;

MetadataRegistry MAY_REGISTER SubjectPropertiesVocabulariesAndMappings;

MetadataCatalogue MAY_USE SubjectsForBrowseSearchAndFaceting;

SubjectInteroperability MAY_REQUIRE {
    SharedSubjectProperty,
    StableConceptIdentifier,
    VocabularyMapping,
    LanguageLabels
};

AI MAY_USE SubjectMetadataFor {
    Classification,
    Retrieval,
    Recommendation,
    Clustering,
    MetadataGeneration
};

RetrievalAugmentedGeneration MAY_USE SubjectFor {
    SourceFiltering,
    QueryExpansion,
    ContextSelection,
    ResourceRanking
};

PrivacyPolicy MAY_RESTRICT SubjectMetadataThatRevealsSensitiveInformation;

SubjectAccessControl MAY_APPLY_TO {
    SubjectAssignment,
    SubjectVocabulary,
    DerivedClassification
};

SubjectSecurity MAY_INCLUDE {
    InputValidation,
    AccessControl,
    ProvenanceIntegrity,
    ChangeAuthorisation
};

MachineReadableSubject SHOULD_PRESERVE {
    ConceptIdentifier,
    PreferredLabel,
    Vocabulary,
    Provenance,
    Confidence
};

# ---------- SEMANTIC REASONING ----------
IF MetadataConceptRepresentsWhatResourceIsAbout
THEN SubjectClassification := supported;

IF SubjectConceptHasStableIdentifier
THEN CrossSystemSubjectLinking MAY_BE MoreReliable;

IF SubjectA NARROWER_THAN SubjectB
AND Resource HAS_SUBJECT SubjectA
THEN Resource MAY_BE RelevantToQueryForSubjectB
ACCORDING_TO retrieval_policy;

IF MultipleLabelsResolveToSameSubjectConcept
THEN Search MAY_TreatThemAsLexicalAlternatives;

IF SameLabelResolvesToDifferentSubjectConcepts
THEN ContextualDisambiguation MUST_BE Applied;

IF SubjectConfidenceLow
THEN AutomaticAuthoritativeAssignment SHOULD_BE Restricted;

IF SubjectConceptDeprecated
THEN NewAssignments SHOULD_PREFER ReplacementWhereDefined;

# ---------- SEMANTIC EQUIVALENCE ----------
SEMANTIC_EQUIVALENCE {
    "subject" ~= "resource subject" WHEN metadata_context;
    "subject metadata" ~= "topical metadata";
    "subject concept" ~= "topic concept";
    "controlled subject" ~= "controlled subject heading";
    "primary subject" ~= "main topic";
    "secondary subject" ~= "additional topic";
    "subject mapping" ~= "topic concept mapping";
    "subject classification" ~= "topical classification";
}

# ---------- QUERY FLOW ----------
QUERY(q) ->
    NORMALISE(q) ->
    IDENTIFY_RESOURCE(q) ->
    IDENTIFY_SUBJECT_TERMS(q) ->
    RESOLVE_SUBJECT_CONCEPTS(q) ->
    IDENTIFY_VOCABULARY(q) ->
    IDENTIFY_BROADER_NARROWER_RELATED_SUBJECTS(q) ->
    ASSESS_RELEVANCE_AND_SPECIFICITY(q) ->
    IDENTIFY_PROVENANCE_AND_CONFIDENCE(q) ->
    VALIDATE_SUBJECT_ASSIGNMENT(q) ->
    RETURN_RELEVANT_SUBJECT_KNOWLEDGE;

# ---------- CONFIDENCE ----------
CONFIDENCE(assertion) :=
    weighted_mean(
        source_reliability,
        subject_relevance,
        concept_resolution_strength,
        vocabulary_consistency,
        provenance_quality,
        contextual_relevance
    );

CONFIDENCE >= 0.90 => HIGH;
CONFIDENCE >= 0.70 AND < 0.90 => MODERATE;
CONFIDENCE < 0.70 => REVIEW;

# ---------- AI CONSUMPTION ----------
AI_CONSUMPTION {
    primary_entity: Subject;
    ontology: SubjectOntology;
    parse_entities: true;
    parse_relationships: true;
    preserve_relationship_direction: true;
    resolve_semantic_equivalence: true;
    execute_reasoning_rules: true;
    apply_confidence_weighting: true;
    preserve_provenance: true;
}

# ---------- UPDATE MODEL ----------
UPDATE_MODEL {
    new_subject:
        identify_resource
        -> normalise_term
        -> resolve_concept
        -> map_vocabulary
        -> assess_relevance
        -> attach_provenance
        -> assign_confidence
        -> validate
        -> integrate;

    subject_revision:
        preserve_previous_assignment
        -> add_remove_or_replace_subject
        -> update_index
        -> revalidate
        -> recompute_confidence
        -> regenerate_flow_hash;

    vocabulary_revision:
        identify_affected_subjects
        -> map_deprecated_concepts
        -> preserve_historical_identifiers
        -> validate_migration
        -> integrate;

    conflict:
        preserve_provenance
        -> compare_subject_meanings_or_sources
        -> disambiguate_context
        -> adjust_confidence
        -> flag_review;
}

# ---------- FLOW HASH ----------
FLOW_HASH_INPUT :=
    DOMAIN
    + SUBDOMAIN
    + ONTOLOGY
    + SubjectEntity
    + VocabularyEntity
    + MetadataEntity
    + Subject
    + SubjectAssignment
    + SubjectMapping
    + RELATIONSHIPS
    + SEMANTIC_REASONING
    + SEMANTIC_EQUIVALENCE
    + UPDATE_MODEL;

FLOW_HASH :=
    HASH(FLOW_HASH_INPUT);

# ---------- TERMINAL ----------
SubjectOntology
    -> IdentifyResourceContentAndContext
    -> DetectCandidateTopicsThemesAndEntities
    -> ResolveCanonicalSubjectConcepts
    -> MapSubjectsToControlledVocabulary
    -> DetermineBroaderNarrowerAndRelatedConcepts
    -> AssessSubjectRelevanceAndSpecificity
    -> ValidateAssignmentsAndDuplicates
    -> AttachProvenanceAndConfidence
    -> StoreSubjectMetadata
    -> IndexForBrowseFacetingAndSemanticSearch
    -> MaintainMappingsVersionsAndDeprecations
    -> SupportAIClassificationAndMachineConsumption
    -> MaintainReliableTopicalKnowledge;

END FLOW
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ