@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix schema: <https://schema.org/> .
@prefix memorix: <http://memorix.io/ontology#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix dash: <http://datashapes.org/dash#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://memorix.io/ontology#>
    dct:contributor "Memorix Development team" ;
    dct:created "2021-02-09T17:00:00+00:00"^^xsd:dateTime ;
    dct:creator [
        schema:email "m.lindeman@picturae.com" ;
        schema:name "Mark Lindeman"
    ] ;
    dct:license <https://creativecommons.org/licenses/by-nc-sa/4.0/> ;
    dct:modified "2022-08-25T16:57:26+02:00"^^xsd:dateTime ;
    dct:publisher [
        schema:identifier <https://picturae.com> ;
        schema:name "Picturae"
    ] ;
    dct:rights "© 2021-… Picturae, Heerhugowaard, the Netherlands" ;
    vann:preferredNamespacePrefix "memorix" ;
    vann:preferredNamespaceUri <http://memorix.io/ontology#> ;
    a owl:Ontology ;
    rdfs:comment "The Memorix Application Ontology describes Classes and Properties that are uses in Picturae's Collection Management System."@en ;
    rdfs:label "Memorix Application Ontology" .

memorix:AccessModeType
    a owl:Class ;
    rdfs:comment "The Class of <em>accessMode…</em> <a href=#datatypeproperties>Datatype Properties</a> that can be used to permit certain actions" ;
    rdfs:label "AccessModeType" .

memorix:AccessibilityAndRightsComponent
    a owl:Class ;
    rdfs:comment "The class of information about Accessibility & Rights."@en ;
    rdfs:label "AccessibilityAndRightsComponent" ;
    rdfs:subClassOf memorix:InformationComponent, [
        a owl:Restriction ;
        owl:maxCardinality 1 ;
        owl:onProperty schema:creditText ;
        owl:someValuesFrom xsd:string
    ], [
        a owl:Restriction ;
        owl:maxCardinality 1 ;
        owl:onProperty memorix:copyrightExpires ;
        owl:someValuesFrom xsd:date
    ], [
        a owl:Restriction ;
        owl:cardinality 1 ;
        owl:onProperty memorix:attributionRequired ;
        owl:someValuesFrom xsd:boolean
    ], [
        a owl:Restriction ;
        owl:maxCardinality 1 ;
        owl:onProperty schema:conditionsOfAccess ;
        owl:someValuesFrom xsd:string
    ], [
        a owl:Restriction ;
        owl:maxCardinality 1 ;
        owl:onProperty schema:copyrightNotice ;
        owl:someValuesFrom xsd:string
    ], [
        a owl:Restriction ;
        owl:cardinality 1 ;
        owl:onProperty memorix:accessModeDownload ;
        owl:someValuesFrom xsd:boolean
    ], [
        a owl:Restriction ;
        owl:cardinality 1 ;
        owl:onProperty memorix:accessModeScanningOnDemand ;
        owl:someValuesFrom xsd:boolean
    ], [
        a owl:Restriction ;
        owl:maxCardinality 1 ;
        owl:onProperty memorix:restrictionsExpire ;
        owl:someValuesFrom xsd:date
    ], [
        a owl:Restriction ;
        owl:maxCardinality 1 ;
        owl:onProperty schema:license ;
        owl:someValuesFrom xsd:anyURI
    ], [
        a owl:Restriction ;
        owl:maxCardinality 1 ;
        owl:onClass memorix:Context ;
        owl:onProperty schema:copyrightHolder
    ], [
        a owl:Restriction ;
        owl:cardinality 1 ;
        owl:onProperty memorix:accessModeDisplay ;
        owl:someValuesFrom xsd:boolean
    ], [
        a owl:Restriction ;
        owl:cardinality 1 ;
        owl:onProperty memorix:accessModeReservation ;
        owl:someValuesFrom xsd:boolean
    ] .

memorix:AudienceExternal
    a owl:Class ;
    rdfs:comment "Indicates that something may be used outside of the Memorix application (to be used as value for <a href=#audience>audience</a> predicate on <a href=#Context>Context</a>)."@en ;
    rdfs:domain memorix:audience ;
    rdfs:label "AudienceExternal" ;
    owl:inverseOf memorix:AudienceInternal .

memorix:AudienceInternal
    a owl:Class ;
    rdfs:comment "Indicates that something may not be used outside of the Memorix application  (to be used as value for <a href=#audience>audience</a> predicate on <a href=#Context>Context</a>)."@en ;
    rdfs:domain memorix:audience ;
    rdfs:label "AudienceInternal" ;
    owl:inverseOf memorix:AudienceExternal .

