Skip to content

Add DOAP file for the XSF's library list (XEP-0453) - #271

Open
FYHenry wants to merge 16 commits into
strophe:masterfrom
FYHenry:doap
Open

FYHenry wants to merge 16 commits into
strophe:masterfrom
FYHenry:doap

Conversation

@FYHenry

@FYHenry FYHenry commented Nov 9, 2026

Copy link
Copy Markdown

Implement XEP-0453

Today the XMPP Standard Foundation advertises XMPP based programs in it's database. To be correctly registered each program needs a new metadata file : DOAP1 to describe the software project.

Request to Strophe

In practice a new file doap.xml can be written in the Git repository of libstrophe. Each XMPP RFC or XEP has to be added after implementation.

As you can see I began my code analysis to identify the first RFC and XEP implemented in this library.

I recommend this DOAP file because Strophe project deserves more visibility.

Request to XSF

After acceptation of this request I'll can request to XSF the link to this DOAP file2. After each update of doap.xml, libstrophe's description will be automatically updated in XSF`s library list.

Footnotes

  1. DOAP usage in XMPP : https://xmpp.org/extensions/xep-0453.html. ↩

  2. XSF's software list : https://github.com/xsf/xmpp.org/blob/master/data/software.json. ↩

@FYHenry
FYHenry marked this pull request as ready for review November 9, 2026 17:42

@sjaeckel sjaeckel left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR! Looks useful.

Could you please add documentation on how this file can be maintained? I'm not too keen on editing an XML file manually, sorry :)

Comment thread doap.xml Resolved
Comment thread doap.xml Resolved
Comment thread doap.xml Resolved
Comment thread doap.xml Resolved
@FYHenry

FYHenry commented Nov 10, 2026 •

Copy link
Copy Markdown
Author

Documentation

For maintainers and developers I transmit my knowledge about DOAP and DOAP-XMPP extension.

DOAP project

The DOAP file is written in RDF dialect, itself XML dialect. It is dedicated to describe a software project.

Project

The main element is class Project.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://www.w3.org/2000/01/rdf-schema#"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://usefulinc.com/ns/doap#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/"
  xmlns:xmpp="https://linkmauve.fr/ns/xmpp-doap#"
  xmlns:schema="https://schema.org/">
  <Project>
  <!-- Project properties -->
  </Project>
</rdf:RDF>

Name

The element name is project name.

<name>libstrophe</name>

Natural language

The element language is main natural language. It is the default value of property xml:lang.
Typically a two-letters code defined by BCP47 ou RFC 4647.

<language>en</language>

Creation date

The element created is project's creation date. The date format is defined by ISO 8601.

<created>2005-06-14</created>

Short description

The element shortdesc describes in some words the project. It is translatable with property xml:lang.

<shortdesc xml:lang="en">C library for XMPP clients</shortdesc>

Long description

The element description describes in detail the project by one paragraph at least. It is translatable with property xml:lang.

<description xml:lang="fr">libstrophe est une bibliothèque légère […].
Elle a un minimum de dépendances […].</description>

License

The element description returns the legal license source. For example an URL to the file LICENSE in Git repository.

<license
  rdf:resource="https://github.com/strophe/libstrophe/blob/master/COPYING" />

Programming language

The element programming-language refers to main programming language.

<programming-language>C</programming-language>

Operating system

The element os limits what operating system is supported.
Without it any operating system is supported.

<os>Linux</os>

Platform

The element platform limits what platform (OS excluded) is supported.
Without it any platform is supported.

<platform>Firefox</platform>

Home page

The element homepage refers to the home page.

<homepage rdf:resource="https://strophe.im/libstrophe/" />

Download page

The element download-page refers to the Web page where the built program can be downloaded. Useful if it is not in the home page.

<download-page rdf:resource="https://github.com/strophe/libstrophe/releases" />

Documentation

The element documentation refers to the user guide. Typically a Web page link.

<documentation rdf:resource="https://strophe.im/libstrophe/doc/0.13.0" />

Bug database

The element bug-database refers to the place where bugs are managed. Typically the issues manager interface in software forge.

<bug-database rdf:resource="https://github.com/strophe/libstrophe/issues" />

Developer forum

The element developer-forum refers to developers forum, were source code contributors communicate. Typically a bulletin board system link.

<developer-forum rdf:resource="https://groups.google.com/g/libstrophe" />

Support forum

The element support-forum refers to users forum, were target users communicate. Typically a bulletin board system link.

<support-forum rdf:resource="https://groups.google.com/g/libstrophe" />

Mailing list

The element mailing-list describes how to contact the team. Typically an e-mail link or a HTTP link.

<mailing-list rdf:resource="mailto:libstrophe@googlegroups.com" />

Release

The element release describes each release.

<release>
  <Version>
    <revision>0.14.0</revision>
    <created>2025-03-13</created>
    <file-release
      rdf:resource="https://github.com/strophe/libstrophe/releases/download/0.14.0/libstrophe-0.14.0.tar.gz" />
  </Version>
</release>

The release includes its revision revision, its creation date created and the artifact file-release. revision frequently reflects the version name or Git tag name. Creation date format is defined by ISO-8601. File release is typically a link to download archive file.

Maintainer

The element maintainer describes a project maintainer. Typically a human.

<maintainer>
  <foaf:Person>
    <foaf:name>Steffen “sjaeckel” Jaeckel</foaf:name>
    <foaf:mbox rdf:resource="mailto:gh@jaeckel.eu" />
    <foaf:homepage rdf:resource="https://github.com/sjaeckel" />
  </foaf:Person>
</maintainer>

Maintainer is named by element foaf:name, at least its nickname. To complete one can add its mail address in element foaf:mbox, typically an e-mail link. If the maintainer has personal home page, its can be added in element foaf:homepage, typically HTTP link.

Audience

The element audience describes target users. It is translatable with property xml:lang.

<audience xml:lang="en">Developers</audience>

Repository

The element repository describes the source code repository.

<repository>
  <GitRepository>
    <location rdf:resource="https://github.com/strophe/libstrophe.git"/>
    <browse rdf:resource="https://github.com/strophe/libstrophe"/>
  </GitRepository>
</repository>

Implementation

The element implements indicates what specification is implemented. Typically a link to RFC or ISO document.

<implements rdf:resource="https://www.rfc-editor.org/info/rfc6120/" />

XMPP-DOAP extension

Defined by XEP-0453 XMPP-DOAP includes specificity of XMPP.

Implementation

The element implements indicates what specification is implemented.

<implements>
  <xmpp:SupportedXep>
    <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0030.html" />
    <xmpp:status>complete</xmpp:status>
    <xmpp:version>2.5.0</xmpp:version>
    <xmpp:since>0.7.0</xmpp:since>
    <xmpp:note xml:lang="en">Service Discovery</xmpp:note>
  </xmpp:SupportedXep>
</implements>

To describe XEP an element xmpp:xep returns Web page URL.

xmpp:status returns the completion status.

xmpp:version returns the last version name when XEP was implemented1.

xmpp:since returns the project version name when the XEP was implemented.

xmpp:note Is an optional description. It can detail the implementation. Recommended if the implementation is not complete. It is translatable with property xml:lang.

Footnotes

  1. Version values are enumerated in Revision History section in XEP document. ↩

@FYHenry

FYHenry commented Nov 10, 2026

Copy link
Copy Markdown
Author

Thanks for the PR! Looks useful.

Could you please add documentation on how this file can be maintained? I'm not too keen on editing an XML file manually, sorry :)

Do you prefer I document :

  • In CONTRIBUTION.md,
  • In the Github wiki,
  • In embedded Doxygen document,
  • As comments in doap.xml ?

@sjaeckel

sjaeckel commented Nov 10, 2026 •

Copy link
Copy Markdown
Member

Do you prefer I document :

I would prefer if you could document which tools one can use in order to not write XML by hand.

If there are no tools to maintain this (and therefore be able to at least halfway automate it) I doubt it will be kept up-to-date since I don't plan to edit XML files manually.

@sjaeckel

Copy link
Copy Markdown
Member

Thanks for your last commit. That's the perfect case in point of why I would hesitate to merge this, since there's no tooling to maintain it.

@jubalh

jubalh commented Nov 11, 2026

Copy link
Copy Markdown
Member

Just my 2ct: We have a doap file in Profanity since some time: https://github.com/profanity-im/profanity/blob/master/profanity.doap
Once it's written it's not really hard to maintain it. For libstrophe it will probably mean just to add the new release once in a while? So even though it means editing XML, it's not really a complicated case, but copy paste and adjust a number :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants