Internet-Draft An Ontology for RFCs January 2024
Petit-Huguenin Expires 25 July 2024 [Page]
Workgroup:
Network Working Group
Published:
Intended Status:
Experimental
Expires:
Author:
M. Petit-Huguenin
Impedance Mismatch LLC

An Ontology for RFCs

Abstract

This document defines an ontology that describes the specifications published by the RFC Editor, together with ancillary documents.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 25 July 2024.

Table of Contents

1. Introduction

This document defines an ontology that describes the specifications published by the RFC Editor, together with ancillary documents like errata and RFC series.

This effort is the continuation of the RFC-Prolog database that was described in one of the position papers presented at the IAB Workshop on Analyzing IETF Data (AID) [RFC9307]. The schema in that database was simplified and reformulated as an ontology.

2. The RFC Ontology

The RFC Ontology extends the Bibliographic Ontology [BIBO] and reuse elements from the Friend of a friend [FOAF] and DCMI Metadata Terms [DCTERMS] ontologies.

Table 1
Name bcp
URI ftp://shalmaneser.org/rfc#bcp
Type property
Label BCP
Comment The BCP this RFC is part of.
Inverse of http://purl.org/dc/terms/hasPart
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#Bcp
Table 2
Name corrects
URI ftp://shalmaneser.org/rfc#corrects
Type property
Label Corrects
Comment The RFC that this errata corrects.
Subproperty of http://purl.org/ontology/bibo/annotates
Has Domain ftp://shalmaneser.org/rfc#Errata
Range Includes ftp://shalmaneser.org/rfc#Rfc
Table 3
Name currentStatus
URI ftp://shalmaneser.org/rfc#currentStatus
Type property
Label Current RFC status
Comment The current status of this RFC.
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#RfcStatus
Table 4
Name errataStatus
URI ftp://shalmaneser.org/rfc#errataStatus
Type property
Label Errata status
Comment The status of an errata.
Has Domain ftp://shalmaneser.org/rfc#Errata
Range Includes ftp://shalmaneser.org/rfc#ErrataStatus
Table 5
Name fyi
URI ftp://shalmaneser.org/rfc#fyi
Type property
Label FYI
Comment The FYI this RFC is part of.
Inverse of http://purl.org/dc/terms/hasPart
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#Fyi
Table 6
Name informativelyReferences
URI ftp://shalmaneser.org/rfc#informativelyReferences
Type property
Label Informatively References
Comment An informative reference in an RFC.
Subproperty of http://purl.org/ontology/bibo/cites
Has Domain ftp://shalmaneser.org/rfc#Rfc
Table 7
Name normativelyReferences
URI ftp://shalmaneser.org/rfc#normativelyReferences
Type property
Label Normatively References
Comment A normative reference in an RFC.
Subproperty of http://purl.org/ontology/bibo/cites
Has Domain ftp://shalmaneser.org/rfc#Rfc
Table 8
Name obsoletedBy
URI ftp://shalmaneser.org/rfc#obsoletedBy
Type property
Label Obsoleted By
Comment The RFC that obsoleted this RFC.
Subproperty of http://purl.org/dc/terms/isReplacedBy
Inverse of ftp://shalmaneser.org/rfc#obsoletes
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#Rfc
Table 9
Name obsoletes
URI ftp://shalmaneser.org/rfc#obsoletes
Type property
Label Obsoletes
Comment An RFC that this RFC obsoletes.
Subproperty of http://purl.org/dc/terms/replaces
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#Rfc
Table 10
Name processedBy
URI ftp://shalmaneser.org/rfc#processedBy
Type property
Label Processed by
Comment The person or organization that processed that errata.
Has Domain ftp://shalmaneser.org/rfc#Errata
Range Includes http://xmlns.com/foaf/0.1/Agent
Table 11
Name publicationStatus
URI ftp://shalmaneser.org/rfc#publicationStatus
Type property
Label RFC publication status
Comment The status of this RFC at the time it was published.
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#RfcStatus
Table 12
Name reportedBy
URI ftp://shalmaneser.org/rfc#reportedBy
Type property
Label Reported by
Comment The person or organization that reported that errata.
Has Domain ftp://shalmaneser.org/rfc#Errata
Range Includes http://xmlns.com/foaf/0.1/Agent
Table 13
Name std
URI ftp://shalmaneser.org/rfc#std
Type property
Label STD
Comment The STD this RFC is part of.
Inverse of http://purl.org/dc/terms/hasPart
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#Std
Table 14
Name stream
URI ftp://shalmaneser.org/rfc#stream
Type property
Label RFC stream
Comment The stream that approved that RFC.
Table 15
Name type
URI ftp://shalmaneser.org/rfc#type
Type property
Label Errata type
Comment The type of the errata.
Has Domain ftp://shalmaneser.org/rfc#Errata
Range Includes ftp://shalmaneser.org/rfc#ErrataType
Table 16
Name updatedBy
URI ftp://shalmaneser.org/rfc#updatedBy
Type property
Label Updated By
Comment An RFC that this RFC updated.
Inverse of ftp://shalmaneser.org/rfc#updates
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#Rfc
Table 17
Name updates
URI ftp://shalmaneser.org/rfc#updates
Type property
Label Updates
Comment An RFC that this RFC updates.
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes ftp://shalmaneser.org/rfc#Rfc
Table 18
Name area
URI ftp://shalmaneser.org/rfc#area
Type datatype
Label IETF area
Comment The IETF area that produced that RFC.
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes http://www.w3.org/2001/XMLSchema#string
Table 19
Name initials
URI ftp://shalmaneser.org/rfc#initials
Type datatype
Label Initials
Comment The initials of an author of an RFC.
Has Domain http://xmlns.com/foaf/0.1/Person
Range Includes http://www.w3.org/2000/01/rdf-schema#Literal
Table 20
Name keyword
URI ftp://shalmaneser.org/rfc#keyword
Type datatype
Label RFC keyword
Comment One of the keywords of an RFC. See https://www.ietf.org/topics/keywords/.
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes http://www.w3.org/2001/XMLSchema#string
Table 21
Name processedOn
URI ftp://shalmaneser.org/rfc#processedOn
Type datatype
Label Processed on
Comment The date this errata was processed.
Subproperty of http://purl.org/dc/terms/date
Has Domain ftp://shalmaneser.org/rfc#Errata
Table 22
Name reportedOn
URI ftp://shalmaneser.org/rfc#reportedOn
Type datatype
Label Reported on
Comment The date this errata was reported.
Subproperty of http://purl.org/dc/terms/date
Has Domain ftp://shalmaneser.org/rfc#Errata
Table 23
Name wg
URI ftp://shalmaneser.org/rfc#wg
Type datatype
Label IETF WG
Comment The IETF Working Group that produced that RFC.
Has Domain ftp://shalmaneser.org/rfc#Rfc
Range Includes http://www.w3.org/2001/XMLSchema#string
Table 24
Name Bcp
URI ftp://shalmaneser.org/rfc#Bcp
Type class
Label BCP
Comment The Best Current Pratice (BCP) series of RFCs.
subClassOf http://purl.org/ontology/bibo/Series
Table 25
Name Errata
URI ftp://shalmaneser.org/rfc#Errata
Type class
Label RFC errata
Comment An errata for an RFC, published by the RFC Editor at https://www.rfc-editor.org/errata.php.
subClassOf http://purl.org/ontology/bibo/Note
Table 26
Name ErrataStatus
URI ftp://shalmaneser.org/rfc#ErrataStatus
Type class
Label RFC Errata Status
Comment The current status of an RFC errata.
Table 27
Name ErrataType
URI ftp://shalmaneser.org/rfc#ErrataType
Type class
Label RFC Errata Type
Comment The type of errata published by the RFC Editor.
Table 28
Name Fyi
URI ftp://shalmaneser.org/rfc#Fyi
Type class
Label FYI
Comment The For Your Information (FYI) series of RFCs.
subClassOf http://purl.org/ontology/bibo/Series
Table 29
Name Internet-Draft
URI ftp://shalmaneser.org/rfc#Internet-Draft
Type class
Label Internet Draft
Comment A working document of the IETF or other groups.
subClassOf http://purl.org/ontology/bibo/Specification
Table 30
Name Rfc
URI ftp://shalmaneser.org/rfc#Rfc
Type class
Label IETF RFC
Comment A document published by the RFC Editor at https://www.rfc-editor.org/.
subClassOf http://purl.org/ontology/bibo/Standard
Table 31
Name RfcStatus
URI ftp://shalmaneser.org/rfc#RfcStatus
Type class
Label RFC Status
Comment The status of an RFC.
Table 32
Name Std
URI ftp://shalmaneser.org/rfc#Std
Type class
Label STD
Comment The Standard (STD) series of RFCs.
subClassOf http://purl.org/ontology/bibo/Series
Table 33
Name Stream
URI ftp://shalmaneser.org/rfc#Stream
Type class
Label RFC Stream
Comment The community, known as "stream", that originated an RFC. See https://www.rfc-editor.org/info/rfc8729.
Table 34
Name bestCurrentPractice
URI ftp://shalmaneser.org/rfc#bestCurrentPractice
Type ftp://shalmaneser.org/rfc#RfcStatus
Label Best Current Practice RFC status
Comment An RFC that standardizes practices and the results of community deliberations.
Table 35
Name draftStandard
URI ftp://shalmaneser.org/rfc#draftStandard
Type ftp://shalmaneser.org/rfc#RfcStatus
Label Draft Standard RFC status
Comment The status of an RFC from which at least two independent and interoperable implementations from different code bases have been developed, and for which sufficient successful operational experience has been obtained.
Table 36
Name editorial
URI ftp://shalmaneser.org/rfc#editorial
Type ftp://shalmaneser.org/rfc#ErrataType
Label Editorial errata
Comment A spelling, grammar, punctuation, or syntax error in an RFC. See https://www.rfc-editor.org/errata-definitions/.
Table 37
Name editorialStream
URI ftp://shalmaneser.org/rfc#editorialStream
Type ftp://shalmaneser.org/rfc#Stream
Label Editorial stream
Comment RFC approved by the editorial stream editor.
Table 38
Name experimental
URI ftp://shalmaneser.org/rfc#experimental
Type ftp://shalmaneser.org/rfc#RfcStatus
Label Experimental RFC status
Comment An RFC that is part of some research or development effort. See https://www.rfc-editor.org/info/rfc2026.
Table 39
Name held
URI ftp://shalmaneser.org/rfc#held
Type ftp://shalmaneser.org/rfc#ErrataStatus
Label Held status
Comment Status of an errata held for a future document update. See https://www.rfc-editor.org/errata-definitions/.
Table 40
Name historic
URI ftp://shalmaneser.org/rfc#historic
Type ftp://shalmaneser.org/rfc#RfcStatus
Label Historic RFC status
Comment An RFC that has been superseded by a more recent specification or is for any other reason considered to be obsolete.
Table 41
Name iabStream
URI ftp://shalmaneser.org/rfc#iabStream
Type ftp://shalmaneser.org/rfc#Stream
Label IAB stream
Comment RFC approved by the IAB. See https://www.rfc-editor.org/info/rfc4845.
Table 42
Name ietfStream
URI ftp://shalmaneser.org/rfc#ietfStream
Type ftp://shalmaneser.org/rfc#Stream
Label IETF stream
Comment RFC approved by the IETF. See https://www.rfc-editor.org/info/rfc2026 and successors.
Table 43
Name independentStream
URI ftp://shalmaneser.org/rfc#independentStream
Type ftp://shalmaneser.org/rfc#Stream
Label Independent stream
Comment RFC approved by the independent editor. See https://www.rfc-editor.org/info/rfc2026.
Table 44
Name informational
URI ftp://shalmaneser.org/rfc#informational
Type ftp://shalmaneser.org/rfc#RfcStatus
Label Informational RFC status
Comment An RFC that is published for the general information of the Internet community, and does not represent an Internet community consensus or recommendation.
Table 45
Name internetStandard
URI ftp://shalmaneser.org/rfc#internetStandard
Type ftp://shalmaneser.org/rfc#RfcStatus
Label Internet Standard RFC status
Comment An RFC for which significant implementation and successful operational experience has been obtained.
Table 46
Name irtfStream
URI ftp://shalmaneser.org/rfc#irtfStream
Type ftp://shalmaneser.org/rfc#Stream
Label IRTF stream
Comment RFC approved by the IRTF. See https://www.rfc-editor.org/info/rfc5743.
Table 47
Name proposedStandard
URI ftp://shalmaneser.org/rfc#proposedStandard
Type ftp://shalmaneser.org/rfc#RfcStatus
Label Proposed Standard RFC status
Comment An RFC that is generally stable, has resolved known design choices, is believed to be well-understood, has received significant community review, and appears to enjoy enough community interest to be considered valuable.
Table 48
Name rejected
URI ftp://shalmaneser.org/rfc#rejected
Type ftp://shalmaneser.org/rfc#ErrataStatus
Label Rejected status
Comment The status of an RFC errata that has been rejected as invalid. See https://www.rfc-editor.org/errata-definitions/.
Table 49
Name reported
URI ftp://shalmaneser.org/rfc#reported
Type ftp://shalmaneser.org/rfc#ErrataStatus
Label Reported status
Comment The initial status of an RFC errata. See https://www.rfc-editor.org/errata-definitions/.
Table 50
Name technical
URI ftp://shalmaneser.org/rfc#technical
Type ftp://shalmaneser.org/rfc#ErrataType
Label Technical errata
Comment An error in the technical content of an RFC. See https://www.rfc-editor.org/errata-definitions/.
Table 51
Name verified
URI ftp://shalmaneser.org/rfc#verified
Type ftp://shalmaneser.org/rfc#ErrataStatus
Label Verified status
Comment The status of an RFC errata that has been verified as being correct. See https://www.rfc-editor.org/errata-definitions/.