memorix:Class
    a owl:Class ;
    rdfs:comment "Base Class for main Memorix Classes" ;
    rdfs:label "Class" .

memorix:Collection
    a owl:Class ;
    rdfs:comment """Collections are permanent groupings of Records that are conceptually linked. 
  Possible uses could be for works that were donated as a group, objects that all belonged to the same person, 
  or that were shown together in a historical exhibition etc. 
  Normally you wouldn’t use this to describe a category of works such as “books,” 
  though that is your choice. Object can only be in a single collection."""@en ;
    rdfs:label "Collection" ;
    rdfs:subClassOf memorix:Class, [
        a owl:Restriction ;
        owl:onDataRange memorix:AudienceExternal, memorix:AudienceInternal ;
        owl:onProperty memorix:audience ;
        owl:qualifiedCardinality 1
    ] ;
    skos:example """
@prefix dct: <http://purl.org/dc/terms/> .
@prefix memorix: <http://memorix.io/ontology#> .
@prefix recordtypes: </resources/recordtypes/> .
<> a memorix:Collection ;
  dct:description \"Collection of Persons and Organisations\" ;
  dct:title \"Persons & Organisations\" ;
  memorix:hasRecordtype recordtypes:All .""" .

memorix:Context
    a owl:Class ;
    rdfs:comment "Memorix unit used as an entrypoint to all things related to an informationobject."@en ;
    rdfs:label "Context" ;
    rdfs:subClassOf memorix:Class, [
        a owl:Restriction ;
        owl:onClass memorix:Record ;
        owl:onProperty memorix:hasRecord ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onClass memorix:Recordtype ;
        owl:onProperty dct:conformsTo ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onProperty memorix:audience ;
        owl:oneOf (memorix:AudienceInternal
            memorix:AudienceExternal
        ) ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onProperty dct:title ;
        owl:qualifiedCardinality 1 ;
        owl:someValuesFrom xsd:string
    ], [
        a owl:Restriction ;
        owl:onClass memorix:DepotLocationComponent ;
        owl:onProperty memorix:depotLocation
    ], [
        a owl:Restriction ;
        owl:onProperty dct:description ;
        owl:qualifiedCardinality 1 ;
        owl:someValuesFrom xsd:string
    ] .

memorix:DateEditor
    a owl:Class ;
    rdfs:comment "An editor for integer date literals, e.g. 20081201." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "Integer date editor" .

memorix:DepotLocationComponent
    a owl:Class ;
    rdfs:comment "Depot location information, specific to memorix application." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "DepotLocationComponent" ;
    rdfs:subClassOf memorix:InformationComponent, [
        a owl:Restriction ;
        owl:maxCardinality 1 ;
        owl:onProperty memorix:depotContainerEnd
    ], [
        a owl:Restriction ;
        owl:cardinality 1 ;
        owl:onProperty memorix:depotContainerStart
    ], [
        a owl:Restriction ;
        owl:cardinality 1 ;
        owl:onProperty memorix:depot
    ] .

memorix:DigitalAssetComponent
    a owl:Class ;
    rdfs:domain memorix:Recordtype ;
    rdfs:subClassOf memorix:InformationComponent .

memorix:GeoCoordinates
    a owl:Class ;
    rdfs:comment "Class for storing GeoCoordinates data."@en ;
    rdfs:label "GeoCoordinates" ;
    rdfs:range owl:DatatypeProperty ;
    rdfs:subClassOf schema:GeoCoordinates, [
        a owl:Restriction ;
        owl:onDataRange sh:IRI ;
        owl:onProperty schema:sameAs
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:decimal ;
        owl:onProperty schema:longitude ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:decimal ;
        owl:onProperty schema:latitude ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:string ;
        owl:onProperty schema:name ;
        owl:qualifiedCardinality 1
    ] .

memorix:History
    a owl:Class ;
    rdfs:comment """The class of Actions performed on a resources by an Agent at a certain Time. 
  Note there is also a ObjectProperty 'history' on Resources which is used for last modification and creation history.""" ;
    rdfs:label "History" ;
    rdfs:range owl:DatatypeProperty, owl:ObjectProperty ;
    rdfs:subClassOf memorix:Class, schema:Action, [
        a owl:Restriction ;
        owl:onDataRange memorix:AccessibilityAndRightsComponent, memorix:Collection, memorix:Context, memorix:Set ;
        owl:onProperty schema:object ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:dateTime ;
        owl:onProperty schema:startTime ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onDataRange memorix:User ;
        owl:onProperty schema:agent ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onProperty schema:additionalType ;
        owl:oneOf (schema:AddAction
            schema:ReplaceAction
            schema:DeleteAction
            schema:UpdateAction
        ) ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onProperty schema:object ;
        owl:oneOf (memorix:Context
            memorix:Set
            memorix:Collection
            memorix:AccessibilityAndRightsComponent
        ) ;
        owl:qualifiedCardinality 1
    ] .

