An organization ontology

Last update:
First released:
Revision: 0.4
Dave Reynolds (Epimorphics Ltd)

Copyright © 2010 Epimorphics Ltd

This work is licensed under a Creative Commons License.


This document describes a core ontology for organizational structures, aimed at supporting linked-data publishing of organizational information across a number of domains. It is designed to allow domain-specific extensions to add classification of organzations and roles, as well as extensions to support neighbouring information such as organizational activities.

Status of this document

This is an editor's draft without any formal standing. It is not endorsed by any organisation and is not, at present, part of any standards track process. Its use of the W3C namespace does not imply W3C endorsement.

Changes to the ontology will be announced on the public-lod mail list.

Table of Contents

1. Introduction

This ontology was original motivated by a need to publish information relating to government organizational structure as part of the initiative. We felt that the best approach was to develop a small, generic, reusable core ontology for organizational information and then let developers extend and specialize it to particular domains.

The ontology gives minimal basic terms to support representation of:

This coverage corresponds to the type of information typically found in organizational charts. As such it does not offer a complete representation for all the nuances of organizational control structures and flows of accountability and empowerment. Developers are encouraged to create extension vocabularies for such purposes, building upon this generic foundation.

The ontology does not provide category structures for organization type, organization purpose or roles. Different domains will have different requirements for classification of such concepts. Instead the ontology provides just the core base concepts needed to allow extensions to add specific sub-class structures or classification schemes as required.

Overview of ontology

Diagram dipicting core classes and relationships


The namespace for the ontology is:

Design notes

For background to the approach taken in developing the ontology see: blog notes

Notes on style

Use of inverses: authorities differ on whether providing pairs of inverse relationships between concepts is good practice compared to declaring each relationship in just one direction. In this design we provide inverses for most relations (omitting attribute-like relations). This makes it easier to query the data in linked-data settings where a (non-symmetric) closed bounded description is often the default description of each resource. This does incur a cost in terms of storage or use of run-time inference. Particular applications of the ontology may adopt a profile in which only certain directions are asserted in the data and leave it up to clients to apply any inverseOf reasoning they require.

Naming: some designers prefer to name properties by nouns which describe the object of the property, others prefer to treat property names as names of the link and use a pattern to indicate the direction of the link. Here we adopt the latter approach for those properties which are relational and especially when the direction is ambiguous. We use the URI pattern org:hasFoo/org:fooOf for this but simplify the labels to "foo" and "foo of" to improve readability in linked data viewers.

2. Organizational structure

Class: org:Organization (subClassOf foaf:Agent)
Represents a collection of people organized together into a community or other social, commercial or political structure. The group has some common purpose or reason for existence which goes beyond the set of people belonging to it and can act as an Agent. Organizations are often decomposable into hierarchical structures. It is recommended that SKOS lexical labels should be used to label the Organization. In particular skos:prefLabel for the primary (e.g. legally recognized name), skos:altLabel for alternative names (trading names, colloquial names) and skos:notation to denote codes from a code list. Alternative names: Collective Body Org Group

Class: org:FormalOrganization (subClassOf org:Organization, foaf:Organization; superClassOf gr:BusinessEntity)
An Organization which is recognized in the world at large, in particular in legal jurisdictions, with associated rights and responsibilities. Examples include a Corporation, Charity, Government or Church. Note that this is a super class of gr:BusinessEntity and it is recommended to use the GoodRelations vocabulary to denote Business classifications such as DUNS or NAICS.

Class: org:OrganizationalUnit (subClassOf org:Organization)
An Organization such University Support Unit which is part of some larger FormalOrganization and only has full recognition within the context of that FormalOrganization, it is not a Legal Entity in its own right. Units can be large and complex containing other Units and even FormalOrganizations. Alternative names: OU Unit Department

Property: org:subOrganizationOf (org:Organization -> org:Organization)
Represents hierarchical containment of Organizations or Organizational Units; indicates an organization which is a sub-part or child of this organization. Inverse of org:hasSubOrganization. Alternative names: subOrgOf

Property: org:transitiveSubOrganizationOf (org:Organization -> org:Organization, Transitive super property of org:subOrganizationOf)
The transitive closure of subOrganizationOf, giving a representation of all organizations that contain this one. Note that technically this is a super property of the transitive closure so it could contain additional assertions but such usage is discouraged.

Property: org:hasSubOrganization (org:Organization -> org:Organization)
Represents hierarchical containment of Organizations or OrganizationalUnits; indicates an Organization which contains this Organization. Inverse of org:subOrganizationOf. Alternative names: hasSubOrg

