@prefix srv:   <https://w3id.org/skg-if/extension/srv/ontology/> .
@prefix skg:   <https://w3id.org/skg-if/ontology/> .
@prefix schema: <https://schema.org/> .
@prefix dcat:  <http://www.w3.org/ns/dcat#> .
@prefix bido:  <http://purl.org/spar/bido/> .
@prefix c4o:   <http://purl.org/spar/c4o/> .
@prefix cito:  <http://purl.org/spar/cito/> .
@prefix cv:    <http://rdfs.org/resume-rdf/> .
@prefix datacite: <http://purl.org/spar/datacite/> .
@prefix dc:    <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix doco:  <http://purl.org/spar/doco/> .
@prefix fabio: <http://purl.org/spar/fabio/> .
@prefix frapo: <http://purl.org/spar/frapo/> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix frbr:  <http://purl.org/vocab/frbr/core#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix pro:   <http://purl.org/spar/pro/> .
@prefix pso:   <http://purl.org/spar/pso/> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix scoro: <http://purl.org/spar/scoro/> .
@prefix skos:  <http://www.w3.org/2004/02/skos/core#> .
@prefix tvc:   <http://www.essepuntato.it/2012/04/tvc/> .
@prefix vann:  <http://purl.org/vocab/vann/> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix lvont: <http://lexvo.org/ontology#> .

############################
# Annotation properties
############################

dc:date a owl:AnnotationProperty .

dc:description a owl:AnnotationProperty .

dc:rights a owl:AnnotationProperty .

dc:title a owl:AnnotationProperty .

vann:preferredNamespacePrefix a owl:AnnotationProperty .

vann:preferredNamespaceUri a owl:AnnotationProperty .

############################
# Reused Classes
############################

# ── SKG-IF Aliases ──────────────────────────────────────────────────────────────────────────────
# The SKG-IF core ontology uses FaBiO class names (fabio:Work, fabio:ExpressionCollection) for
# research products and venues. These names originate from the bibliographic/publishing domain
# and feel unnatural when modelling services and their relationships to research outputs or
# catalogues. The aliases below are more descriptive in a Service ontology context.
# Both names are fully interchangeable for OWL reasoning via owl:equivalentClass.

skg:research_product a owl:Class ;
    owl:equivalentClass fabio:Work ;
    rdfs:label "skg:research_product" ;
    rdfs:comment "SKG-IF alias for fabio:Work. In a Service context 'research product' better expresses the intent: any scholarly output (software, dataset, publication, workflow) that a service deploys or relates to. The core JSON-LD context maps this as \"product\": \"fabio:Work\"." ;
    rdfs:isDefinedBy srv: .

skg:Venue a owl:Class ;
    owl:equivalentClass fabio:ExpressionCollection ;
    rdfs:label "skg:Venue" ;
    rdfs:comment "SKG-IF alias for fabio:ExpressionCollection. In a Service context 'Venue' better expresses the intent: a portal, catalogue, or registry through which a service is advertised and accessible. The core JSON-LD context maps this as \"venue\": \"fabio:ExpressionCollection\"." ;
    rdfs:isDefinedBy srv: .

# ────────────────────────────────────────────────────────────────────────────────────────────────

datacite:IdentifierScheme a owl:Class ;
    rdfs:label "datacite:IdentifierScheme" ;
    rdfs:comment "No property list: instances are remote DataCite scheme IRIs; SHACL cannot validate remote vocabulary membership." ;
    rdfs:isDefinedBy datacite: .

dcterms:Standard a owl:Class ;
    rdfs:label "dcterms:Standard" ;
    dc:description """The properties that can be used with this class are:

* skos:prefLabel -[0..N]-> rdfs:Literal""" ;
    rdfs:isDefinedBy dcterms: .

fabio:SubjectTerm a owl:Class ;
    rdfs:label "fabio:SubjectTerm (SKG-IF labels: Topic)" ;
    dc:description """The properties that can be used with this class are:
* skos:prefLabel -[0..N]-> rdfs:Literal
* skos:inScheme -[0..1]-> skos:ConceptScheme""" ;
    rdfs:isDefinedBy fabio: .

bido:BibliometricDataInTime a owl:Class ;
    rdfs:label "bido:BibliometricDataInTime" ;
    dc:description """The properties that can be used with this class are:
* bido:withBibliometricData -[1]-> fabio:SubjectTerm""" ;
    rdfs:isDefinedBy bido: .

