How is SPARQL DESCRIBE used in practice?

SPARQL defines several query forms: SELECT, CONSTRUCT, ASK and DESCRIBE. While the first three of these have well-defined semantics, the DESCRIBE query form is more of a tool for getting some information about resources in the dataset, and it is up to the query server to define the result data. According to Sec. 10.4 of the SPARQL spec:

The DESCRIBE form returns a single result RDF graph containing RDF data about resources. This data is not prescribed by a SPARQL query, where the query client would need to know the structure of the RDF in the data source, but, instead, is determined by the SPARQL query processor. The query pattern is used to create a result set. The DESCRIBE form [...] assembles a single RDF graph by taking a "description" which can come from any information available including the target RDF Dataset. The description is determined by the query service.

I wonder:

  • Is DESCRIBE used by existing query endpoints? (sometimes? often? regularly?)
  • If so, are there conventions about what kind of data is typically being returned, and how it typically looks like, so people can come with some proper expectation to some query endpoint. (Of course, it is clear to me that the precise data and format will always have to be specified by the server, but there might be still some general conventions).

In previous versions of SWSE, we used YARS2 as a back-end. The UI posed DESCRIBE queries to YARS2, which was configured to return what SWSE required. As such, DESCRIBE served as a useful shortcut between the two, and didn't seem to be usable for any other (generic SPARQL/standard) purpose.

With respect to convention, (EDIT) actually it seems that there is one. Made the following categories and tested some endpoints powered by different engines to see if I can figure out which they implement.

About test:

  • Example DESCRIBE query linked for some engines. Other categorisations based on comments below (thanks folks).
  • Tested to make sure that the DESCRIBE node should appear in each S P O in some triple.
    • Actually, D2RQ is a little inconclusive... could not find a node appearing in all S P O, but definitely works for S O.
    • Similarly, Talis is inconclusive. Could not find blank-nodes to distinguish {S} from CBDs (see below).
  • Toby pointed out possibility of some engines supporting CBDs
    • Some in the second category might be SBCDs? (IMO, unlikely)
    • From empirical query, Talis might be returning CBDs, IFCBDS, or {S}, but categorised as CBD due to Comment Bots' comment below (needs confirmation).
    • Jena by default offers CBDs, but DESCRIBE functionality is configurable (see Dave's comment below).
    • Need to confirm RDF::Query (see Toby's comment below).