Problem/Motivation

Generally, vocabularies like Schema.org break things down into atomic units of data. Each unit contains a value that has a primitive data type; e.g. integer, plain text string. For example, when you have a schema:address, it isn't just one big HTML blob. Instead, you point to a PostalAddress item which then has properties of it's own; e.g. schema:streetAddress, addressLocality, addressRegion.

While you can model your fields exactly this way in Drupal using Field Collection, most people use fields like AddressField instead. AddressField does not represent the address as an entity reference, but instead as a field with properties. These properties are then assembled in the field formatter to create an HTML blob that represents the address. I have termed these fields compound fields.

We don't have a way to represent these compound fields in the RDFa.

RDF mapping API

The RDF mapping API only provides the ability to map fields to RDF terms... the properties of those fields cannot be mapped.

<?php
array(
  array(
    'type' => 'node',
    'bundle' => 'event',
    'mapping' => array(
      'rdftype' => array('schema:Event'),
      'field_address' => array(
        'predicates' => array('schema:location'),
        'type' => 'rel',
        // No specified way to add mappings for field properties here.
      ),
    ),
  ),
);
?>

Placement of attributes

In addition to having no way to map the terms, there isn't an easy way for field formatter developers to place the RDFa correctly. Currently, there is a theme function called rdf_template_variable_wrapper, but there aren't any modules in core and only one in contrib (as of April) that use it. In order to use this theme function, you have to have the array of attributes to pass to it, which means you have to run the mapping through a conversion before calling the theme function.

In addition to being a relatively confusing API pattern, passing each property through a theme function from within the formatter seems unnecessarily heavy.

Proposed resolution

Microdata module solves these two problems by:

  1. allowing nesting within a mapping
  2. processing the mapping to an array of attributes, which it passes to the formatter. This means the formatter can place the attributes directly.

Example mapping:

<?php
array(
  'node' => array(
    'event' => array(
      'field_address' => array(
        '#itemtype' => array('http://schema.org/PostalAddress'),
        '#itemprop' => array('address'),
        'locality' => array(
          '#itemprop' => array('addressLocality'),
        ),
      ),
    ),
  ),
);
?>

Example formatter code:

<?php
$variables['microdata'] = $entity->microdata[$field['field_name']];
?>

In this example, it gets passed into the formatter's theme function, which places it

<?php
$locality_attributes = drupal_attributes($microdata['locality']['#attributes']);
$output .= "<span $locality_attributes>Locality text here</span>";
?>
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

scor’s picture

The RDF mapping API only provides the ability to map fields to RDF terms... the properties of those fields cannot be mapped.

yup, this is the same problem that is addressed in the Entity RDF announcement, and that's what the Entity RDF module implements (along with the entity_rdf branch of JSON-LD and RDFx). #1712982: Decide on data structure for RDF mappings includes several alternatives for defining the RDF mappings in code.

Anonymous’s picture

Component: base system » rdf.module
Issue tags: +RDFa, +html data
Romi’s picture

Version: 8.x-dev » 7.14

Sir,
I am very new to rdf. I have used field Field collection module. I have add file field and tag to field collection. My objective is to add tag to each file uploaded for a particular content type. In triple store field_collection_item is coming. How I can find the files and tags via the field collection in the triple store? Or how can I show files and tags in triple store. Sir, I am very new to semantic web. Will you please elaborate on the solutions you provided above?

Thank you

scor’s picture

Version: 7.14 » 8.x-dev

@go4romi could you file your support request at http://drupal.org/project/issues/rdfx or create a new discussion at http://groups.drupal.org/semantic-web please? This issue is specifically about Drupal 8, not Drupal 7 + field collection.

Anonymous’s picture

Status: Active » Needs review
FileSize
8.99 KB

Here's a patch that shows one possible way to change the API to accomodate field properties. It makes for a kind of cumbersome API, but it does make things very explicit.

You can take a look at the TextFieldRdfaTest to see how the mapping would be set. I haven't tried changing the text field formatters yet, so this test will fail.

Status: Needs review » Needs work

The last submitted patch, 1778194-05-compound-field-mapping_includes2030929.patch, failed testing.