fabio:Software a owl:Class ;
    rdfs:label "fabio:Software (SKG-IF labels: software)" ;
    owl:equivalentClass fabio:ComputerProgram ;
    rdfs:comment "A bibliographic class for software; equivalent to fabio:ComputerProgram. Its inherited properties (from frbr:Endeavour) are about identifying and citing software (DOI, handle, version, date), not describing its technical characteristics." ;
    rdfs:isDefinedBy fabio: .

fabio:Work a owl:Class ;
    rdfs:label "fabio:Work (SKG-IF labels: any)" ;
    rdfs:isDefinedBy fabio: .

pro:Role a owl:Class ;
    rdfs:label "pro:Role" ;
    rdfs:isDefinedBy pro: .

skos:Concept a owl:Class ;
    rdfs:label "skos:Concept" ;
    rdfs:comment "No property list: instances are remote SKOS concept IRIs; SHACL cannot validate remote vocabulary membership." ;
    rdfs:isDefinedBy skos: .

skos:ConceptScheme a owl:Class ;
    rdfs:label "skos:ConceptScheme" ;
    rdfs:comment "No property list: instances are remote SKOS concept scheme IRIs; SHACL cannot validate remote vocabulary membership." ;
    rdfs:isDefinedBy skos: .


############################
# Reused Properties
############################

skos:inScheme a owl:ObjectProperty ;
    rdfs:label "skos:inScheme (SKG-IF labels: defined_in)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* skos:Concept

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* skos:ConceptScheme""" ;
    rdfs:comment "The classification scheme or vocabulary that a Topic term belongs to." ;
    rdfs:domain skos:Concept ;
    rdfs:range skos:ConceptScheme ;
    rdfs:isDefinedBy skos: .

dcat:endpointURL a owl:ObjectProperty ;
    rdfs:label "endpoint URL" ;
    rdfs:domain srv:APIProfile ;
    rdfs:range rdfs:Resource ;
    rdfs:isDefinedBy dcat: .

schema:url a owl:ObjectProperty ;
    rdfs:label "schema:url (SKG-IF labels: api_specification_url)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:APIProfile

In SKG-IF, it is used to link to the URL(s) of the API specification document(s) (range):
* foaf:Document""" ;
    rdfs:domain srv:APIProfile ;
    rdfs:range foaf:Document ;
    rdfs:isDefinedBy schema: .

dcterms:conformsTo a owl:ObjectProperty ;
    rdfs:label "dcterms:conformsTo (SKG-IF labels: conformsTo)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):

* srv:Service

In SKG-IF, it is used to link a Service to an APIProfile instance describing endpoint and API specifications.
* srv:APIProfile""" ;
    rdfs:domain srv:Service ;
    rdfs:range srv:APIProfile ;
    rdfs:isDefinedBy dcterms: .

dcterms:description a owl:DatatypeProperty ;
    rdfs:label "dcterms:description (SKG-IF labels: description)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following data types (range):
* xsd:string""" ;
    rdfs:domain srv:Service ;
    rdfs:comment "Describe the type of Service and its function." ;
    rdfs:isDefinedBy dcterms: .

dcterms:relation a owl:ObjectProperty ;
    rdfs:label "dcterms:relation (SKG-IF labels: relevant_organisations)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service
* fabio:Work

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* foaf:Organization""" ;
    rdfs:comment """Generic queryable index of all organisations associated with a Service. The specific properties srv:hasHostingOrganisation, srv:hasHostingLegalEntity, and srv:isPartOfResearchInfrastructure are semantically narrower and are intended to be declared rdfs:subPropertyOf dcterms:relation once the ontology is finalised. Until those subproperty axioms are added, data producers must explicitly copy the local_identifier of each organisation referenced in those specific properties into this field, so that generic organisation queries against relevant_organisations remain complete.""" ;
    rdfs:isDefinedBy dcterms: .

dcterms:requires a owl:ObjectProperty ;
    rdfs:label "dcterms:requires (SKG-IF labels: requires)" ;
    rdfs:isDefinedBy dcterms: .

cito:isCitedBy a owl:ObjectProperty ;
    rdfs:label "cito:isCitedBy (SKG-IF labels: is_cited_by)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* skg:research_product""" ;
    rdfs:comment "A research product (e.g. a paper) that cites or mentions this service." ;
    rdfs:domain srv:Service ;
    rdfs:range skg:research_product ;
    rdfs:isDefinedBy cito: .

