The Agent Discovery Protocol (ADP) Ontology defines a vocabulary for describing agents, their services, and related resources in a decentralized web ecosystem. It leverages RDF, OWL, and SHACL to enable machine-readable metadata for agent discovery, supporting interoperability with WebID and Solid.

This is a Working Draft of the ADP Ontology for community review. Feedback is welcome via the GitHub repository.

Introduction

The Agent Discovery Protocol (ADP) facilitates the discovery of agents (e.g., persons, organizations, or services) and their associated resources on the web. This ontology provides a standardized vocabulary to describe agents, services, metadata, and relationships, enabling interoperable, decentralized applications. It builds on W3C standards like RDF, OWL, WebID, and aligns with Solid for personal data management.

Scope

This ontology defines:

Terminology

This document uses the following terms:

Agent
An entity (e.g., person, organization, or service) identified by a URI, typically a domain or subdomain.
Service
A discoverable resource (e.g., API, data store) associated with an agent.
Metadata
Descriptive information about an agent or service (e.g., name, type).
WebID
A URI identifying an agent, per the WebID specification.
Solid POD
A personal online data store, per the Solid Protocol.

Ontology Definition

The ADP Ontology is defined using OWL and serialized in RDF. It includes classes, properties, and constraints to describe agents and their resources.

Namespace

The namespace for ADP is http://w3id.org/adp#. Prefixes used:

@prefix adp: <http://w3id.org/adp#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
        

Classes

adp:Agent

An entity acting on the web, such as a person, organization, or automated service.

  • rdfs:subClassOf: foaf:Agent
  • owl:disjointWith: adp:Service
adp:PersonAgent

An agent representing a natural person.

  • rdfs:subClassOf: adp:Agent, foaf:Person
adp:OrganizationAgent

An agent representing an organization.

  • rdfs:subClassOf: adp:Agent, foaf:Organization
adp:AutomatedAgent

An agent representing an automated service or bot.

  • rdfs:subClassOf: adp:Agent
adp:Service

A resource provided by an agent, such as an API or data endpoint.

  • rdfs:subClassOf: rdfs:Resource
adp:Metadata

Descriptive information about an agent or service.

  • rdfs:subClassOf: rdfs:Resource
adp:SolidPod

A personal data store associated with an agent, per the Solid Protocol.

  • rdfs:subClassOf: adp:Service

Properties

adp:hasService

Links an agent to a service it provides.

  • rdf:type: owl:ObjectProperty
  • rdfs:domain: adp:Agent
  • rdfs:range: adp:Service
adp:hasMetadata

Associates metadata with an agent or service.

  • rdf:type: owl:ObjectProperty
  • rdfs:domain: owl:unionOf (adp:Agent adp:Service)
  • rdfs:range: adp:Metadata
adp:webid

Links an agent to its WebID URI for identification.

  • rdf:type: owl:ObjectProperty
  • rdfs:domain: adp:Agent
  • rdfs:range: foaf:Agent
adp:hasSolidPod

Links an agent to its Solid POD.

  • rdf:type: owl:ObjectProperty
  • rdfs:domain: adp:Agent
  • rdfs:range: adp:SolidPod
adp:metadataType

Specifies the type of metadata (e.g., profile, access policy).

  • rdf:type: owl:DatatypeProperty
  • rdfs:domain: adp:Metadata
  • rdfs:range: rdfs:Literal

Axioms and Constraints

The ontology includes axioms to ensure data integrity, enforced via SHACL shapes.

# SHACL Shape for adp:Agent
adp:AgentShape a sh:NodeShape ;
  sh:targetClass adp:Agent ;
  sh:property [
    sh:path adp:webid ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:nodeKind sh:IRI ;
  ] ;
  sh:property [
    sh:path adp:hasMetadata ;
    sh:minCount 1 ;
  ] .

# SHACL Shape for adp:Service
adp:ServiceShape a sh:NodeShape ;
  sh:targetClass adp:Service ;
  sh:property [
    sh:path adp:hasMetadata ;
    sh:minCount 1 ;
  ] .
      

Serialization Examples

Below are examples in RDF Turtle and JSON-LD.

RDF Turtle

@prefix adp: <http://w3id.org/adp#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<https://example.com/john> a adp:PersonAgent ;
  foaf:name "John Doe" ;
  adp:webid <https://example.com/john#me> ;
  adp:hasService <https://example.com/api> ;
  adp:hasSolidPod <https://example.com/john/pod> ;
  adp:hasMetadata [
    a adp:Metadata ;
    adp:metadataType "profile" ;
    foaf:mbox <mailto:john@example.com>
  ] .

<https://example.com/api> a adp:Service ;
  adp:hasMetadata [
    a adp:Metadata ;
    adp:metadataType "description" ;
    rdfs:label "User API"
  ] .

<https://example.com/org> a adp:OrganizationAgent ;
  foaf:name "Example Corp" ;
  adp:webid <https://example.com/org#id> ;
  adp:hasService <https://example.com/org/api> .
        

JSON-LD

{
  "@context": {
    "adp": "http://w3id.org/adp#",
    "foaf": "http://xmlns.com/foaf/0.1/",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#"
  },
  "@id": "https://example.com/john",
  "@type": "adp:PersonAgent",
  "foaf:name": "John Doe",
  "adp:webid": {"@id": "https://example.com/john#me"},
  "adp:hasService": {"@id": "https://example.com/api"},
  "adp:hasSolidPod": {"@id": "https://example.com/john/pod"},
  "adp:hasMetadata": {
    "@type": "adp:Metadata",
    "adp:metadataType": "profile",
    "foaf:mbox": "mailto:john@example.com"
  }
}
        

Use Cases

Security and Privacy Considerations

Implementations MUST:

Conformance

Conforming implementations MUST support RDF Turtle and JSON-LD serializations, adhere to SHACL constraints, and use the adp: namespace.

Acknowledgements

Thanks to the W3C Semantic Web Interest Group, Solid Community, and WebCivics contributors.