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. The WebCard Utility is an implementation of ADP, available at https://webcivics.github.io/Webcard.

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. The WebCard Utility implements ADP, allowing users to create and query profiles (e.g., for sailingdigital.com).

Scope

This ontology defines:

Terminology

This document uses the following terms:

Ontology Definition

Namespace

The namespace for ADP is https://webcivics.github.io/adp/ontdev/adp#. Prefixes used:

@prefix adp: <https://webcivics.github.io/adp/ontdev/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 schema: <https://schema.org/> .
@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. Subclass of foaf:Agent. Disjoint with adp:Service.
adp:PersonAgent
An agent representing a natural person. Subclass of adp:Agent, foaf:Person.
adp:OrganizationAgent
An agent representing an organization. Subclass of adp:Agent, foaf:Organization.
adp:AutomatedAgent
An agent representing an automated service or bot. Subclass of adp:Agent.
adp:EssentialService
An agent representing a humanitarian service. Subclass of adp:Agent.
adp:ContentProvider
An agent representing a content provider (e.g., adult website). Subclass of adp:Agent.
adp:Service
A resource provided by an agent, such as an API or data endpoint. Subclass of rdfs:Resource.
adp:Metadata
Descriptive information about an agent or service. Subclass of rdfs:Resource.
adp:SolidPod
A personal data store, per the Solid Protocol. Subclass of adp:Service.

Properties

adp:hasService
Links an agent to a service it provides. Type: owl:ObjectProperty. Domain: adp:Agent. Range: adp:Service.
adp:hasMetadata
Associates metadata with an agent or service. Type: owl:ObjectProperty. Domain: owl:unionOf (adp:Agent adp:Service). Range: adp:Metadata.
adp:webid
Links an agent to its WebID URI. Type: owl:ObjectProperty. Domain: adp:Agent. Range: foaf:Agent.
adp:hasSolidPod
Links an agent to its Solid POD. Type: owl:ObjectProperty. Domain: adp:Agent. Range: adp:SolidPod.
adp:metadataType
Specifies the type of metadata (e.g., profile). Type: owl:DatatypeProperty. Domain: adp:Metadata. Range: rdfs:Literal.
adp:sparqlEndpoint, adp:serviceEndpoint, adp:hasTwitterAccount, adp:hasLinkedinAccount, adp:hasGithubAccount, adp:hasEcashAccount
Links an agent to specific services or accounts.

Axioms and Constraints

The ontology includes SHACL shapes to ensure data integrity.

# 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. The data for sailingdigital.com can be queried using the WebCard Utility API, e.g., https://webcivics.github.io/Webcard/?domain=sailingdigital.com&field=foaf:name.

RDF Turtle

@prefix adp: <https://webcivics.github.io/adp/ontdev/adp#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix schema: <https://schema.org/> .

<https://sailingdigital.com> a adp:PersonAgent ;
  foaf:name "Timothy Holborn" ;
  adp:webid <https://ubiquitous.solidcommunity.net/profile/card#me> ;
  adp:hasTwitterAccount "SailingDigital" ;
  adp:hasLinkedinAccount "ubiquitous" ;
  adp:hasGithubAccount "timothy-holborn" ;
  adp:hasMetadata [
    a adp:Metadata ;
    adp:metadataType "profile" ;
    foaf:mbox <mailto:timothy.holborn@gmail.com>
  ] .

<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": "https://webcivics.github.io/adp/ontdev/adp#",
    "foaf": "http://xmlns.com/foaf/0.1/",
    "schema": "https://schema.org/",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#"
  },
  "@id": "https://sailingdigital.com",
  "@type": "adp:PersonAgent",
  "foaf:name": "Timothy Holborn",
  "adp:webid": {"@id": "https://ubiquitous.solidcommunity.net/profile/card#me"},
  "adp:hasTwitterAccount": "SailingDigital",
  "adp:hasLinkedinAccount": "ubiquitous",
  "adp:hasGithubAccount": "timothy-holborn",
  "adp:hasMetadata": {
    "@type": "adp:Metadata",
    "adp:metadataType": "profile",
    "foaf:mbox": "mailto:timothy.holborn@gmail.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, W3C Human Centric AI Community Group, Solid Community, and WebCivics contributors. Development was assisted by xAI Grok 3 and Google Gemini 2.5 Pro.