cito:isDocumentedBy a owl:ObjectProperty ;
    rdfs:label "cito:isDocumentedBy (SKG-IF labels: is_documented_by)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* skg:research_product""" ;
    rdfs:comment "A research product (e.g. a paper or report) that documents this service." ;
    rdfs:domain srv:Service ;
    rdfs:range skg:research_product ;
    rdfs:isDefinedBy cito: .

bido:holdsBibliometricDataInTime a owl:ObjectProperty ;
    rdfs:label "bido:holdsBibliometricDataInTime (SKG-IF labels: topics)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* fabio:Work
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* bido:BibliometricDataInTime""" ;
    rdfs:comment """The core SKG-IF ontology restricts this property's domain to fabio:Work (research products).
This entry extends effective use to srv:Service, following the same pragmatic usage already present
in all 120+ ext-srv example files.
NOTE: The full BIDO structure (bido:holdsBibliometricDataInTime → bido:BibliometricDataInTime →
bido:withBibliometricData → fabio:SubjectTerm) is overkill for Service topic classification.
The bido:BibliometricDataInTime wrapper exists to carry provenance (trust scores from multiple
inference systems) and temporal tracking — neither of which applies to services, where topics
are asserted directly by the service maintainer. Kept for consistency with the core inter-entity
relation pattern between entities and Topic entities (both must resolve via the same local_identifier).
TODO: Propose to the core team (skg-if/data-model) that bido:holdsBibliometricDataInTime be
broadened to a general cross-entity alias not restricted to fabio:Work — topics are equally
applicable to Services, Venues, Data Sources, etc. Consider also whether a simpler cross-entity
topics relation (without the BIDO provenance wrapper) would better serve non-bibliometric entities.""" ;
    rdfs:domain srv:Service ;
    rdfs:isDefinedBy bido: .

bido:withBibliometricData a owl:ObjectProperty ;
    rdfs:label "bido:withBibliometricData (SKG-IF labels: term)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* bido:BibliometricDataInTime

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* fabio:SubjectTerm""" ;
    rdfs:comment "The identifier of a Topic relevant for the Service." ;
    rdfs:domain bido:BibliometricDataInTime ;
    rdfs:range fabio:SubjectTerm ;
    rdfs:isDefinedBy bido: .

dcterms:subject a owl:ObjectProperty ;
    rdfs:label "dcterms:subject (SKG-IF labels: disciplines)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* dcat:DataService
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* owl:Thing""" ;
    rdfs:comment "The disciplines for which a Service, Data source is dedicated. The disciplines must be specified using the Library of Congress Classification codes, available at https://id.loc.gov/authorities/classification (e.g. `PA3000-PA3049` for classical literature). In case a Data source is discipline agnostic, the string `all` should be specified." ;
    rdfs:isDefinedBy dcterms: .

foaf:name a owl:DatatypeProperty ;
    rdfs:label "foaf:name (SKG-IF labels: name)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following data types (range):
* rdfs:Literal""" ;
    rdfs:comment "The canonical name of the service." ;
    rdfs:domain srv:Service ;
    rdfs:range rdfs:Literal ;
    rdfs:isDefinedBy foaf: .

schema:keyword a owl:DatatypeProperty ;
    rdfs:label "schema:keyword (SKG-IF labels: srv_keywords)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following data types (range):
* xsd:string""" ;
    rdfs:comment "Keywords relevant for service discovery. Values may be simple strings or concept URIs." ;
    rdfs:domain srv:Service ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy schema: .

foaf:homepage a owl:ObjectProperty ;
    rdfs:label "foaf:homepage (SKG-IF labels: website)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* foaf:Document""" ;
    rdfs:isDefinedBy foaf: .

skos:inScheme a owl:ObjectProperty ;
    rdfs:label "skos:inScheme (SKG-IF labels: defined_in)" ;
    rdfs:isDefinedBy skos: .

skos:prefLabel a owl:DatatypeProperty ;
    rdfs:label "skos:prefLabel (SKG-IF labels: labels)" ;
    rdfs:isDefinedBy skos: .