Anonymous’s picture

Anonymous’s picture

This patch builds on the work in #1778194: RDF module can't handle compound fields and demonstrates how the mappings for compound fields would be placed in the formatter. The Text formatters are updated to take advantage of this and tested. In particular, note the difference between the TextSummaryOrTrimmedFormatter and the others.

The interdiff shows:

  • Changing the structure of html_data_attributes.
  • Changing the 4 text formatters to place the appropriate HTML data attributes.
  • Changing the tests.

Status: Needs review » Needs work

The last submitted patch, 1778194-08-compound-field-mapping_includes1778122.patch, failed testing.

scor’s picture

Status: Needs work » Needs review
FileSize
39.78 KB

I'd like to suggest a slightly different approach based on the previous patches. This patch adds the possibility to have sets of attributes in the newly added _attributes in field items. _attributes becomes keyed by elements of the field formatter. Examples of field formatter elements are [street, city, zip code, ...] in addressfield, or [url, title and type] for taxonomy term link (needed in #2072791: Output RDFa markup for type + title in taxonomy term reference and entity reference formatters). The elements composing the keys of _attributes can often match the field properties, but not necessarily limited to that, for example in the case of the taxonomy term link.

Each RDF field mapping can also define a mapping for each field property (street, city, zip code ...). Example in YAML:

fieldMappings:
  field_address:
    street:
      properties:
        - 'schema:streetAddress'
    locality:
      properties:
        - 'schema:addressLocality'
    zip:
      properties:
        - 'schema:postalCode'

Compared to what we do now, we're essentially shifting from using what's directly in $mapping to $mapping['value'], 'value' being the default key found in the RDF mapping. This is the key that the field template will look for and use for its fallback attributes, and field formatters interested in other elements (street, locality, ratings,...) can inject these in their output and remove the 'value' key if they don't want to have any attributes on the field template.

I will post another patch in the sister issue #2072791: Output RDFa markup for type + title in taxonomy term reference and entity reference formatters that leverages this new _attributes array.

Anonymous’s picture

The elements composing the keys of _attributes can often match the field properties, but not necessarily limited to that, for example in the case of the taxonomy term link.

Can you please explain this further? It sounds like you're saying that the entities referenced by entity reference fields would have at least 2 different mappings that you would have to configure, the mapping that is stored for the bundle and the mapping that is stored for the field which points to it.

Status: Needs review » Needs work

The last submitted patch, 1778194_9_compound_field_rdf.patch, failed testing.

scor’s picture

Can you please explain this further? It sounds like you're saying that the entities referenced by entity reference fields would have at least 2 different mappings that you would have to configure, the mapping that is stored for the bundle and the mapping that is stored for the field which points to it.

Well, assuming that the bundle of the referenced term has a mapping, we would use that. In the standard profile for example, the 'tags' bundle has RDF mappings, so when rendering the taxonomy_term reference links, we can load the mappings of the 'tags' bundle to know what attributes to inject. I posted a patch at #2072791-1: Output RDFa markup for type + title in taxonomy term reference and entity reference formatters which hopefully will shed more light on this use case.

scor’s picture

Issue tags: +schema.org

I've had discussions about this issue with yched, catch and effulgentsia during DrupalCon, and here are the options we have talked about (in order of preference).

1. Establish a "contract" between field types and field formatters about what output properties are prepared and handed over to field formatters. Since all the output properties are common to all formatters, they ought to be defined at the field type level. For example, the addressfield field would have the following output properties:
- value
- street
- zip_code
- locality
- region
- country

Taxonomy reference field / entity reference field:
- value
- name
- url

Text field with summary:
- text
- text_trimmed

It's up to the formatter to decide to use all, some or none of the output properties in its HTML output. By default, fields would only have the "value" output property. If this value output property is still set by the time we get to the field template, then it is used to wrap the formatter markup (like it is D7 and right now in D8 after #1778122: Enable modules to inject attributes into field formatters, so that RDF attributes get output).

