Skip to content

Extended FOAF Demo Project

julijaovcinnikova edited this page Jul 21, 2026 · 6 revisions

Extended FOAF Demo Project

This repository contains an extended FOAF demo ontology used to illustrate the updated web-based OWLGrEd visual notation and tooling for OWL 2 ontology management. The example reuses the FOAF vocabulary and adds a small set of local concepts for demonstrating alternative visual representations of individuals and classifier-based controlled value sets.

Graphical OWL ontology (Extended FOAF)

The Extended FOAF ontology is based on the FOAF vocabulary and focuses on people, agents, groups, organisations, profiles, interests, and community-related information. Existing FOAF classes and properties are reused where possible, while a small extension introduces classifier examples for values that may be represented as literals, OWL individuals, SKOS concepts, or both OWL individuals and SKOS concepts.

The example demonstrates separate individual nodes, compact individual lists inside class nodes, dedicated individual list nodes with selected property values, and four classifier modes.

FOAF_full

Extended FOAF OWLGrEd Project

The Extended FOAF demo project for the OWLGrEd editor is available for download.
The project contains the graphical OWL ontology used in the demo.

Project file:
FOAF_Extended_Project.json

How to Open the Project in OWLGrEd

To load the project into the OWLGrEd editor:

  1. Create a new user. See Getting-Started
  2. Create a new OWLGrEd project. See Create a new project
  3. In the upper project toolbar, click the Upload Project button. See Download and Upload Project
  4. Select the downloaded project JSON file.

After uploading, the Extended FOAF ontology diagram will appear in the editor and can be explored or modified.

Individual Representations

OWLGrEd supports three complementary visual representations of OWL individuals.

Separate individual node

An individual can be shown as a separate graphical node together with its class and property assertions.

Individual list inside a class node

Individuals can be displayed as a compact list inside the corresponding class node. A selected data property may be used as the display label, while the individual IRI is shown in parentheses.

The number of individuals shown graphically can be limited. Individuals beyond the visible limit remain in the ontology and are still available for inspection, editing, and export.

Dedicated individual list node

A dedicated individual list node can show individuals of a selected class together with selected property values in a table-like form.

The number of graphically visible individuals can be set separately for each dedicated individual list node.

Classifier-Based Controlled Value Sets

The Extended FOAF example demonstrates four classifier modes supported by OWLGrEd. All classifier types use the same basic visual structure, while the selected mode determines how the classifier and its values are represented in the exported ontology.

Datatype classifier - Gender

The Gender classifier represents a controlled set of literal values and is connected to the existing foaf:gender property. The original FOAF domain foaf:Agent is retained.

OWL Functional Syntax

Declaration( Class( :Person ) )
Declaration( DataProperty( :gender ) )
Declaration( Datatype( :Gender ) )

DataPropertyDomain( :gender :Person )
DataPropertyRange( :gender :Gender )

DatatypeDefinition(
  :Gender
  DataOneOf( "Male" "Female" )
) 

OWL individual classifier - ProfileStatus

The ProfileStatus classifier is represented as an OWL class, while its values are represented as named individuals. The property profileStatus is used for foaf:PersonalProfileDocument.

OWL Functional Syntax

Declaration(Class(foaf:PersonalProfileDocument))
Declaration(Class(:ProfileStatus))

Declaration(NamedIndividual(:Active))
Declaration(NamedIndividual(:Inactive))
Declaration(NamedIndividual(:Archived))

Declaration(ObjectProperty(:profileStatus))

ClassAssertion(:ProfileStatus :Active)
ClassAssertion(:ProfileStatus :Inactive)
ClassAssertion(:ProfileStatus :Archived)

DifferentIndividuals(:Active :Inactive :Archived)

EquivalentClasses(
  :ProfileStatus
  ObjectOneOf(:Active :Inactive :Archived)
)

ObjectPropertyDomain(:profileStatus foaf:PersonalProfileDocument)
ObjectPropertyRange(:profileStatus :ProfileStatus)

SKOS vocabulary classifier - InterestTopic

