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.
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).
This ontology defines:
This document uses the following terms:
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#> .
adp:Agent
foaf:Agent
. Disjoint
with adp:Service
.adp:PersonAgent
adp:Agent
, foaf:Person
.adp:OrganizationAgent
adp:Agent
, foaf:Organization
.adp:AutomatedAgent
adp:Agent
.adp:EssentialService
adp:Agent
.adp:ContentProvider
adp:Agent
.adp:Service
rdfs:Resource
.adp:Metadata
rdfs:Resource
.adp:SolidPod
adp:Service
.adp:hasService
owl:ObjectProperty
. Domain: adp:Agent
.
Range: adp:Service
.adp:hasMetadata
owl:ObjectProperty
. Domain:
owl:unionOf (adp:Agent adp:Service)
. Range:
adp:Metadata
.adp:webid
owl:ObjectProperty
. Domain: adp:Agent
.
Range: foaf:Agent
.adp:hasSolidPod
owl:ObjectProperty
. Domain: adp:Agent
.
Range: adp:SolidPod
.adp:metadataType
owl:DatatypeProperty
. Domain:
adp:Metadata
. Range: rdfs:Literal
.adp:sparqlEndpoint
, adp:serviceEndpoint
,
adp:hasTwitterAccount
,
adp:hasLinkedinAccount
,
adp:hasGithubAccount
,
adp:hasEcashAccount
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 ; ] .
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
.
@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> .
{ "@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" } }
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, W3C Human Centric AI Community Group, Solid Community, and WebCivics contributors. Development was assisted by xAI Grok 3 and Google Gemini 2.5 Pro.