wikimedia/mediawiki-extensions-Wikibase

View on GitHub
docs/adr/0019-federated-properties-prefix-ids-via-uris.md

Summary

Maintainability
Test Coverage
# 19) Add source information to Property IDs for Federated Properties v2 {#adr_0019}

Date: 2021-06-21

## Status

proposed

## Context

The Federated Properties MVP introduced a [federatedPropertiesEnabled] setting which enables a Wikibase instance (local wiki) to read all Properties from a remote Wikibase (source wiki). A wiki with this setting enabled can only use federated Properties and disallows the creation or use of any local Properties.
Federated Properties v2 aims to make it possible for users to enable Federated Properties even if their Wikibase already contains data, so that they can choose to use both remote & local Properties to make statements.

To achieve that we need to be able to differentiate between local and federated Properties.

### Considered Actions

We considered two options:

1. Build source information into the Property IDs via repository prefixes.
2. Build source information into the Property IDs via Concept URIs.

#### Prefixes

The administrator of the local Wikibase needs to configure a prefix for the source wiki, which will be used only for federated properties. Local properties will not have a prefix.

**Pros**:
 - Easier to parse
 - Easier to type

**Cons**:
 - Ambiguous without knowing the config

#### Concept URIs

Concept URIs can be set for any Wikibase and also have a default value. An example of referencing a federated property from Wikidata is `http://www.wikidata.org/entity/P31`.
The administrator of the local Wikibase needs to configure the concept URI for the source wiki in case it's not Wikidata.

Since concept URIs guarantee to end in the entity's ID we can think of them as prefixes. In the above example `http://www.wikidata.org/entity/` is the prefix. This way we don't need to worry about parsing them to extract the entity ID.

**Pros**:
 - Unambiguous
 - Standard practice in the linked data world

**Cons**:
- Typing urls in the browser when containing e.g. '&' is not nice. People might not remember to url encode.
We think having symbols like '&' in the URL in unlikely. Also, API Sandbox can be used to test the API requests and figure out the right format if needed.
- Hard to change / Out of “our” control if they change
If we use the URI only as a prefix to the entity, and not as an actual URL that will be used as such, then this shouldn't be a problem. We acknowledge it's possible for people who use the API to treat it like an URL.
We feel responsible only if Wikidata's URI changes, as we anticipate shipping an example configuration for Wikidata which would then need updating. URIs configured for a source wiki different than Wikidata will have to be updated by the administrator of the local wiki in case they change.

## Decision

Build source information into the Property IDs via Concept URIs, treating them like a prefix.

## Consequences

It's out of our control when/if URIs change. We acknowledge that this is a real problem and can potentially be reported by people who use the API and treat the URIs as URLs.


[federatedPropertiesEnabled]: @ref repo_federatedPropertiesEnabled