The InterestTopic classifier is represented as a skos:ConceptScheme, while its values are represented as skos:Concept instances. It is connected to the existing foaf:topic_interest property, whose original domain foaf:Agent is retained.

OWL Functional Syntax

Declaration(Class(skos:Concept))
Declaration(Class(skos:ConceptScheme))
Declaration(Class(foaf:Agent))

Declaration(NamedIndividual(:InterestTopic))
Declaration(NamedIndividual(:SemanticWeb))
Declaration(NamedIndividual(:ArtificialIntelligence))
Declaration(NamedIndividual(:Databases))

Declaration(ObjectProperty(skos:inScheme))
Declaration(ObjectProperty(foaf:topic_interest))
Declaration(DataProperty(skos:notation))

ClassAssertion(skos:ConceptScheme :InterestTopic)

ClassAssertion(skos:Concept :SemanticWeb)
ClassAssertion(skos:Concept :ArtificialIntelligence)
ClassAssertion(skos:Concept :Databases)

ObjectPropertyAssertion(skos:inScheme :SemanticWeb :InterestTopic)
ObjectPropertyAssertion(skos:inScheme :ArtificialIntelligence :InterestTopic)
ObjectPropertyAssertion(skos:inScheme :Databases :InterestTopic)

DataPropertyAssertion(skos:notation :SemanticWeb "SW")
DataPropertyAssertion(skos:notation :ArtificialIntelligence "AI")
DataPropertyAssertion(skos:notation :Databases "DB")

ObjectPropertyDomain(foaf:topic_interest foaf:Agent)
ObjectPropertyRange(foaf:topic_interest skos:Concept)

SubClassOf(
  foaf:Agent
  ObjectAllValuesFrom(
    foaf:topic_interest
    ObjectIntersectionOf(
      skos:Concept
      ObjectHasValue(skos:inScheme :InterestTopic)
    )
  )
)

Classifier vocabulary - CommunityRole

The CommunityRole classifier combines the OWL individual classifier and SKOS vocabulary modes. The classifier is represented as an OWL class and as a SKOS concept scheme, while each value is represented both as an OWL individual and as a skos:Concept.

OWL Functional Syntax

Declaration(Class(skos:Concept))
Declaration(Class(skos:ConceptScheme))
Declaration(Class(foaf:Person))
Declaration(Class(:CommunityRole))

Declaration(AnnotationProperty(skos:notation))

Declaration(ObjectProperty(skos:inScheme))
Declaration(ObjectProperty(:communityRole))

Declaration(NamedIndividual(:CommunityRoleConceptScheme))
Declaration(NamedIndividual(:Member))
Declaration(NamedIndividual(:Moderator))
Declaration(NamedIndividual(:Administrator))

ClassAssertion(
  skos:ConceptScheme
  :CommunityRoleConceptScheme
)

ClassAssertion(:CommunityRole :Member)
ClassAssertion(skos:Concept :Member)
ObjectPropertyAssertion(
  skos:inScheme
  :Member
  :CommunityRoleConceptScheme
)
AnnotationAssertion(skos:notation :Member "MEM")

ClassAssertion(:CommunityRole :Moderator)
ClassAssertion(skos:Concept :Moderator)
ObjectPropertyAssertion(
  skos:inScheme
  :Moderator
  :CommunityRoleConceptScheme
)
AnnotationAssertion(skos:notation :Moderator "MOD")

ClassAssertion(:CommunityRole :Administrator)
ClassAssertion(skos:Concept :Administrator)
ObjectPropertyAssertion(
  skos:inScheme
  :Administrator
  :CommunityRoleConceptScheme
)
AnnotationAssertion(skos:notation :Administrator "ADM")

DifferentIndividuals(
  :Member
  :Moderator
  :Administrator
)

ObjectPropertyDomain(
  :communityRole
  foaf:Person
)

ObjectPropertyRange(
  :communityRole
  :CommunityRole
)

EquivalentClasses(
  :CommunityRole
  ObjectOneOf(
    :Member
    :Moderator
    :Administrator
  )
)