memorix:ImageComponent
    a owl:Class ;
    rdfs:domain memorix:Recordtype ;
    rdfs:subClassOf memorix:InformationComponent .

memorix:InformationComponent
    a owl:Class .

memorix:LinkedRecordEditor
    a owl:Class ;
    rdfs:comment "Editor for linking to Memorix Nexus internal records." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "Linked Record Editor" .

memorix:LocationBagEditor
    a owl:Class ;
    rdfs:comment "Editor for selecting a BAG Location." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "BAG Editor" .

memorix:LocationCoordinatesEditor
    a owl:Class ;
    rdfs:comment "Editor for selecting a Coordinates Location." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "Coordinates Editor" .

memorix:Organization
    a owl:Class ;
    rdfs:comment "The Organization making use of a specific Memorix instance."@en ;
    rdfs:label "Organization" ;
    rdfs:subClassOf schema:Organization .

memorix:PathEditor
    a owl:Class ;
    rdfs:comment "Editor for managing the path of a container." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "Container path editor" .

memorix:Record
    a owl:Class ;
    rdfs:comment "Recorded information that must be handled as a unit."@en, "Vastgelegde informatie die als eenheid moet worden behandeld."@nl ;
    rdfs:label "Record" ;
    rdfs:seeAlso <https://www.nationaalarchief.nl/archiveren/kennisbank/informatieobject> ;
    rdfs:subClassOf memorix:Class, [
        a owl:Restriction ;
        owl:onClass memorix:Context ;
        owl:onProperty memorix:hasContext ;
        owl:qualifiedCardinality 1
    ] .

memorix:Recordtype
    a owl:Class ;
    rdfs:comment """Record Types are the most commonly used way to categorize Records in your collection.
  The main guideline is to choose Record types that are broad enough so that an Record can never be more than one type 
  (ie a painting can never also be an moving image). 
  If you would like to describe your Records more specifically, you can supplement this categorization with an 
  additional \"subtype\" dropdown menu on the record editor itself.  For example, an object of type \"ephemera\" 
  could have a subtype list of \"postcard,\" \"poster,\" \"letter,\" etc.  
  A subtype list could potentially be repeatable, so you would have the opportunity to assign multiple subtypes if that's appropriate.
  Record types are described using SHACL Nodeshapes."""@en ;
    rdfs:label "Recordtype" ;
    rdfs:subClassOf memorix:Class ;
    owl:equivalentClass sh:NodeShape .

memorix:ResultPagination
    a owl:Class ;
    rdfs:comment "Parent Class for pagination properties."@en ;
    rdfs:label "Pagination" ;
    rdfs:range owl:DatatypeProperty ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:onDataRange xsd:int ;
        owl:onProperty memorix:numberOfPages ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:int ;
        owl:onProperty memorix:page ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:int ;
        owl:onProperty memorix:perPage ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:int ;
        owl:onProperty memorix:total ;
        owl:qualifiedCardinality 1
    ] .

memorix:Set
    a owl:Class ;
    rdfs:comment """Sets are designed for temporary and arbitrary groupings of your Record, 
  often for a practical task such as creating an online exhibition, 
  or creating a working list of images for publication etc. 
  Sets can contain Records from one or more Collections."""@en ;
    rdfs:label "Set" ;
    rdfs:range owl:DatatypeProperty, owl:ObjectProperty ;
    rdfs:subClassOf memorix:Class .

memorix:Thingy
    dct:creator "Siergiej Onda" ;
    a owl:Thing ;
    rdfs:comment """The class of Memorix individuals that do not have a specific name, 
  or have a name that no one can come up with during a meeting."""@en ;
    rdfs:label "Thingy" .

memorix:TreePathComponent
    a owl:Class ;
    rdfs:comment "Render element to link a parent record and show a tree structure." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "TreePathComponent" ;
    rdfs:subClassOf memorix:InformationComponent, [
        a owl:Restriction ;
        owl:onProperty memorix:hasRecordtype
    ] .