2. For each field formatter, implement "sister" field formatter for schema.org/RDFa for the compound fields, where the schema.org RDFa attribute would be hard-coded. This is a departure from the flexibility we're used to in Drupal. Pros: only a few field formatters would require this, not all, for example most text field formatters and simple formatters like telephone or email would not need this. Cons: some field formatters are duplicated in the field UI. For example this is how the formatter drop down for the taxonomy reference field would look like:
- Link
- Link (schema.org)
- Plain text
- RSS category
(plain text is already handled by the field template fallback _attributes)

3. Since field formatters are plugins, it should be possible to alter the method invoked for each field formatter, and the RDF module would "override" the viewElements() method of the field formatters which have compound fields in order to hardcode the schema.org RDFa attributes in the output. Pros: only a few field formatters would require this (same as 2. above) Cons: we usually avoid altering default methods in core, and leave that for custom code (or contrib in the worst case), since in the end only one module can win the alter race.

I'll work on a patch which implements the first approach.

scor’s picture

Assigned: Unassigned » scor
Status: Needs work » Needs review
FileSize
40.7 KB

This patch is just a reroll of #10 after the comment field patch which introduced a lot of git conflicts.

Status: Needs review » Needs work

The last submitted patch, 1778194_15_compound_field_rdf.patch, failed testing.

scor’s picture

Status: Needs work » Needs review
FileSize
6.07 KB
44.32 KB

This patch implements the approach described in #14.1. To that effect it introduces the new method ConfigFieldItemBase::outputProperties() which returns the list the output properties field formatters can expect in $item->_attributes. I've implemented it for the entity reference field. The default is array('value').

This patch also fixes the EntityViewControllerTest fail.

Status: Needs review » Needs work

The last submitted patch, 1778194_17_compound_field_rdf.patch, failed testing.

scor’s picture

Status: Needs work » Needs review
FileSize
44 KB

reroll

The last submitted patch, 1778194_19_compound_field_rdf.patch, failed testing.

Anonymous’s picture

Moving this to major because some of the most important fields for HTML data are compound fields... e.g. AddressField. I wouldn't consider the feature to be functioning until we know how we're handling these more complex fields.

Anonymous’s picture

Priority: Normal » Major
Issue summary: View changes
scor’s picture

One requirement for this issue is to have all the mappings of the field compound properties in config, which is implemented in this patch. Secondly, the RDF module has to prepare the mappings, pass them to the field formatter which have to place these attributes appropriately in the formatter output.

Compound fields have a fairly predictable mapping and therefore don't need to be made customizable in config. Addressfield for example has consistent mapping (PostalAddress, streetAddress, addressCountry, etc). The street property of your formatter is always 'streetAddress', and I would qualify any situation where this is not the case (can't think of any) as enough of an edge case to call for a custom implementation (e.g. customer formatter extending the addressfield formatter).

This issue starts to get complicated when you try to add an abstraction layer so that modules like RDF or microdata can be in charge of generating the attributes for the mappings (and possibly wrapper HTML elements), and then coordinate somehow with the field formatter. This complicated API is not necessary if you deal with the compound field HTML markup only in the formatter. From the formatters perspective, all you get from config is the $item->_attribute used to link your main content to that field (for example schema:address), and then handles the rest of the markup in viewElements(). Here is an untested hypothetical example for addressfield (inspired from current D7 code):

  $format['locality_block'] = array(
    '#type' => 'addressfield_container',
    '#attributes' => array('class' => array('addressfield-container-inline', 'locality-block', 'country-' . $address['country'])),
    '#weight' => 50,
  );
  $format['locality_block']['postal_code'] = array(
    '#title' => t('Postal Code'),
    '#size' => 10,
    '#required' => TRUE,
    '#attributes' => array('class' => array('postal-code')),
  );
  $format['locality_block']['locality'] = array(
    '#title' => t('City'),
    '#size' => 30,
    '#required' => TRUE,
    '#prefix' => ' ',
    '#attributes' => array('class' => array('locality')),
  );
  $format['country'] = array(
    '#title' => t('Country'),
    '#options' => _addressfield_country_options_list(),
    '#required' => TRUE,
    '#attributes' => array('class' => array('country')),
    '#weight' => 100,
  );
// Add RDFa attributes if this field has a mapping.
if ($item->_attribute['property']) {
    $format['locality_block']['postal_code']['#attributes']['property'] = 'schema:postalCode';
    $format['locality_block']['locality']['#attributes']['property'] = 'schema:addressLocality';
    $format['country']['#attributes']['property'] = 'schema:addressCountry';
}

One could imagine a similar example using Twig. The advantage here is that the developer writing the field formatter is in total control of the RDFa markup and doesn't have to understand another compound-specific API for each of the compound output properties.

In conclusion, I believe the RDF module should not have to handle compound fields in a different manner than it currently handles regular fields. I'd like to get my RDF module co-maintainer to comment here before closing this issue.

Anonymous’s picture

Compound fields have a fairly predictable mapping and therefore don't need to be made customizable in config. Addressfield for example has consistent mapping (PostalAddress, streetAddress, addressCountry, etc). The street property of your formatter is always 'streetAddress', and I would qualify any situation where this is not the case (can't think of any) as enough of an edge case to call for a custom implementation (e.g. customer formatter extending the addressfield formatter).

So you're talking about hard-coding Schema.org properties in the formatter? Unless this is in conjunction with limiting the scope of RDF module to Schema.org, I don't know how that makes sense.

scor’s picture

So you're talking about hard-coding Schema.org properties in the formatter? Unless this is in conjunction with limiting the scope of RDF module to Schema.org, I don't know how that makes sense.

Yes, it does have a bearing on the vocabulary used in the regular RDF mappings set in config, though core does not care about that. For example addressfield and fivestar should support schema.org since their use cases are supported in schema.org, and it makes sense for the RDF mapping in config for these fields to be also schema.org (schema:address and schema:aggregateRating for example, respectively). On the other hand a CreativeCommons license field would most likely use the CC vocabulary in its field formatter, and the RDF mapping stored in config for this field could be set to 'cc:license'. Likewise, a field formatter implementing some other kind of field foobar and willing to support a custom vocabulary, it should hardcode its RDFa markup in the formatter with the foobar terms, and the field mapping in config could be 'foobar:baz'. Essentially the field formatter would become vocabulary specific, which is fine as I can't think of a use case where you would want to support and offer different vocabularies for a given field. If someone was to come up with a use case, a field setting could be implemented.

As far as core is concerned, the vocabulary natively supported by the formatter does not matter, since since the mappings defined in config are vocabulary agnostic.

scor’s picture

I should also add that core will not have to follow the approach described in my previous comment because we don't have compound fields in core. Injecting $item->_attributes inside the formatters output or leaving the field wrapper place the attributes is sufficient for all core fields.

Anonymous’s picture

So that would mean that you couldn't actually output any other RDF serializations with RDF module. You wouldn't be able to map the field properties, so anything that doesn't use the formatters (JSON-LD, Turtle, etc) wouldn't contain the right data.

That only makes sense if the scope of the module is limited to HTML data.

scor’s picture

The RDF module in core has never claimed to be able to serialize non-HTML data on its own. In D7 for example, this requires the rdfx contrib module. So yes, core is limited to HTML data. For compound field formatters to be serializable as non-HTML, they will have to provide the data as a PHP array or object which includes the same hard-coded mappings that are used in the field formatter HTML (via some hook which contrib should define). Building a API that works in both non-HTML and construct the equivalent HTML is a no-go since we want field formatter author to be able to write their own HTML. Some fields might create new resources on the fly (e.g. addressfield and fivestar) as opposed to a flat list of properties, and we don't want to lock the output structure of field formatters in any way. Also, as far as I'm aware, core entity API does not know about the output/rendered properties of fields formatters, it only knows about the input properties tied to the storage. These output properties might change depending on the formatter for a given field, and thus they should be formatter specific, not field specific.

So yes, core should remain limited to HTML data, and contrib can extend this to other formats.

Anonymous’s picture

In D7 for example, this requires the rdfx contrib module.

Of course I am aware of that since I wrote the initial patch for that. The thing that core *did* give us was the mapping.