skos:altLabel a owl:DatatypeProperty ;
    rdfs:label "skos:altLabel (SKG-IF labels: other_names)" ;
    rdfs:isDefinedBy skos: .

############################
# SRV Extension Properties
############################

srv:audienceJurisdiction a owl:DatatypeProperty ;
    rdfs:label "srv:audienceJurisdiction (SKG-IF labels: srv_audience_byjurisdiction)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following data types (range):
* xsd:string""" ;
    rdfs:comment "The type of the audience based on the Jurisdiction vocabulary: pool of users the Service is intended to serve (i.e., either Global, Institution, National, or Regional aka multiple countries, from https://zenodo.org/records/15516020)." ;
    rdfs:domain srv:Service ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy srv: .

srv:isDeploymentOf a owl:ObjectProperty ;
    rdfs:label "srv:isDeploymentOf (SKG-IF labels: srv_deployment_of)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service
        
In SKG-IF, it is used to link to entities belonging to the following classes (range):
* skg:research_product (type software)
* fabio:Software

Plain string values are treated as local_identifier cross-references to skg:research_product (type software) in the SKG-IF graph.""" ;
    rdfs:domain srv:Service ;
    rdfs:range [
       a owl:Class ;
       owl:unionOf ( fabio:Software skg:research_product)
    ] ;
    rdfs:comment "A identifier for the software or software research product." ;
    rdfs:isDefinedBy srv: .

srv:geographicalAvailability a owl:ObjectProperty ;
    rdfs:subPropertyOf dcterms:scope ;
    rdfs:label "srv:geographicalAvailability (SKG-IF labels: srv_availability_geographic)" ;
    rdfs:range owl:Thing ;   # intentionally unconstrained
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to indicate geographic & administrative areas from  https://vocabs.sshopencloud.eu/browse/eosc-geographical-availability/en/""" ;
    rdfs:domain srv:Service ;
    rdfs:isDefinedBy srv: .


srv:hasVenue a owl:ObjectProperty ;
    rdfs:label "srv:hasVenue (SKG-IF labels: srv_venues)" ;
    rdfs:domain srv:Service ;
    rdfs:range skg:Venue ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* skg:Venue (type: srv_portal)""" ;
    rdfs:comment "Links a Service to the portals or catalogues through which it is advertised and accessible." ;
    rdfs:isDefinedBy srv: .

srv:invocationType a owl:ObjectProperty ;
    rdfs:label "srv:invocationType (SKG-IF labels: srv_invocation_type)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to indicate the method of service invocation using values from the vocabulary (https://vocabs.sshopencloud.eu/vocabularies/invocation-type/)""" ;
    rdfs:domain srv:Service ;
    rdfs:range skos:Concept ;
    rdfs:isDefinedBy srv: .

srv:eoscLifeCycleStatus a owl:ObjectProperty ;
    rdfs:label "srv:eoscLifeCycleStatus (SKG-IF labels: srv_life_cycle_status)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to indicate the maturity of the Service using values from the vocabulary (https://vocabs.sshopencloud.eu/vocabularies/eosc-life-cycle-status/)""" ;
    rdfs:domain srv:Service ;
    rdfs:range skos:Concept ;
    rdfs:isDefinedBy srv: .


srv:intendedAudienceRole a owl:ObjectProperty ;
    rdfs:label "srv:intendedAudienceRole (SKG-IF labels: srv_audience_byrole)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to indicate audience roles from (https://vocabs.sshopencloud.eu/vocabularies/sshoc-audience/audienceScheme)""" ;
    rdfs:domain srv:Service ;
    rdfs:range skos:Concept ;
    rdfs:isDefinedBy srv: .

srv:relatedResearchProduct a owl:ObjectProperty ;
    rdfs:label "srv:relatedResearchProduct (SKG-IF labels: related_products)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link a Service to one or more research products 
(e.g. software, datasets, workflows, publications) that are conceptually 
related but not necessarily deployed by the service.""" ;
    rdfs:comment "Links a Service to one or more related SKG-IF research products (e.g., software, datasets, workflows). Complements `srv:isDeploymentOf` (software actually deployed)." ;
    rdfs:domain srv:Service ;
    rdfs:range skg:research_product ;
    rdfs:isDefinedBy srv: .

srv:supportedLanguage a owl:ObjectProperty ;
    rdfs:label "srv:supportedLanguage (SKG-IF labels: srv_supported_language)" ;
    dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service
        
In SKG-IF, it is used to indicate the languages (identifiers)the Service can process (range):
* lvont:Language""" ;
    rdfs:domain srv:Service ;
    rdfs:range lvont:Language ;
    rdfs:isDefinedBy srv: .