memorix:VocabularyEditor
    a owl:Class ;
    rdfs:comment "Editor for linking to a concept in a conceptscheme." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "Vocabulary Editor" .

memorix:accessModeDisplay
    a owl:ObjectProperty ;
    rdfs:comment "Allow display of attached assets."@en ;
    rdfs:domain memorix:AccessibilityAndRightsComponent ;
    rdfs:label "accessModeDisplay" ;
    rdfs:range xsd:boolean ;
    rdfs:seeAlso <https://www.w3.org/TR/odrl-vocab/#term-display> ;
    rdfs:subClassOf memorix:AccessModeType .

memorix:accessModeDownload
    a owl:ObjectProperty ;
    rdfs:comment "Allow download of attached assets."@en ;
    rdfs:domain memorix:AccessibilityAndRightsComponent ;
    rdfs:label "accessModeDownload" ;
    rdfs:range xsd:boolean ;
    rdfs:seeAlso <https://www.w3.org/TR/odrl-vocab/#term-archive> ;
    rdfs:subClassOf memorix:AccessModeType .

memorix:accessModeReservation
    a owl:ObjectProperty ;
    rdfs:comment "Allow request/reservations."@en ;
    rdfs:domain memorix:AccessibilityAndRightsComponent ;
    rdfs:label "accessModeReservation" ;
    rdfs:range xsd:boolean ;
    rdfs:subClassOf memorix:AccessModeType .

memorix:accessModeScanningOnDemand
    a owl:ObjectProperty ;
    rdfs:comment "Allow scanning on demand."@en ;
    rdfs:domain memorix:AccessibilityAndRightsComponent ;
    rdfs:label "accessModeScanningOnDemand" ;
    rdfs:range xsd:boolean ;
    rdfs:subClassOf memorix:AccessModeType .

memorix:attributionRequired
    a owl:ObjectProperty ;
    rdfs:comment "If set to TRUE then it is required to show Creditstatement."@en ;
    rdfs:domain memorix:AccessibilityAndRightsComponent ;
    rdfs:label "attributionRequired" ;
    rdfs:range xsd:boolean ;
    rdfs:seeAlso <https://creativecommons.org/ns#Attribution> ;
    rdfs:subClassOf memorix:AccessModeType .

memorix:audience
    a owl:ObjectProperty ;
    rdfs:comment """Property that makes a resource internal/external from the Application perspective. 
  An external resource may never be published outside the Memorix Application. 
  When used on a Shacl property (sh:property) this property may provide information for certain RDF statements 
  that may not be published outside Memorix. """@en ;
    rdfs:domain memorix:Collection, memorix:Context, memorix:Recordtype, memorix:Set, skos:Concept, skos:ConceptScheme, sh:property ;
    rdfs:label "audience" ;
    owl:equivalentProperty dct:audience, schema:audience ;
    owl:oneOf (memorix:AudienceInternal
        memorix:AudienceExternal
    ) .

memorix:conceptSchemeIn
    a owl:ObjectProperty ;
    rdfs:comment "Specifies a list of skos:ConceptSchemes that can be used for picking Concepts."@en ;
    rdfs:domain memorix:VocabularyEditor ;
    rdfs:label "conceptSchemeIn" ;
    rdfs:range rdf:List .

memorix:constructQueryTitleAndDescription
    a owl:ObjectProperty ;
    rdfs:comment "Sets a SPARQL CONSTRUCT on a Recordtype to create titles and descriptions of memorix:Context. Expects a dcterms:title and dcterms:decription predicates." ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "constructQueryTitleAndDescription" ;
    rdfs:range xsd:string .

memorix:copyrightExpires
    a owl:DatatypeProperty ;
    rdfs:comment "Property that defines when the copyright expires."@en ;
    rdfs:domain memorix:Context ;
    rdfs:label "copyrightExpires" ;
    rdfs:range xsd:date .

memorix:depot
    a owl:DatatypeProperty ;
    rdfs:comment "UUID of a Depot object registered in Memorix. Depots are not expressed as RDF Resources!", "UUID of a Depot object registred in Memorix. Depots are not expressed as RDF Resources!" ;
    rdfs:domain memorix:DepotLocationComponent ;
    rdfs:label "depot" ;
    rdfs:range xsd:string .

memorix:depotContainerEnd
    a owl:DatatypeProperty ;
    rdfs:comment "UUID of a Depot Container that markes the end of a physical depot location of an object registered in Memorix. Containers are not expressed as RDF Resources!" ;
    rdfs:domain memorix:DepotLocationComponent ;
    rdfs:label "depotContainerEnd" ;
    rdfs:range xsd:string .