3. IANA Considerations

No IANA considerations in this document.

4. Security Considerations

The information in that document are derived from publicly available databases, so they do not present more security risk.

5. Informative References

[BIBO]
D'Arcus, B., Giasson, F., and DCMI Usage Board, "Bibliographic Ontology", , <https://www.dublincore.org/specifications/bibo/>.
[DCTERMS]
DCMI Usage Board, "DCMI Metadata Terms", , <https://www.dublincore.org/specifications/dublin-core/dcmi-terms/>.
[ErgoAI]
"ErgoAI", Accessed 22 July 2023, <https://github.com/ErgoAI>.
[FOAF]
Brickley, D. and L. Miller, "FOAF Vocabulary Specification 0.99", , <https://web.archive.org/web/20220518003509/http://xmlns.com/foaf/spec/20140114.html>.
[RFC9307]
ten Oever, N., Cath, C., Kühlewind, M., and C. S. Perkins, "Report from the IAB Workshop on Analyzing IETF Data (AID) 2021", RFC 9307, DOI 10.17487/RFC9307, , <https://www.rfc-editor.org/info/rfc9307>.
[Zotero]
Corporation for Digital Scholarship, "Zotero | Your personal research assistant", Accessed 20 January 2023, <https://www.zotero.org/>.

Appendix A. Implementation

