# RDFS/OWL Schema for EDM v4.

# TODO: add definitions, notes, etc.
# TODO: add cardinality constraints on classes and their associated properties

@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 ens: <http://www.europeana.eu/schemas/edm/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix irw: <http://ontologydesignpatterns.org/ont/web/irw.owl#> .
@prefix ore: <http://www.openarchives.org/ore/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .


## Classes used in EDM

ens:Artifact a owl:Class ;
	rdfs:label "Artifact"@en ;
	rdfs:subClassOf irw:PhysicalEntityResource .

ore:Aggregation a owl:Class ;
	rdfs:label "Aggregation"@en .

ens:EuropeanaAggregation a owl:Class ;
	rdfs:label "Europana aggregation"@en ;
	rdfs:subClassOf ore:Aggregation ;
	rdfs:subClassOf ens:EuropeanaObject .

ens:EuropeanaObject a owl:Class ;
	rdfs:label "Europana object"@en ;
	rdfs:subClassOf irw:WebResource .

ens:Event a owl:Class ;
	rdfs:label "Event"@en ;
	rdfs:subClassOf irw:PhysicalEntityResource .

ens:Place a owl:Class ;
	rdfs:label "Place"@en ;
	rdfs:subClassOf irw:PhysicalEntityResource .

ens:TimeSpan a owl:Class ;
	rdfs:label "Time span"@en ;
	rdfs:subClassOf irw:PhysicalEntityResource .


# Properties used in EDM
# [AI] I commented the domain/range assignments with irw:Resource. They are useless (it is equivalent to rdfs:Resource) and potentially harmful (it depends on the irw: namespace).

ens:happenedAt a owl:ObjectProperty ;
	a owl:FunctionalProperty ;
	rdfs:label "happened at"@en ;
	rdfs:domain ens:Event ;
	rdfs:range ens:Place .

ens:hasAnnotation a owl:ObjectProperty ;
	rdfs:label "has annotation"@en ;
#	rdfs:domain irw:Resource ;
	rdfs:range ens:EuropeanaObject .

ens:hasMet a owl:ObjectProperty ;
	rdfs:label "has met"@en ;
#	rdfs:domain irw:Resource ;
#	rdfs:range irw:Resource ;
	rdfs:subPropertyOf ens:isRelatedTo .

ens:hasPart a owl:ObjectProperty ;
	rdfs:label "has part"@en .
#	rdfs:domain irw:Resource ;
#	rdfs:range irw:Resource .

ens:hasType a owl:ObjectProperty ;
	rdfs:label "has type"@en ;
#	rdfs:domain irw:Resource ;
	rdfs:range irw:NonInformationResource ;
	rdfs:subPropertyOf ens:isRelatedTo .

ens:hasView a owl:ObjectProperty ;
	rdfs:label "has view"@en ;
	rdfs:domain ore:Aggregation .
#	rdfs:range irw:Resource .

ens:incorporates a owl:ObjectProperty ;
	rdfs:label "incorporates"@en ;
#	rdfs:domain irw:Resource ;
#	rdfs:range irw:Resource ;
	rdfs:subPropertyOf ens:isSimilarTo .

irw:isAbout a owl:ObjectProperty ;
	rdfs:label "is about"@en ;
	rdfs:domain irw:InformationResource ;
#	rdfs:range irw:Resource ;
	rdfs:subPropertyOf ens:isRelatedTo .

ens:isDerivativeOf a owl:ObjectProperty ;
	rdfs:label "is derivative of"@en ;
#	rdfs:domain irw:Resource ;
#	rdfs:range irw:Resource .
	rdfs:subPropertyOf ens:isSimilarTo .

ens:isDigitalRepresentationOf a owl:ObjectProperty ;
	a owl:FunctionalProperty ;
	rdfs:label "is digital representation of"@en ;
	rdfs:domain irw:InformationRealization ;
	rdfs:range ens:Artifact ;
	rdfs:subPropertyOf ens:isRelatedTo .

ens:isRelatedTo a owl:ObjectProperty ;
	rdfs:label "is related to"@en .
#	rdfs:domain irw:Resource ;
#	rdfs:range irw:Resource .

ens:isSimilarTo a owl:ObjectProperty ;
	rdfs:label "is related to"@en ;
#	rdfs:domain irw:Resource ;
#	rdfs:range irw:Resource ;
	rdfs:subPropertyOf ens:isRelatedTo .

ens:isSuccessorOf a owl:ObjectProperty ;
	rdfs:label "is sucessor of"@en ;
#	rdfs:domain irw:Resource ;
#	rdfs:range irw:Resource ;
	rdfs:subPropertyOf ens:isSimilarTo .

ens:landingPage a owl:ObjectProperty ;
	a owl:FunctionalProperty ;
	rdfs:label "landing page"@en ;
	rdfs:domain ens:EuropeanaAggregation ;
	rdfs:range irw:URI ;
	rdfs:subPropertyOf irw:isAccessedBy .

ens:occurredAt a owl:ObjectProperty ;
	rdfs:label "occurred at"@en ;
	rdfs:domain ens:Event ;
	rdfs:range ens:TimeSpan .

ens:wasPresentAt a owl:ObjectProperty ;
	rdfs:label "was present at"@en ;
	rdfs:domain [ owl:unionOf ( foaf:Agent ens:Artifact ) ] ;
	rdfs:range ens:Event .