memorix:depotContainerStart
    a owl:DatatypeProperty ;
    rdfs:comment "UUID of a Depot Container that markes the start of a physical depot location of an object registered in Memorix. Containers are not expressed as RDF Resources!" ;
    rdfs:domain memorix:DepotLocationComponent ;
    rdfs:label "depotContainerStart" ;
    rdfs:range xsd:string .

memorix:hasAccessibilityAndRightsComponent
    a owl:ObjectProperty ;
    rdfs:comment "Links a AccessibilityAndRightsComponent to its Context"@en ;
    rdfs:domain memorix:Context ;
    rdfs:label "hasAccessibilityAndRightsComponent" ;
    rdfs:range memorix:AccessibilityAndRightsComponent ;
    owl:inverseOf memorix:hasContext .

memorix:hasContext
    a owl:ObjectProperty ;
    rdfs:comment "Links a Context object to a Record, AccessibilityAndRightsComponent or schema:DigitalDocument"@en ;
    rdfs:domain memorix:AccessibilityAndRightsComponent, memorix:Record, memorix:Set ;
    rdfs:label "hasContext" ;
    rdfs:range memorix:Context ;
    owl:inverseOf memorix:hasAccessibilityAndRightsComponent, memorix:hasRecord, memorix:isPartOfSet .

memorix:hasDigitalDocument
    a owl:ObjectProperty ;
    rdfs:comment "Collection of links to digital documents stored in Asset Manegement System."@en ;
    rdfs:domain memorix:Context ;
    rdfs:label "hasDigitalDocument" ;
    rdfs:range rdf:List .

memorix:hasHistory
    a owl:ObjectProperty ;
    rdfs:comment "Links zero or more History reources to a Class"@en ;
    rdfs:domain memorix:AccessibilityAndRightsComponent, memorix:Collection, memorix:Context, memorix:Recordtype, memorix:Set ;
    rdfs:label "hasHistory" ;
    rdfs:range memorix:History ;
    owl:inverseOf schema:object .

memorix:hasInformationComponent
    a owl:ObjectProperty ;
    rdfs:comment "Links an InformationComponent to a RecordType. Can be used as information for frontend rendering."@en ;
    rdfs:domain memorix:Recordtype ;
    rdfs:label "hasInformationComponent" ;
    rdfs:range memorix:InformationComponent .

memorix:hasMedia
    a owl:ObjectProperty ;
    rdfs:comment "Links from a Record to Media (e.g. Nuxeo links, IIIF Manifest files, etc)"@en ;
    rdfs:domain memorix:Context .

memorix:hasRecord
    a owl:ObjectProperty ;
    rdfs:comment "Links a Record to its Context"@en, "RDF List of parents of other record contexts, starting with the root and ending with the parent attached to the record"@en ;
    rdfs:domain memorix:Context ;
    rdfs:label "hasParents", "hasRecord" ;
    rdfs:range memorix:Record, rdf:List ;
    owl:inverseOf memorix:hasContext .

memorix:hasRecordtype
    a owl:ObjectProperty ;
    rdfs:comment "Marks a Recordtype as usable in a Collection"@en ;
    rdfs:domain memorix:Collection, memorix:TreePathComponent ;
    rdfs:label "hasRecordtype" ;
    rdfs:range memorix:Recordtype .

memorix:history
    a owl:ObjectProperty ;
    rdfs:comment """Used for direct and limited (only creation and modification a.k.a. replacement) 
  history on a Resource. There is also a full History log for Resources (<code><a href=#History>memorix:History</a></code>) 
  link to a Resource by the Resources object property <code><a href=#hasHistory>memorix:hasHistory</a></code>"""@en ;
    rdfs:domain memorix:AccessibilityAndRightsComponent, memorix:Collection, memorix:Context, memorix:Set, skos:Concept, skos:ConceptScheme ;
    rdfs:range schema:CreateAction, schema:ReplaceAction .

memorix:inSummaryAt
    a owl:ObjectProperty ;
    rdfs:comment "Indicates that a sh:property is part of the description of memorix:Context" ;
    rdfs:domain sh:PropertyShape ;
    rdfs:label "inSummaryAt" ;
    rdfs:range xsd:float .

memorix:inTitleAt
    a owl:ObjectProperty ;
    rdfs:comment "Indicates that a sh:property is part of the title of memorix:Context" ;
    rdfs:domain sh:PropertyShape ;
    rdfs:label "inTitleAt" ;
    rdfs:range xsd:float .