#not used for now
schema:provider a owl:ObjectProperty ;
    rdfs:domain srv:Service ;
    rdfs:range srv:FacilityPortal .


############################
# SRV Extension Classes
############################

srv:APIProfile a owl:Class ;
    rdfs:label "API Profile" ;
    dc:description """A concrete API profile or specification that pairs service endpoints with (possibly) several API standards. The properties that can be used with this class are:
* dcat:endpointURL -[1]-> rdfs:Resource
* schema:url -[0..N]-> foaf:Document """ ;

    rdfs:subClassOf dcterms:Standard ;
    # Require that instances have an API endpoint; spec document URL is optional
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty dcat:endpointURL ;
        owl:cardinality "1"^^xsd:nonNegativeInteger
    ] ;
    rdfs:isDefinedBy srv: .

srv:FacilityPortal a owl:Class ;
    rdfs:label "Facility Portal" ;
    dc:description """The properties that can be used with this class are:
* schema:provider -[1]-> foaf:Organization
* skos:prefLabel -[1..N]-> rdfs:Literal
* skos:altLabel -[0..N]-> rdfs:Literal
""" ;
    rdfs:comment "organizational facility that operates services and provides portal access to them" ;
    rdfs:subClassOf schema:WebSite , foaf:Organization, dcat:Catalog ;
    # Require that instances have a API endpoint and a spec document
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty schema:provider ;
        owl:allValuesFrom foaf:Organization
    ] ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onProperty schema:provider ;
        owl:minCardinality "1"^^xsd:nonNegativeInteger
    ] .

#
# special types / concepts for Service ontology    
#
# additional organisation types should be provided for modelling support and operating services
# archive , company , education , facility , government , healthcare , nonprofit , funder , research , unspecified 
# with types: infrastructure, hostingLegalEntity ( see also EOSC profiles, use legal-entity names)
# there seems no problem modeling a tool/service(s) as organisation ie. frapo defines facility organisation type as 
# "A place or installation built or designed to serve a specific function or provide a specific service
# 
# portal -> dcat:Catalog ( lacking supporting facilities and expertise offering)
# hosting-legal-entity/provider/operator -> eosc-profiles (v5) hostingLegalEntity
# research-infrastructure -> eosc-profiles (v5) mentioned 
# see https://eosc-provider-profile.readthedocs.io/en/5.0/elements.html
# unfortunately eosc profiles currently not yet eosc profile available as a rdf ontology
#
frapo:Facility a owl:Class ;
    rdfs:label "facility"@en ;
    rdfs:comment "A place or installation built or designed to serve a specific function or provide a specific service, for example an animal breeding centre, a DNA sequencing facility or a confocal imaging laboratory."@en ;
    rdfs:subClassOf frapo:InfrastructureEntity .

srv:ResearchInfrastructure a owl:Class ;
    rdfs:label "research infrastructure" ;
    rdfs:comment "organisation that provides facilities, resources and services for the research communities to conduct research."@en .
srv:isPartOfResearchInfrastructure a owl:ObjectProperty ;
   rdfs:label "srv:isPartOfResearchInfrastructure (SKG-IF labels: srv_has_research_infrastructure)"@en ;
   rdfs:domain srv:Service ;
   rdfs:range foaf:Organization ;
   dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* foaf:Organization (type: research_infrastructure)""" ;
   rdfs:comment "is part of research infrastructure organisation"@en ;
   rdfs:isDefinedBy srv: .

srv:HostingOrganisation a owl:Class ;
   rdfs:label "hosting organisation"@en ;
   rdfs:comment "organisation reponsible for hosting a service or infrastructure component"@en .
srv:hasHostingOrganisation a owl:ObjectProperty ;
   rdfs:label "srv:hasHostingOrganisation (SKG-IF labels: srv_has_hosting_organisation)"@en ;
   rdfs:domain srv:Service ;
   rdfs:range foaf:Organization ;
   dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* foaf:Organization (type: hosting_organisation)""" ;
   rdfs:comment "service is hosted by"@en ;
   rdfs:isDefinedBy srv: .