An implementation of the RFC ontology using the programming language Ergo [ErgoAI] is provided.

The "rfcs.ergo" file contains the list of all RFCs, BCPs, STDs, and FYIs.

The following example shows an RFC metadata encoded in Ergo:

\"https://www.rfc-editor.org/info/rfc9306":rfc#Rfc
  [ rfc#number -> 9306
  , terms#title ->
'Vendor-Specific LISP Canonical Address Format (LCAF)'
  , terms#creator -> {\#1, \#2, \#3, \#4, \#5}
  , bibo#authorList -> [\#1, \#2, \#3, \#4, \#5]
  , rfc#date -> '2022-10'
  , terms#format ->
{'text/html', 'text/plain', 'application/pdf', 'text/xml'}
  , rfc#keyword ->
{'lisp', 'lcaf', 'internal', 'domain', 'organization', 'private'}
  , bibo#abstract -> 'This document describes a ...'
  , terms#isVersionOf ->
\"https://datatracker.ietf.org/doc/draft-ietf-lisp-vendor-lcaf-12"
  , rfc#updates ->
{\"https://www.rfc-editor.org/info/rfc8060":rfc#Rfc}
  , rfc#publicationStatus -> rfc#experimental
  , rfc#currentStatus -> rfc#experimental
  , rfc#stream -> rfc#ietf
  , rfc#area -> 'rtg'
  , rfc#wg -> 'lisp'
  , bibo#doi -> '10.17487/RFC9306'
  , rfc#normativelyReferences ->
    { \"https://ieeexplore.ieee.org/document/6847097"
    , \"https://www.rfc-editor.org/info/rfc2119"
    , \"https://www.rfc-editor.org/info/rfc8060"
    , \"https://www.rfc-editor.org/info/rfc8126"
    , \"https://www.rfc-editor.org/info/rfc8174"
    , \"https://www.rfc-editor.org/info/rfc9300"
    , \"https://www.rfc-editor.org/info/rfc9301"
    }
    ]
  , \#1:foaf#Person
    [ foaf#name -> 'Alberto Rodriguez-Natal'
    , foaf#familyName -> 'Rodriguez-Natal'
    , rfc#initials -> 'A.'
    ]
  , \#2:foaf#Person
    [ foaf#name -> 'Vina Ermagan'
    , foaf#familyName -> 'Ermagan'
    , rfc#initials -> 'V.'
    ]
  , \#3:foaf#Person
    [ foaf#name -> 'Anton Smirnov'
    , foaf#familyName -> 'Smirnov'
    , rfc#initials -> 'A.'
    ]
  , \#4:foaf#Person
    [ foaf#name -> 'Vrushali Ashtaputre'
    , foaf#familyName -> 'Ashtaputre'
    , rfc#initials -> 'V.'
    ]
  , \#5:foaf#Person
    [ foaf#name -> 'Dino Farinacci'
    , foaf#familyName -> 'Farinacci'
    , rfc#initials -> 'D.'
    ]
  .

Comments on some non-obvious encoding:

The following example shows a BCP encoded in Ergo:

\"https://www.rfc-editor.org/info/bcp0003":rfc#Bcp
  [ rfc#number -> 3
  , bibo#hasPart ->
    { \"https://www.rfc-editor.org/info/rfc1915"
    }
  ].

STD and FYI are encoded similarly, substituting respectively "rfc#Std" and "rfc#Fyi" to "rfc#Bcp".

The "errata.flr" file contains the list of all Errata.

The following example shows an Errata encoded in Ergo:

\"https://www.rfc-editor.org/errata/eid5866":rfc#Errata
  [ rfc#id -> 5866
  , rfc#corrects -> \"https://www.rfc-editor.org/info/rfc0005":rfc#Rfc
  , rfc#type -> rfc#editorial
  , rfc#status -> rfc#verified
  , rfc#reportedBy -> \#:foaf#Person[foaf#name -> 'Martin Thomson']
  , rfc#reportedOn -> "2019-09-26"^^\date
  , rfc#processedBy -> \#:foaf#Person[foaf#name -> 'Benjamin Kaduk']
  , rfc#processedOn -> "2019-09-26"^^\date
  ].

The git repository also contains a [Zotero] importer for the same "rfc-index.xml" file that is used to build the "rfcs.flr" file. The simplest way to install it is to create a symbolic link for the "RFC-Index.js" file in the subdirectory "translators" of the "~/.zotero" directory.

A.1. Examples of Queries

The examples that follow can be executed in the Ergo REPL ("runergo" or "runergo.bat").

The Flora-2 REPL can be either run from the local machine or from Docker:

The files must be loaded after starting the REPL:

Note that loading the files should take a minute the first time, but around one second after that. Queries should not take more than a few hundred milliseconds to run.

Listing all the April Fools's Day RFCS:

Listing all the RFCs that cites RFC 5234, normatively or informatively:

Identify all the RFCs that are descendants of a particular RFC by traversing the set of RFC update and obsolete relationships. Save that code in a file named "desc.ergo", then load it in the REPL with [schema,+rfcs,+desc].. Then descendant(<rfc-number>, ?rfc). will return the descendants.

Finding the transitive closure of normative references to an RFC, i.e., all RFCs that normatively reference that RFC or an RFC already in the list. Save that code in a file named "tran.ergo", then load it in the REPL with [schema,+rfcs,+tran].. Then transitive_closure(<rfc-number>, ?rfc). will return the transitive closure.

More examples will be provided in future versions of this draft. Suggestions are welcome.

A.2. Distribution

The files are distributed as a git repository that can be cloned with the following command:

git clone git://shalmaneser.org/VejlapAknul1 rfc-ontology-ergo

This git repository is mirrored in various locations over the world, with the GPS coordinates in decimal degrees of all these locations stored in the DNS as a TXT resource record. The "dig +dnssec txt shalmaneser.org" command can be used to find these locations and substitute the closest subdomain in the git URL above.

The git repository is updated most Mondays before 23:59:59 UTC with a new commit that covers new RFCs, Errata, or changes in status. The date of the next planned update is added of the comment of each commit.

The "update" script that is used to update the files is distributed in the git repository, so they these files can be updated in case the current maintainer is unable to do so. The list of tools to install prior to running the script is in that script.

The code in that repository is licensed under an AGPL3+ license.

Acknowledgements

Thanks to John Levine and Robert Sparks for their help in gathering the information used for populating the knowledge graphs.

Thanks to Scott Hollenbeck and Carsten Bormann for the ideas for the example queries.

No technology that cannot explain its own results (LLM, AI/ML) have been involved in the creation of this document or its associated tooling.

Changelog

draft-petithuguenin-rfc-ontology-04:
  • Document:

    • Fixed the examples.
  • Repository:

    • Update the scripts to use python venv.
draft-petithuguenin-rfc-ontology-03:
  • Document:

    • Replaced Flora-2 with Ergo.
    • Update examples.
  • Repository:

    • Fixed some type-checking issues.
draft-petithuguenin-rfc-ontology-02:
  • Document:

    • Add Internet-Draft class.
    • Add two examples of queries.
    • Add explanations for the Zotero importer for rfc-index.xml.
    • Add Docker command line.
  • Repository:

    • New Dockerfile.
    • The errata are now ordered by id.
    • Errata generation now is done in two steps.
    • The text of the errata is no longer saved.
    • The list of RFC is now stored in /tmp.
draft-petithuguenin-rfc-ontology-01:
  • Document:

    • Change the ontology iri to something resolvable.
    • Reorder the range/domain.
  • Repository:

    • Move the rfc.xml file to an ftp server so it can be loaded in Protege.

Author's Address

Marc Petit-Huguenin
Impedance Mismatch LLC