Property: org:purpose (org:Organization -> *)
Indicates the purpose of this Organization. There can be many purposes at different levels of abstraction but the nature of an organization is to have a reason for existence and this property is a means to document that reason. An Organization may have multiple purposes. It is recommended that the purpose be denoted by a controlled term or code list, ideally a skos:Concept. However, the range is left open to allow for other types of descriptive schemes. It is expected that specializations or application profiles of this vocabulary will constrain the range of the purpose. Alternative names: remit responsibility (esp. if applied to OrganizationalUnits such as Government Departments).

Property: org:hasUnit (org:Organization -> org:OrganizationalUnit, subPropertyOf hasSubOrganization)
Indicates a unit which is part of this Organization, e.g. a Department within a larger FormalOrganization. Inverse of org:unitOf.

Property: org:unitOf (org:OrganizationalUnit -> org:Organization, subPropertyOf subOrganizationOf)
Indicates an Organization of which this Unit is a part, e.g. a Department within a larger FormalOrganization. This is the inverse of org:hasUnit.

Property: org:classification (org:Organization -> skos:Concept)
Indicates a classification for this Organization within some classification scheme. Extension vocabularies may wish to specialize this property to have a range corresponding to a specific skos:ConceptScheme. This property is under discussion and may be revised or removed - in many cases organizations are best categorized by defining a sub-class hierarchy in an extension vocabulary.

Property: org:identifier (org:Organization ->, subPropertyOf skos:notation)
Gives an identifier, such as a company registration number, that can be used to used to uniquely identify the organization. Many different national and international identier schemes are available. The org ontology is neutral to which schemes are used. The particular identifier scheme should be indicated by the datatype of the identifier value. Using datatypes to distinguish the notation scheme used is consistent with recommended best practice for skos:notation of which this property is a specialization.

Property: org:linkedTo (org:Organization -> org:Organization)
Indicates an arbitrary relationship between two organizations. Specializations of this can be used to, for example, denote funding or supply chain relationships.

Formal organizations

Note that the subclass hierarchy below org:Organization is not a full covering. There can be org:Organizations which are in neither org:FormalOrganization nor org:OrganizationalUnit. The distinction between an externally recognized organization and one which only has meaning in the context of a larger organization is a common one which we support to simplify the mapping to existing practice. Note that the containment hierarchy is completely open - org:FormalOrganizations are free to contain other org:FormalOrganizations (e.g. subsidiaries of large corporations). We invite feedback from users of the ontology as to whether this distinction useful in practice.

Organizational hierarchy

In many organizations there is a hierarchy of unit structures. For example we might see a containment hierarchy like:


The intention is that this would be added in custom extensions since they are specific to the organization at hand. This can easily be done by subclassing org:OrganizationalUnit, specializing org:hasSubOrganization and/or using owl:allValuesFrom restrictions on the new subclasses.

Organizational classification

In a number of circumstances we wish to classify organizations. There are many approaches that could be taken for this. It can be based on the legal structure under which the organization operates. For example in UK legislation there are defined notions of Partnership, Limited Company (public, private) etc that can be used as a basis for classification. Alternatively organizations can be classified by the service they provide (e.g. Educational, Manufacturing, LegalService etc).

The core organization ontology is neutral with respect to such choices. It is anticipated that applications to particular domains will introduce subclasses of org:Organization to reflect the domain requirements.

Note that the core supports labelling an organization according to some external classification scheme through use of the org:classification property. This is appropriate for cases where the labelling is not intrinsic to the organization and doesn't affect other aspects of the modelling. This is not always appropriate. For example, only Charities have CharityNumbers so it would be better to represent a Charity as a subClassOf FormalOrganization rather than via a taxonomic labelling.

3. Reporting relationships and roles

Property: org:memberOf (foaf:Agent -> org:Organization)
Indicates that a person is a member of the Organization with no indication of the nature of that membership or the role played. Note that the choice of property name is not meant to limit the property to only formal membership arrangements, it is also indended to cover related concepts such as affilliation or other involvement in the organization. Extensions can specialize this relationship to indicate particular roles within the organization or more nuanced relationships to the organization. Has an optional inverse, `org:hasmember`.

Property: org:hasMember (org:Organization -> foaf:Agent, equivalent property to foaf:member)
Indicates a person who is a member of the subject Organization. Inverse of `org:memberOf`, see that property for further clarification. Provided for compatibility with `foaf:member`.

