@prefix sem: <https://ontology.inferal.com/profiles/relay-advertising/microsoftads/semantic-interpretation/> .
@prefix p: <https://ontology.inferal.com/profiles/relay-advertising/microsoftads/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix pubacc: <https://ontology.inferal.com/modules/publication-access/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

sem: a owl:Ontology, pubacc:PublicationManagedOntology ;
    dcterms:title "Microsoft Ads bounded semantic interpretation" ;
    dcterms:description "Source-preserving interpretation of captured campaign schedule minutes and ResponsiveSearch asset pin positions." ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    dcterms:accessRights pubacc:PublicAccess ; owl:versionInfo "0.1.0" ;
    owl:imports p: ;
    dcterms:source <https://learn.microsoft.com/en-us/advertising/campaign-management-service/minute?view=bingads-13>,
        <https://learn.microsoft.com/en-us/advertising/campaign-management-service/daytimecriterion?view=bingads-13>,
        <https://learn.microsoft.com/en-us/advertising/campaign-management-service/assetlink?view=bingads-13> ;
    vann:preferredNamespacePrefix "mssem" ; vann:preferredNamespaceUri "https://ontology.inferal.com/profiles/relay-advertising/microsoftads/semantic-interpretation/" ;
    rdfs:label "Microsoft Ads bounded semantic interpretation" ;
    rdfs:comment "An additive synthetic pilot. Native source facts remain unchanged. Qualified facts describe captured configuration, without current serving, effective inheritance, timezone conversion or complete inventory assertions." .

sem:EvidenceRecord a rdfs:Class ; rdfs:label "semantic pilot evidence record" ;
    rdfs:comment "Common identity-bearing record for a caller capture, derived interpretation or documented mapping-table entry. Specific roles and constraints are stated by subclasses and SHACL." .
sem:Capture a rdfs:Class ; rdfs:subClassOf sem:EvidenceRecord ; rdfs:label "interpretation input capture" ;
    rdfs:comment "Caller-owned links to one existing account snapshot and named native source. These links must be checked against a client capture; they are not Microsoft response fields or transport-success evidence." .
sem:ScheduleCapture a rdfs:Class ; rdfs:subClassOf sem:Capture ; rdfs:label "campaign schedule input capture" ;
    rdfs:comment "One named native DayTimeCriterion reached through an explicit biddable campaign criterion in a captured account/campaign context. Ad-group inheritance is outside the pilot." .
sem:PinCapture a rdfs:Class ; rdfs:subClassOf sem:Capture ; rdfs:label "RSA asset pin input capture" ;
    rdfs:comment "One named returned AssetLink reached through exactly one captured RSA headline or description relationship." .
sem:Interpretation a rdfs:Class ; rdfs:subClassOf prov:Entity, sem:EvidenceRecord ; rdfs:label "source-preserving interpretation" ;
    rdfs:comment "A mapping-owned result whose identity includes its input capture and version. Raw source literals, source identity, account context and capture instant remain available alongside derived facts." .
sem:ScheduleInterpretation a rdfs:Class ; rdfs:subClassOf sem:Interpretation ; rdfs:label "schedule clock interpretation" ;
    rdfs:comment "Same-day nominal local clock coordinates for captured campaign configuration. A missing, unknown or reversed window produces no start/end coordinate; coordinates are not absolute instants or live eligibility." .
sem:PinInterpretation a rdfs:Class ; rdfs:subClassOf sem:Interpretation ; rdfs:label "asset pin interpretation" ;
    rdfs:comment "The captured RSA component membership and any compatible explicitly whitelisted pin role/position. Missing source fields never imply an unpinned asset." .
sem:MinuteMapping a rdfs:Class ; rdfs:subClassOf sem:EvidenceRecord ; rdfs:label "documented minute mapping" ;
    rdfs:comment "A declarative numeric interpretation of one verified native Minute concept. Native model-scoped predicates must name that concept's code list." .
sem:PinMapping a rdfs:Class ; rdfs:subClassOf sem:EvidenceRecord ; rdfs:label "documented pin mapping" ;
    rdfs:comment "A finite exact token-to-role/position table derived from the AssetLink contract; no generic string parser or inferred provider enum is used." .

