Ontology
imports: dcmitype
imports: http://purl.org/dc/elements/1.1/
imports: foaf
comment: An ontology describing the concept of a tagging
imports: terms
imports: core

Visibility
type: Class
disjoint with: Tagging
comment: Denotes the visibility of a Tagging. Can be one of {Private Public Protected}. The application using this ontology has to take care of handling the authentication etc.
disjoint with: Tagger
disjoint with: Service Domain
equivalent class: Class
  one of: Private
  one of: Public
  one of: Protected
disjoint with: Tag

Tagging
type: Class
disjoint with: Tagger
disjoint with: Tag
comment: Denotes the concept of a tagging: a Tagging consists of at least the basic tuple {tagger, resource, tags}. All other properties are optional. Furthermore Tagging follows the ValuePartition pattern, which means that it can only have values from either PublicTagging, PrivateTagging or ProtectedTagging.
disjoint with: Service Domain
disjoint with: Visibility

Tagger
type: Class
subclass of: Person
disjoint with: Service Domain
subclass of: Group
disjoint with: Tagging
comment: any foaf:Person or foaf:Group who has at least one tagging is a Tagger.
equivalent class: Class
  intersection of: Restriction
    some values from: Tagging
    on property: has Tagging
  intersection of: Class
    union of: Group
    union of: Person
disjoint with: Visibility
disjoint with: Tag

Service Domain
type: Class
disjoint with: Visibility
disjoint with: Tag
comment: the domain (or even community) in which the tagging occured (e.g. delicious, flickr). specifiying a domain allows for cross-application tagging without losing the context in which the tagging has been done.
disjoint with: Tagging
disjoint with: Tagger

Tag
type: Class
disjoint with: Visibility
subclass of: Concept
comment: represents a single tag or keyword. Each tag has a unique URI. Equal tags (e.g. "san francisco" and "san fran") can be semantically related via the sameTag property. Semantic relations, such as broader and narrower terms (e.g. "blue" is kind of "color"), can be expressed with the SKOS core ontology (e.g. http://www.w3.org/2004/02/skos/core#broader). Therefore Tag is a subclass of SKOS core Concept.
disjoint with: Service Domain
disjoint with: Tagging
disjoint with: Tagger

has Tagging
type: FunctionalProperty
domain: Group
comment: relates a Tagger to his Taggings.
range: Tagging
domain: Person
type: ObjectProperty

taggedResource
type: ObjectProperty
domain: Tagging
comment: specifies the resource being tagged
type: FunctionalProperty

type
type: ObjectProperty
comment: type of the resource, e.g. image, text, ... this should be decided from the system (e.g. based on the MIME type), not from the user. thus, a tagged resource can have only one type.
range: DCMIType
equivalent property: type
domain: Tagging
type: FunctionalProperty

tag
type: ObjectProperty
comment: specifies the tag that belongs to the tagging. Each tagging can have multiple tags
domain: Tagging
range: Tag

domain
type: ObjectProperty
range: Service Domain
comment: specifies that a tagging happens in the context of a specific domain (i.e. flickr, delicious). a tagging can also belong to multiple domains (e.g. multiple social bookmarking tools), which allows for cross-application tagging.
domain: Tagging

Visibility
type: ObjectProperty
comment: denotes the visibility of the tagging (Private, Public or Protected)
range: Visibility
domain: Tagging

service homepage
type: ObjectProperty
domain: Service Domain
comment: the homepage URI of a ServiceDomain (i.e. a service which allows for tagging resources).
sub property of: homepage

tag name
type: DatatypeProperty
domain: Tag
range: string
comment: denotes the name (displayname) of a tag. A Tag can have multiple tag names which include variations of the same name (i.e. "c++", "cplusplus", "c_plus_plus",...). Thus one can infer that they all denote the same tag.
sub property of: name

Notes
type: DatatypeProperty
comment: additional notes to be added to a tagging (e.g. "picture of my cat mauzi")
domain: Tagging

date
type: DatatypeProperty
range: dateTime
comment: specifies the date and time of the tagging
domain: Tagging
sub property of: created
type: FunctionalProperty

Service Name
type: DatatypeProperty
sub property of: name
range: string
domain: Service Domain
comment: denotes the name of a tagging service provider, e.g. flickR

sameTag
type: SymmetricProperty
domain: Tag
sub property of: sameAs
comment: denotes equality between two tags with different URIs.

prefTagLabel
type: FunctionalProperty
range: string
domain: Tag
comment: if a tag has multiple name, then you should provide a preferred name, which will be displayed. If a Tag has only one tagName, then prefTagName should have the same value.
type: DatatypeProperty
sub property of: tag name