@prefix sr: <https://ontology.inferal.com/profiles/relay-advertising/microsoftads/search-reporting/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix ms: <https://relay.inferal.com/ontology/microsoftads/> .
<https://ontology.inferal.com/profiles/relay-advertising/microsoftads/search-reporting/> a owl:Ontology ; dcterms:title "Microsoft daily Search reporting evidence version 1" ; dcterms:description "Bounded portable Microsoft daily Search reporting; client delivery and engine acceptance remain separate." ; dcterms:accessRights <https://ontology.inferal.com/modules/publication-access/PublicAccess> ; dcterms:license <https://creativecommons.org/licenses/by/4.0/> ; dcterms:source <https://learn.microsoft.com/en-us/advertising/reporting-service/keywordperformancereportcolumn?view=bingads-13>, <https://learn.microsoft.com/en-us/advertising/reporting-service/searchqueryperformancereportcolumn?view=bingads-13> ; owl:versionInfo "1.0.0" ; vann:preferredNamespacePrefix "sr" ; vann:preferredNamespaceUri "https://ontology.inferal.com/profiles/relay-advertising/microsoftads/search-reporting/" .

sr:SearchReportDelivery a rdfs:Class ; rdfs:label "SearchReportDelivery" ; rdfs:comment "A caller-recorded downloaded Daily keyword or search-query report, with request time zone, returned rows, requested optional dimensions, capture time and the provider completeness flag. The flag describes this report request; it never establishes a complete search inventory." .
sr:AccountCurrencyEvidence a rdfs:Class ; rdfs:label "AccountCurrencyEvidence" ; rdfs:comment "A separate account currency assertion associated with one delivery and capture instant. Only matching account identity and delivery capture can qualify search-query money; unrelated accounts do not qualify it. Delivery-path origin and client-engine acceptance require the delivered client stream." .
sr:ReportObservation a rdfs:Class ; rdfs:label "ReportObservation" ; rdfs:comment "One source row in one downloaded delivery. Identity preserves the delivery and source-row IRI, including segmented rows sharing keyword/query IDs and date. This is neither configured entity state nor a campaign daily total." .
sr:KeywordReportObservation a rdfs:Class ; rdfs:label "KeywordReportObservation" ; rdfs:comment "A projected native keyword daily row with its account/campaign/ad-group/keyword identity and explicit returned dimensions. Currency is reported in the native keyword row." ; rdfs:subClassOf sr:ReportObservation .
sr:SearchQueryReportObservation a rdfs:Class ; rdfs:label "SearchQueryReportObservation" ; rdfs:comment "A projected native search-query daily row with returned query text and optional triggering IDs. Currency is absent from the provider row and remains unknown without matching separate evidence." ; rdfs:subClassOf sr:ReportObservation .
sr:KeywordReportObservation owl:disjointWith sr:SearchQueryReportObservation .
sr:sourceRow a rdf:Property ; rdfs:label "sourceRow" ; rdfs:comment "The exact native source-row IRI retained for audit and row identity." ; rdfs:range rdfs:Resource .
sr:delivery a rdf:Property ; rdfs:label "delivery" ; rdfs:comment "The downloaded delivery owning this observation or separate currency assertion." ; rdfs:range sr:SearchReportDelivery .
sr:row a rdf:Property ; rdfs:label "row" ; rdfs:comment "A returned native keyword or search-query row, owned by exactly one delivery in this qualification graph." ; rdfs:range rdfs:Resource .
sr:reportFamily a rdf:Property ; rdfs:label "reportFamily" ; rdfs:comment "Explicit keyword or search_query report family; rows must carry the corresponding native type." ; rdfs:range xsd:string .
sr:aggregation a rdf:Property ; rdfs:label "aggregation" ; rdfs:comment "Reported aggregation, restricted to Daily in this version; no campaign aggregation is inferred." ; rdfs:range xsd:string .
sr:requestTimeZone a rdf:Property ; rdfs:label "requestTimeZone" ; rdfs:comment "The retained request time-zone token. The reported TimePeriod is preserved without inventing an absolute UTC day." ; rdfs:range xsd:string .
sr:downloadedAt a rdf:Property ; rdfs:label "downloadedAt" ; rdfs:comment "Absolute delivery capture instant; it qualifies separate currency evidence and does not change the reporting date." ; rdfs:range xsd:dateTime .
sr:providerComplete a rdf:Property ; rdfs:label "providerComplete" ; rdfs:comment "Provider completeness flag for this report request, kept separately from returned row count and inventory completeness." ; rdfs:range xsd:boolean .
sr:requestedDimension a rdf:Property ; rdfs:label "requestedDimension" ; rdfs:comment "A requested optional segmentation column supported in this version: AdId, DeviceType, Network, Language, BidMatchType or DeliveredMatchType." ; rdfs:range xsd:string .
sr:observedAt a rdf:Property ; rdfs:label "observedAt" ; rdfs:comment "Absolute account currency capture instant, required to match the associated delivery when its account qualifies a row." ; rdfs:range xsd:dateTime .
sr:currencyEvidence a rdf:Property ; rdfs:label "currencyEvidence" ; rdfs:comment "The separate matching currency assertion actually used for a search-query observation." ; rdfs:range sr:AccountCurrencyEvidence .
sr:currencyState a rdf:Property ; rdfs:label "currencyState" ; rdfs:comment "reported for keyword currency, qualified-account-evidence for matching search-query evidence, or unknown. Unknown currency leaves monetary derived answers unbound." ; rdfs:range xsd:string .
sr:accountId a rdf:Property ; rdfs:label "accountId" ; rdfs:comment "Exact returned account identity, preserved beyond binary floating-point integer precision." ; rdfs:range xsd:long .
sr:campaignId a rdf:Property ; rdfs:label "campaignId" ; rdfs:comment "Exact returned campaign identity within the account; no configuration parent link is inferred." ; rdfs:range xsd:long .
sr:adGroupId a rdf:Property ; rdfs:label "adGroupId" ; rdfs:comment "Exact returned ad-group identity in account and campaign scope." ; rdfs:range xsd:long .
sr:date a rdf:Property ; rdfs:label "date" ; rdfs:comment "Native Daily TimePeriod calendar date, preserved as reported with separate request time zone." ; rdfs:range xsd:date .
sr:keywordId a rdf:Property ; rdfs:label "keywordId" ; rdfs:comment "Returned keyword identity; mandatory for keyword reports and optional for search-query reports." ; rdfs:range xsd:long .
sr:keyword a rdf:Property ; rdfs:label "keyword" ; rdfs:comment "Returned keyword text; text does not establish entity identity or current configuration." ; rdfs:range xsd:string .
sr:searchQuery a rdf:Property ; rdfs:label "searchQuery" ; rdfs:comment "Returned search query text; absent rows do not mean zero queries or a complete inventory." ; rdfs:range xsd:string .
sr:adId a rdf:Property ; rdfs:label "adId" ; rdfs:comment "Optional returned ad ID; requesting it can segment otherwise identical keyword/query rows." ; rdfs:range xsd:long .
sr:deviceType a rdf:Property ; rdfs:label "deviceType" ; rdfs:comment "Optional returned device segment, retained as an open provider token." ; rdfs:range xsd:string .
sr:network a rdf:Property ; rdfs:label "network" ; rdfs:comment "Optional returned network segment; future labels remain visible." ; rdfs:range xsd:string .
sr:language a rdf:Property ; rdfs:label "language" ; rdfs:comment "Optional returned publisher language segment, distinct from configured campaign languages." ; rdfs:range xsd:string .
sr:bidMatchType a rdf:Property ; rdfs:label "bidMatchType" ; rdfs:comment "Returned keyword bid match type; it differs from delivered match type." ; rdfs:range xsd:string .
sr:deliveredMatchType a rdf:Property ; rdfs:label "deliveredMatchType" ; rdfs:comment "Returned delivered match type, retained separately from the bid match type." ; rdfs:range xsd:string .
sr:currency a rdf:Property ; rdfs:label "currency" ; rdfs:comment "Three-letter reported or separately qualified account currency. Values in different currencies cannot be added." ; rdfs:range xsd:string .
sr:spend a rdf:Property ; rdfs:label "spend" ; rdfs:comment "Exact reported spend magnitude; monetary interpretation requires the observation currency." ; rdfs:range xsd:decimal .
sr:conversions a rdf:Property ; rdfs:label "conversions" ; rdfs:comment "Fractional standard-scope conversion credit excluding ExcludeFromBidding goals; absent remains unknown." ; rdfs:range xsd:decimal .
sr:revenue a rdf:Property ; rdfs:label "revenue" ; rdfs:comment "Exact standard-scope reported revenue magnitude in the account currency." ; rdfs:range xsd:decimal .
sr:allConversions a rdf:Property ; rdfs:label "allConversions" ; rdfs:comment "Fractional conversion credit including all goals regardless of ExcludeFromBidding." ; rdfs:range xsd:decimal .
sr:allRevenue a rdf:Property ; rdfs:label "allRevenue" ; rdfs:comment "Exact all-goal reported revenue magnitude, distinct from standard-scope revenue." ; rdfs:range xsd:decimal .
sr:clicks a rdf:Property ; rdfs:label "clicks" ; rdfs:comment "Nonnegative exact returned click count; missing is unknown rather than zero." ; rdfs:range xsd:long .
sr:impressions a rdf:Property ; rdfs:label "impressions" ; rdfs:comment "Nonnegative exact returned impression count; missing is unknown rather than zero." ; rdfs:range xsd:long .
sr:ctr a rdf:Property ; rdfs:label "ctr" ; rdfs:comment "Reported CTR percentage divided by 100 to a unitless ratio; it is not recomputed from absent counts." ; rdfs:range xsd:decimal .
sr:currentMaxCpc a rdf:Property ; rdfs:label "currentMaxCpc" ; rdfs:comment "Reported maximum CPC at report generation, distinct from configured BiddingScheme, historical day-long bid or auction price." ; rdfs:range xsd:decimal .
sr:reportedStrategy a rdf:Property ; rdfs:label "reportedStrategy" ; rdfs:comment "Reported strategy token, possibly inherited; it is not the current configured BiddingScheme." ; rdfs:range xsd:string .
sr:averageCpc a rdf:Property ; rdfs:label "averageCpc" ; rdfs:comment "Provider-reported average CPC magnitude; no rounding or recomputation is applied." ; rdfs:range xsd:decimal .
sr:reportedCpa a rdf:Property ; rdfs:label "reportedCpa" ; rdfs:comment "Provider-reported cost per conversion, retained separately from the query-derived standard-scope CPA." ; rdfs:range xsd:decimal .
sr:reportedRoas a rdf:Property ; rdfs:label "reportedRoas" ; rdfs:comment "Provider-reported return on ad spend, retained separately from the query-derived standard-scope ROAS." ; rdfs:range xsd:decimal .

# Publication classification agrees with the central catalog.
<https://ontology.inferal.com/profiles/relay-advertising/microsoftads/search-reporting/> a <https://ontology.inferal.com/modules/publication-access/PublicationManagedOntology> .