memorix:isDefaultDigitalDocument
    a owl:ObjectProperty ;
    rdfs:comment "If set to TRUE then a schema:DigitalDocument is the default Document for a Record."@en ;
    rdfs:domain schema:DigitalDocument ;
    rdfs:label "isDefaultDigitalDocument" ;
    rdfs:range xsd:boolean .

memorix:isPartOfSet
    a owl:ObjectProperty ;
    rdfs:domain memorix:Context ;
    rdfs:range memorix:Set ;
    owl:inverseOf memorix:hasContext .

memorix:numberOfItems
    a owl:DatatypeProperty ;
    rdfs:comment "Indicator for number of items (e.g. Records or Concepts) that are contained by Sets, Collections and ConceptSchemes"@en ;
    rdfs:domain memorix:Collection, memorix:Set, skos:ConceptScheme ;
    rdfs:label "numberOfItems" ;
    rdfs:range xsd:nonNegativeInteger .

memorix:numberOfPages
    a owl:DatatypeProperty ;
    rdfs:comment "Total number of pages in result set." ;
    rdfs:domain memorix:ResultPagination ;
    rdfs:label "numberOfPages" ;
    rdfs:range xsd:int .

memorix:page
    a owl:DatatypeProperty ;
    rdfs:comment "Current page of result set (offset by 1)." ;
    rdfs:domain memorix:ResultPagination ;
    rdfs:label "page" ;
    rdfs:range xsd:int .

memorix:perPage
    a owl:DatatypeProperty ;
    rdfs:comment "Maximium number of items in page of a result set (a.k.a. as 'limit')." ;
    rdfs:domain memorix:ResultPagination ;
    rdfs:label "perPage" ;
    rdfs:range xsd:int .

memorix:restrictionsExpire
    a owl:DatatypeProperty ;
    rdfs:comment "Property that defines when a restriction to Conditions of Access expires."@en ;
    rdfs:domain memorix:Context ;
    rdfs:label "restrictionsExpire" ;
    rdfs:range xsd:date .

memorix:total
    a owl:DatatypeProperty ;
    rdfs:comment "Total number of items in a result set." ;
    rdfs:domain memorix:ResultPagination ;
    rdfs:label "total" ;
    rdfs:range xsd:int .

skos:Concept
    rdfs:subClassOf memorix:Class .

skos:ConceptScheme
    rdfs:subClassOf memorix:Class .

schema:DigitalDocument
    a owl:Class ;
    rdfs:label "DigitalDocument" ;
    rdfs:subClassOf [
        a owl:Restriction ;
        rdfs:comment "The document name in DAM (without extension)" ;
        owl:onDataRange xsd:string ;
        owl:onProperty schema:name ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        owl:onDataRange xsd:string ;
        owl:onProperty memorix:digitalDocumentId ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        rdfs:comment "Switch for indication that a Document should be used as a default asset for a Record/Context" ;
        owl:maxCardinality 1 ;
        owl:onDataRange xsd:boolean ;
        owl:onProperty memorix:isDefaultDigitalDocument
    ], [
        a owl:Restriction ;
        rdfs:comment "Filesize of document, Memorix always uses bytes as Int and not Text as Schema.org defines." ;
        owl:onDataRange xsd:int ;
        owl:onProperty schema:fileSize ;
        owl:qualifiedCardinality 1
    ], [
        a owl:Restriction ;
        rdfs:comment "The mimetype of the document" ;
        owl:onDataRange xsd:string ;
        owl:onProperty schema:encodingFormat ;
        owl:qualifiedCardinality 1
    ] .

schema:accessMode
    a owl:ObjectProperty ;
    rdfs:domain memorix:Context ;
    rdfs:label "accessMode" ;
    rdfs:range memorix:AccessModeType .

schema:copyrightHolder
    a owl:ObjectProperty ;
    rdfs:comment "Link to a Context/Record from Memorix"@en ;
    rdfs:domain memorix:Context ;
    rdfs:label "copyrightHolder" ;
    rdfs:range memorix:Context .

schema:creditText
    a owl:DatatypeProperty ;
    rdfs:domain memorix:Context ;
    rdfs:label "creditText" ;
    rdfs:range xsd:string .

schema:license
    a owl:DatatypeProperty ;
    rdfs:domain memorix:Context ;
    rdfs:label "license" ;
    rdfs:range xsd:anyURI .