sem:sourceSnapshot a rdf:Property ; rdfs:label "source account snapshot" ; rdfs:comment "The explicit existing account snapshot anchoring source identity and capture time." ; rdfs:range p:AccountSnapshot .
sem:sourceRecord a rdf:Property ; rdfs:label "named native source record" ; rdfs:comment "The original native DayTimeCriterion or AssetLink; no native properties are rewritten." .
sem:sourceCriterion a rdf:Property ; rdfs:label "native enclosing campaign criterion" ; rdfs:comment "The biddable campaign criterion whose native Criterion relationship identifies this schedule source." .
sem:sourceCampaign a rdf:Property ; rdfs:label "native source campaign" ; rdfs:comment "The campaign explicitly represented in the same snapshot and identified by the enclosing criterion's CampaignId." .
sem:sourceAd a rdf:Property ; rdfs:label "native source RSA" ; rdfs:comment "The RSA explicitly represented in the snapshot and carrying this AssetLink as a headline or description." .
sem:sourceCapture a rdf:Property ; rdfs:label "interpretation source capture" ; rdfs:comment "The caller-owned input capture that scopes this versioned interpretation." ; rdfs:range sem:Capture .
sem:accountId a rdf:Property ; rdfs:label "captured account identifier" ; rdfs:comment "The exact positive native long identifier from the explicitly linked account snapshot." ; rdfs:range xsd:long .
sem:ownerId a rdf:Property ; rdfs:label "captured owner identifier" ; rdfs:comment "The exact campaign ID for a schedule or RSA ID for an asset pin, qualified by account and capture identity." ; rdfs:range xsd:long .
sem:observedAt a rdf:Property ; rdfs:label "capture instant" ; rdfs:comment "The original zoned snapshot literal, not a schedule date or inferred historical validity interval." ; rdfs:range xsd:dateTime .
sem:disposition a rdf:Property ; rdfs:label "interpretation disposition" ; rdfs:comment "Explicit interpreted, missing-evidence, outside-same-day-scope, incompatible-pin-role, unrecognized-pin or explicit-empty-pin outcome. An unresolved outcome supplies no guessed derived values." ; rdfs:range xsd:string .
sem:rawDay a rdf:Property ; rdfs:label "raw native weekday" ; rdfs:comment "The exact captured Day literal, if present." ; rdfs:range xsd:string .
sem:rawFromMinute a rdf:Property ; rdfs:label "raw starting minute" ; rdfs:comment "The exact captured FromMinute literal, if present." ; rdfs:range xsd:string .
sem:rawToMinute a rdf:Property ; rdfs:label "raw ending minute" ; rdfs:comment "The exact captured ToMinute literal, if present." ; rdfs:range xsd:string .
sem:rawFromHour a rdf:Property ; rdfs:label "raw starting hour" ; rdfs:comment "The original native FromHour integer, if present." ; rdfs:range xsd:int .
sem:rawToHour a rdf:Property ; rdfs:label "raw ending hour" ; rdfs:comment "The original native ToHour integer, if present." ; rdfs:range xsd:int .
sem:dayConcept a rdf:Property ; rdfs:label "native weekday concept" ; rdfs:comment "The verified Day concept reached through the source predicate's explicit code list and exact notation." ; rdfs:range skos:Concept .
sem:fromMinuteConcept a rdf:Property ; rdfs:label "native starting-minute concept" ; rdfs:comment "The verified Minute concept reached through FromMinute's model-scoped code list and exact notation." ; rdfs:range skos:Concept .
sem:toMinuteConcept a rdf:Property ; rdfs:label "native ending-minute concept" ; rdfs:comment "The verified Minute concept reached through ToMinute's model-scoped code list and exact notation." ; rdfs:range skos:Concept .
sem:startMinuteOfDay a rdf:Property ; rdfs:label "nominal starting minute of day" ; rdfs:comment "60 times captured FromHour plus the documented numeric minute, emitted only for a complete strictly increasing same-day window." ; rdfs:range xsd:integer .
sem:endMinuteOfDay a rdf:Property ; rdfs:label "nominal ending minute of day" ; rdfs:comment "60 times captured ToHour plus the documented numeric minute, up to 1440. No timezone conversion, endpoint-inclusion rule or effective scheduling inheritance follows." ; rdfs:range xsd:integer .
sem:rawPin a rdf:Property ; rdfs:label "raw native pin token" ; rdfs:comment "The original PinnedField literal, including explicit empty and unrecognized strings. Absence remains absent." ; rdfs:range xsd:string .
sem:assetRole a rdf:Property ; rdfs:label "captured RSA component role" ; rdfs:comment "Headline or description according to the actual source relationship, independently of the pin token." ; rdfs:range skos:Concept .
sem:pinRole a rdf:Property ; rdfs:label "interpreted pin component role" ; rdfs:comment "The whitelisted pin role, emitted only when it agrees with the captured RSA component membership." ; rdfs:range skos:Concept .
sem:position a rdf:Property ; rdfs:label "interpreted pin position" ; rdfs:comment "A positive integer position supplied by the exact declared pin table, without lexical suffix parsing." ; rdfs:range xsd:integer .
sem:nativeConcept a rdf:Property ; rdfs:label "mapped native enum concept" ; rdfs:comment "A member read from the vendored native ontology, not minted from an unchecked token." ; rdfs:range skos:Concept .
sem:minuteValue a rdf:Property ; rdfs:label "documented numeric minute" ; rdfs:comment "The integer 0, 15, 30 or 45 assigned by the reviewed minute table." ; rdfs:range xsd:integer .
sem:rawToken a rdf:Property ; rdfs:label "exact mapping token" ; rdfs:comment "The exact native pin token accepted by one mapping table entry." ; rdfs:range xsd:string .