Property: org:reportsTo (foaf:Agent -> foaf:Agent)
Indicates a reporting relationship as might be depicted on an organizational chart. The precise semantics of the reporting relationship will vary by organization but is intended to encompass both direct supervisory relationships (e.g. carrying objective and salary setting authority) and more general reporting or accountability relationships (e.g. so called dotted line reporting).

Class: org:Role subClassOf skos:Concept
Denotes a role that a Person or other Agent can take in an organization. Instances of this class describe the abstract role; to denote a specific instance of a person playing that role in a specific organization use an instance of org:Membership. It is common for roles to be arranged in some taxonomic structure and we use SKOS to represent that. The normal SKOS lexical properties should be used when labelling the Role. Additional descriptive properties for the Role, such as a Salary band, may be added by extension vocabularies.

Class: org:Membership
Indicates the nature of an Agent's membership of an organization. Represents an n-ary relation between an Agent, an Organzation and a Role. It is possible to directly indicate membership, independent of the specific Role, through use of the org:memberOf property.

Property: org:member (org:Membership -> foaf:Agent)
Indicates the Person (or other Agent including Organization) involved in the Membership relationship. Inverse of org:hasMembership

Property: org:organization (org:Membership -> org:Organization)
Indicates Organization in which the Agent is a member.

Property: org:role (org:Membership -> org:Role)
Indicates the Role that the Agent plays in a Membership relationship with an Organization.

Property: org:hasMembership (foaf:Agent -> org:Membership)
Indicates a membership relationship that the Agent plays. Inverse of org:member.

Property: org:memberDuring (org:Membership -> owlTime:Interval)
Optional property to indicate the interval for which the membership is/was valid.

Property: org:roleProperty (org:Role -> rdf:Property)
This is a metalevel property which is used to annotate an org:Role instance with a sub-property of org:memberOf that can be used to directly indicate the role for easy of query. The intended semantics is a Membership relation involving the Role implies the existence of a direct property relationship through an inference rule of the form: { [] org:member ?p; org:organization ?o; org:role [org:roleProperty ?r] } -> {?p ?r ?o}.

Property: org:headOf (foaf:Agent -> org:Organization) subPropertyOf org:memberOf
Indicates that a person (or other agent) is the leader or formal head of the Organization. This will normally mean that they are the root of the org:reportsTo (acyclic) graph, though an organization may have more than one head.

Property: org:remuneration (org:Membership ->)
Indicates a salary or other reward associated with the role. Typically this will be denoted using an existing representation scheme such as gr:PriceSpecification but the range is left open to allow applications to specialize it (e.g. to remunerationInGBP).


In some applications then it is sufficient to represent the role of an individual within an Organization by specializations of org:memberOf, as in the builtin example org:headOf.

However, in general it is advantageous to have an explicit representation of the organizational role (e.g. to enable advertising of a post or for publication of salary ranges associated with the role), this is supported by the org:Role class. The situation of an Agent fulfilling that role within an organization is then expressed through instances of the org:Membership n-ary relation. This also makes it possible to annotate the relationship with qualifying information such as duration, salary, reference to the employment contract and so forth.

For example:

<> a org:FormalOrganization;
    skos:prefLabel "Epimorphics Ltd" .

eg:ctoRole a org:Role;
    rdfs:label "CTO" .
[] a org:Membership;
    org:member <> ;
    org:organization <> ;
    org:role eg:ctoRole;
    org:memberDuring [a owlTime:Interval; owlTime:hasBeginning [
                      owlTime:inXSDDateTime "2009-11-01T09:00:00Z"^^xsd:dateTime]] .

Since this representation can be a little less convenient to query and explore via linked-data browsing tools the core allows both explicit roles and simple direct relations to be used simultaneously. The relationship between the Role resource and the corresponding property can be indicated through the org:roleProperty annotation. Thus we might extend the above example with:

eg:ctoRole a org:Role;
    org:roleProperty eg:ctoOf .
eg:ctoOf a owl:ObjectProperty, rdf:Property ;
    rdfs:label "CTO" ;
    rdfs:subPropertyOf org:memberOf .
  eg:ctoOf <> . 

In practice we antipate tool chains generating the org:Membership instances and a simple closure rule being used to add any corresponding short-cut specializations of org:memberOf.

4. Location

Class: org:Site
An office or other premise at which the organization is located. Many organizations are spread across multiple sites and many sites will host multiple locations. In most cases a Site will be a physical location. However, we don't exclude the possibility of non-physical sites such as a virtual office with an associated post box and phone reception service. Extensions may provide subclasses to denote particular types of site.