srv:hasHostingLegalEntity a owl:ObjectProperty ;
   rdfs:label "srv:hasHostingLegalEntity (SKG-IF labels: srv_has_hosting_legal_entity)"@en ;
   rdfs:domain srv:Service ;
   rdfs:range foaf:Organization ;
   dc:description """In SKG-IF, it is used in the following classes (domain):
* srv:Service

In SKG-IF, it is used to link to entities belonging to the following classes (range):
* foaf:Organization""" ;
   rdfs:comment "service associated legally responsible hosting organisation (legal entity)"@en ;
   rdfs:isDefinedBy srv: .

srv:Portal a owl:Class ;
    rdfs:label "portal" ;
    rdfs:comment "organisation responsible for aggregating and cataloging meta data of data sets and services and supporting users search access"@en ;
    rdfs:subClassOf dcat:Catalog .



############################
# Main Service Class
############################

srv:Service a owl:Class ;
    rdfs:label "srv:Service" ;
    rdfs:subClassOf schema:SoftwareApplication ;
    dc:description """The properties that can be used with this class are:
* datacite:hasIdentifier -[0..N]-> datacite:Identifier
* foaf:name -[1..1]-> rdfs:Literal
* skos:altLabel -[0..N]-> rdfs:Literal
* dcterms:description -[0..N]-> rdfs:langString
* foaf:homepage -[0..1]-> foaf:Document
* srv:audienceJurisdiction -[0..N]-> xsd:string
* srv:intendedAudienceRole -[0..N]-> skos:Concept 
* dcterms:subject -[0..N]-> owl:Thing
* srv:invocationType -[0..N]-> skos:Concept 
* srv:eoscLifeCycleStatus -[0..N]-> skos:Concept
* srv:geographicalAvailability -[0..N]-> owl:Thing
* srv:supportedLanguage -[0..N]-> lvont:Language
* srv:isPartOfResearchInfrastructure -[0..N]-> foaf:Organization
* srv:hasHostingOrganisation -[0..N]-> foaf:Organization
* srv:hasHostingLegalEntity -[0..1]-> foaf:Organization
* dcterms:relation -[0..N]-> foaf:Organization
* dcterms:conformsTo -[0..1]-> srv:APIProfile
* schema:provider -[0..1]-> srv:FacilityPortal
* srv:isDeploymentOf -[0..N]-> fabio:Software
* srv:isDeploymentOf -[0..N]-> skg:research_product
* srv:relatedResearchProduct -[0..N]-> skg:research_product
* cito:isCitedBy -[0..N]-> skg:research_product
* cito:isDocumentedBy -[0..N]-> skg:research_product
* schema:keyword -[0..N]-> xsd:string
* bido:holdsBibliometricDataInTime -[0..N]-> bido:BibliometricDataInTime
* srv:hasVenue -[0..N]-> skg:Venue
* schema:isAccessibleForFree -[0..1]-> xsd:boolean """ ;
    rdfs:isDefinedBy srv: .

############################
# Ontology Header
############################

srv: a owl:Ontology ;
    rdfs:label "SRV-O: Service Extension" ;
    dc:creator "Scientific Knowledge Graphs – Interoperability Framework (SKG-IF) WG; OSTrails Project" ;
    dc:date "2025-11-23"^^xsd:date ;
    dc:rights "This work is distributed under a Creative Commons Attribution License (https://creativecommons.org/licenses/by/4.0/legalcode)" ;
    dc:title "The SKG-IF Ontology: Service Extension" ;
    dcterms:isPartOf <https://w3id.org/skg-if/> ;
    rdfs:seeAlso <https://w3id.org/skg-if/ontology/> ;
    vann:preferredNamespacePrefix "srv" ;
    vann:preferredNamespaceUri <https://w3id.org/skg-if/extension/srv/ontology/> ;
    rdfs:comment "SRV-O is an extension of the SKG-IF Ontology (SKG-O) that introduces entities necessary to model Service-type objects used to process data in various use-cases, as well as their relationships with well-established entities in the SKG-IF data model. This extension is developed in the context of the OSTrails project." ;
    owl:versionIRI <https://w3id.org/skg-if/extension/srv/ontology/service/1.1.0/> ;
    owl:versionInfo "1.1.0" .