sem:assetRoleScheme a skos:ConceptScheme ; rdfs:label "captured RSA component roles" ; rdfs:comment "Roles supplied by original RSA headline and description relationships." .
sem:headline a skos:Concept ; skos:inScheme sem:assetRoleScheme ; rdfs:label "headline role" ; rdfs:comment "An AssetLink carried by the RSA Headlines relationship." .
sem:description a skos:Concept ; skos:inScheme sem:assetRoleScheme ; rdfs:label "description role" ; rdfs:comment "An AssetLink carried by the RSA Descriptions relationship." .

# Common paths intentionally have one broad evidence-record domain; declaring
# Capture and Interpretation as separate domains would infer their conjunction.
# SHACL determines the applicable source, output and table roles.
sem:sourceSnapshot rdfs:domain sem:EvidenceRecord .
sem:sourceRecord rdfs:domain sem:EvidenceRecord ; rdfs:range rdfs:Resource .
sem:sourceCriterion rdfs:domain sem:ScheduleCapture ; rdfs:range rdfs:Resource .
sem:sourceCampaign rdfs:domain sem:ScheduleCapture ; rdfs:range rdfs:Resource .
sem:sourceAd rdfs:domain sem:PinCapture ; rdfs:range rdfs:Resource .
sem:sourceCapture rdfs:domain sem:Interpretation .
sem:accountId rdfs:domain sem:Interpretation .
sem:ownerId rdfs:domain sem:Interpretation .
sem:observedAt rdfs:domain sem:Interpretation .
sem:disposition rdfs:domain sem:Interpretation .
sem:rawDay rdfs:domain sem:ScheduleInterpretation .
sem:rawFromMinute rdfs:domain sem:ScheduleInterpretation .
sem:rawToMinute rdfs:domain sem:ScheduleInterpretation .
sem:rawFromHour rdfs:domain sem:ScheduleInterpretation .
sem:rawToHour rdfs:domain sem:ScheduleInterpretation .
sem:dayConcept rdfs:domain sem:ScheduleInterpretation .
sem:fromMinuteConcept rdfs:domain sem:ScheduleInterpretation .
sem:toMinuteConcept rdfs:domain sem:ScheduleInterpretation .
sem:startMinuteOfDay rdfs:domain sem:ScheduleInterpretation .
sem:endMinuteOfDay rdfs:domain sem:ScheduleInterpretation .
sem:rawPin rdfs:domain sem:PinInterpretation .
sem:assetRole rdfs:domain sem:PinInterpretation .
sem:pinRole rdfs:domain sem:EvidenceRecord .
sem:position rdfs:domain sem:EvidenceRecord .
sem:nativeConcept rdfs:domain sem:MinuteMapping .
sem:minuteValue rdfs:domain sem:MinuteMapping .
sem:rawToken rdfs:domain sem:PinMapping .
