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.
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.
This ontology defines:
This document uses the following terms:
The ADP Ontology is defined using OWL and serialized in RDF. It includes classes, properties, and constraints to describe agents and their resources.
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#> .
adp:Agent
An entity acting on the web, such as a person, organization, or automated service.
foaf:Agent
adp:Service
adp:PersonAgent
An agent representing a natural person.
adp:Agent
, foaf:Person
adp:OrganizationAgent
An agent representing an organization.
adp:Agent
, foaf:Organization
adp:AutomatedAgent
An agent representing an automated service or bot.
adp:Agent
adp:Service
A resource provided by an agent, such as an API or data endpoint.
rdfs:Resource
adp:Metadata
Descriptive information about an agent or service.
rdfs:Resource
adp:SolidPod
A personal data store associated with an agent, per the Solid Protocol.
adp:Service
adp:hasService
Links an agent to a service it provides.
owl:ObjectProperty
adp:Agent
adp:Service
adp:hasMetadata
Associates metadata with an agent or service.
owl:ObjectProperty
owl:unionOf (adp:Agent adp:Service)
adp:Metadata
adp:webid
Links an agent to its WebID URI for identification.
owl:ObjectProperty
adp:Agent
foaf:Agent
adp:hasSolidPod
Links an agent to its Solid POD.
owl:ObjectProperty
adp:Agent
adp:SolidPod
adp:metadataType
Specifies the type of metadata (e.g., profile, access policy).
owl:DatatypeProperty
adp:Metadata
rdfs:Literal
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 ; ] .
Below are examples in RDF Turtle and JSON-LD.
@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> .
{ "@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" } }
Implementations MUST:
Conforming implementations MUST support RDF Turtle and JSON-LD serializations, adhere to SHACL constraints, and use the adp:
namespace.
Thanks to the W3C Semantic Web Interest Group, Solid Community, and WebCivics contributors.