If the mapping is only supposed to be used with HTML data, than that needs to be made explicit. Right now, people think that RDF module is meant to map Drupal's data model to an RDF model so that it can be serialized in multiple RDF serialization formats. They believe this because we told them so.

scor’s picture

Core did gives us the mappings, yes, but when it comes to compound fields, even if you had the mappings, you also need the structure of the output properties (how they are grouped, what type is the new resource, does it have a URI, if so how is it constructed). I toyed with this with entity_rdf, but it's hard to come up with a generic API that works for all use cases. It's easier to leave it up to the each individual field module to return an array/object (or a marked up HTML output), because field modules know their data model better than any other module.

We can and should make explicit that core alone is not sufficient to build an RDF model for compound fields, and that compound field formatters will be required to implement some hook or method to advertise their RDF model if they desire to be serializable.

Core should only support the HTML data and leave other RDF model serializations for contrib. By only supporting this, core does not have to worry about non-HTML RDF serializations.

Anonymous’s picture

I strongly disagree with this approach. It's basically saying "Field formatters should be vocabulary agnostic... except when they shouldn't". This kind of inconsistency can only confuse an area which is already overly complicated.

With a system like this, I honestly wouldn't even be confident that *I* could develop a site that output data properly. I would have no hope for people who don't understand the workings of the field system and the RDFa processing model.

I think this makes for bad DX for field formatter developers and bad UX for site builders.

As I am resigning as a maintainer of this module, I will not be adding any further objections.

mgifford’s picture

Issue tags: +Needs tests
bnordgren’s picture

Can someone comment on the status of this issue in D8?

FWIW, not being a drupal developer myself, it seems conceptually necessary to reduce a compound field into the atomic components of the schema you intend to format. Once that is accomplished, the field and the formatter (and the parser too) need to agree on both the text and semantics of the keys used to store/lookup the properties.

If you want to support multiple schemas which break down the same compound field differently, the field type cannot be the thing that defines field properties. Parser and formatter need to be coordinated such that the formatter understands the text and semantics of the keys the parser used to store properties, as it was parsing out the elements of a specific schema.

But if you're locked into a single set of properties defined on a field by the field type, it seems to me that you need to pick your poison. If you can crosswalk from the schema included in core to the schema you want to output, then great. Otherwise, formatters for alternative schemas could include their own parsers to pick out the components they need, so long as the formatter has access to the original text of the field. The only difference seems to be that the text is parsed every time it's rendered, rather than whenever it's edited. This may not be pretty, but it seems to be what is possible to do?

It may help to explicitly state the scope of this issue:

  1. support in core for all possible schemas?
  2. core supports decomposing compound fields into the atomic units of a preferred schema?
scor’s picture

Overall, I agree with you @bnordgren.

support in core for all possible schemas?

Yes, even though we will use schema.org for the default mappings, the main goal is to remain vocabulary agnostic in the design of the API, and to allow you to set your own mappings from other schemas like DC, FOAF, SKOS for your entity bundles and fields.

core supports decomposing compound fields into the atomic units of a preferred schema?

Fields in core already support storing data into separate columns in the DB, and field formatters can process these atomic bits and place them however they want in the HTML output. When it comes to RDF mappings, each field will have a primary mapping, and optionally will be able to define extra mappings for its atomic parts. In the end it's a balancing act between overkill flexibility (which hurts UX and becomes error prone) and pre-built settings with less room for errors. Most of core's field types and formatters are pretty basic (they don't have that many atomic parts) so it's really in contrib that we will encounter those more complex field types.

mgifford’s picture

Assigned: scor » Unassigned

There has been no new work on this issue in quite some time. So I'm assuming the person assigned is no longer being actively pursuing it. Sincere apologies if this is wrong.

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

g-brodiei’s picture

Issue tags: +Needs reroll

Still a valid issue, adding need reroll tag.

quietone’s picture

Version: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

smustgrave’s picture

Project: Drupal core » Resource Description Framework (RDF)
Version: 9.4.x-dev » 2.x-dev
Component: rdf.module » Code

This possibly could still be a valid issue.

RDF is moving out of core and into https://www.drupal.org/project/rdf

So the current solution will need to heavily be altered obviously.