Property: org:siteAddress (org:Site -> vcard:VCard)
Indicates a VCard (using the vocabulary) for the site. This can include email, telephone, and geo-location details as well as an address.

Property: org:hasSite (org:Organization -> org:Site)
Indicates a site at which the Organization has some presence even if only indirect (e.g. virtual office or a professional service which is acting as the registered address for a company). Inverse of org:siteOf.

Property: org:siteOf (org:Site -> org:Organization)
Indicates an Organization which has some presence at the given site. This is the inverse of org:hasSite.

Property: org:hasPrimarySite (org:Organization -> org:Site) subPropertyOf org:hasSite
Indicates a primary site for the Organization, this is the default means by which an Organization can be contacted and is not necessarily the formal headquarters.

Property: org:hasRegisteredSite (org:FormalOrganization -> org:Site) subPropertyOf org:hasPrimarySite
Indicates the legally registered site for the organization, in many legal jurisdictions there is a requirement that FormalOrganizations such as Companies or Charities have such a primary designed site.

Property: org:basedAt (foaf:Person -> org:Site)
Indicates the site at which a person is based. We do not restrict the possibility that a person is based at multiple sites.

Property: org:location (foaf:Person -> xsd:string)
Gives a location description for a person within the organization, for example a Mail Stop for internal posting purposes.

5. Projects and other activities

Class: org:OrganizationalCollaboration (subClassOf org:Organization)
A collaboration between two or more Organizations such as a project. It meets the criteria for being an Organization in that it has an identity and defining purpose independent of its particular members but is neither a formally recognized legal entity nor a sub-unit within some larger organization. Might typically have a shorter lifetime than the Organizations within it, but not necessarily. All members are org:Organizations rather than individuals and those Organizations can play particular roles within the venture. Alternative names: Project Venture Endeavour Consortium

6. Historical information

Any aspect of organizational structure is subject to change over time. For the most part this should be handled by an external mechanism such as named graphs. When Organizations change substantially (not simply a change of personnel or internal structure, for example a merger to create a new organization) then the new Organization will typically be denoted by a new URI and we need some vocabulary to describe that change over time and the relationship between the original and resulting resouces. The Event mechanism here gives a generic hook for this, building upon the OPMV Provenance Vocabulary.

Class: org:ChangeEvent (subClassOf opmv:Process)
Represents an event which resulted in a major change to an organization such as a merger or complete restructuring. It is intended for situations where the resulting organization is sufficient distinct from the original organizations that it has a distinct identity and distinct URI. Extension vocabularies should define sub-classes of this to denote particular categories of event. The instant or interval at which the event occurred should be given by `opmv:wasGeneratedAt`, a description should be given by `dct:description`.

Property: org:originalOrganization (org:ChangeEvent -> org:Organization) subPropertyOf opmv:used
Indicates one or more organizations that existed before the change event. Depending on the event they may or may not have continued to exist after the event. Inverse of `org:changedBy`. Note that in specializing the OPMV vocabulary we are treating an `org:Organization` as an `opmv:Artifact`, which is consistent with the OPM model.

Property: org:changedBy (org:Organization -> org:ChangeEvent)
Indicates a change event which resulted in a change to this organization. Depending on the event the organization may or may not have continued to exist after the event. Inverse of `org:originalOrganzation`.

Property: org:resultedFrom (org:Organization -> org:ChangeEvent) subPropertyOf opmv:wasGeneratedBy
Indicates an event which resulted in (led to, generated) this organization. Inverse of `org:resultingOrganization`. Note that in specializing the OPMV vocabulary we are treating an `org:Organization` as an `opmv:Artifact`, which is consistent with the OPM model.

Property: org:resultingOrganization (org:ChangeEvent -> org:Organization)
Indicates an organization which was created or changed as a result of the event. Inverse of `org:resultedFrom`.

7. Acknowledgements

This ontology was developed as part of the UK Linked Data Kernel project under the leadership and guidance of John Sheridan (The National Archives). Jeni Tennison provided immensely useful feedback and suggestions on the first draft, which greatly improved its design. The work also took inspiration from a number of other ontologies, particularly the thoughtfully designed Gazette Organization ontology and Proton-top.

8. License

The ontology source is made available under the Public Domain Dedication and License v1.0 whose full text can be found at:

This work, the documentation page, is licensed under the Creative Commons Attribution 2.0 UK: England & Wales License.

9. Change history

Changes since previous version 0.3 2010-06-09:

Changes since previous version 0.2 2010-06-07:

Changes since previous version 0.1 2010-05-28: