Skip to content

Commit

Permalink
Merge "Add config option to fix s:, ref:, v: namespace prefix"
Browse files Browse the repository at this point in the history
  • Loading branch information
jenkins-bot authored and Gerrit Code Review committed Feb 11, 2025
2 parents 8a0555c + d89bcf2 commit 6cc2d0a
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 8 deletions.
3 changes: 2 additions & 1 deletion repo/WikibaseRepo.ServiceWiring.php
Original file line number Diff line number Diff line change
Expand Up @@ -1697,7 +1697,8 @@ function ( $types, $localTypeName ) use ( $subEntityTypes ) {
WikibaseRepo::getDataTypeDefinitions( $services )->getRdfTypeUris(),
$repoSettings->getSetting( 'pagePropertiesRdf' ) ?: [],
$repoSettings->getSetting( 'rdfDataRightsUrl' ),
$repoSettings->getSetting( 'tmpFixRdfSomevalueHash' )
$repoSettings->getSetting( 'tmpFixRdfSomevalueHash' ),
$repoSettings->getSetting( 'tmpFixRdfNodeNamespacePrefix' )
);
},

Expand Down
9 changes: 9 additions & 0 deletions repo/config/Wikibase.default.php
Original file line number Diff line number Diff line change
Expand Up @@ -477,4 +477,13 @@
* @see https://phabricator.wikimedia.org/T384344
*/
'tmpFixRdfSomevalueHash' => false,

/**
* Feature flag for the soft rollout of fixing the s:, ref: and v: prefixes (-> wds:, wdref:, wdv:).
*
* Added in https://phabricator.wikimedia.org/T384344, to be removed in Iadb3f55587
* @var bool Whether to correctly use the rdfNodeNamespacePrefix (true)
* or incorrectly use the rdfPredicateNamespacePrefix (false)
*/
'tmpFixRdfNodeNamespacePrefix' => false,
];
22 changes: 15 additions & 7 deletions repo/includes/Rdf/RdfVocabulary.php
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ class RdfVocabulary {

public bool $tmpFixRdfSomevalueHash;

private bool $tmpFixRdfNodeNamespacePrefix;

/**
* @param string[] $conceptUris Associative array mapping repository names to base URIs for entity concept URIs.
* @param string[] $dataUris Associative array mapping source/repository names to base URIs for entity description URIs.
Expand All @@ -152,6 +154,7 @@ class RdfVocabulary {
* All predicates will be prefixed with wikibase:
* @param string $licenseUrl
* @param bool $tmpFixRdfSomevalueHash Temporary feature flag.
* @param bool $tmpFixRdfNodeNamespacePrefix Temporary feature flag.
*/
public function __construct(
array $conceptUris,
Expand All @@ -163,7 +166,8 @@ public function __construct(
array $dataTypeUris = [],
array $pagePropertyDefs = [],
string $licenseUrl = 'http://creativecommons.org/publicdomain/zero/1.0/',
bool $tmpFixRdfSomevalueHash = false
bool $tmpFixRdfSomevalueHash = false,
bool $tmpFixRdfNodeNamespacePrefix = false
) {
Assert::parameterElementType( 'string', $conceptUris, '$conceptUris' );
Assert::parameterElementType( 'string', $dataUris, '$dataUris' );
Expand All @@ -178,6 +182,7 @@ public function __construct(
$this->dataTypeUris = $dataTypeUris;
$this->pagePropertyDefs = $pagePropertyDefs;
$this->tmpFixRdfSomevalueHash = $tmpFixRdfSomevalueHash;
$this->tmpFixRdfNodeNamespacePrefix = $tmpFixRdfNodeNamespacePrefix;

$this->namespaces = [
'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
Expand Down Expand Up @@ -215,13 +220,14 @@ public function __construct(
foreach ( $conceptUris as $repositoryOrSourceName => $baseUri ) {
$nodeNamespacePrefix = $rdfTurtleNodePrefixes[$repositoryOrSourceName];
$predicateNamespacePrefix = $rdfTurtlePredicatePrefixes[$repositoryOrSourceName];
$buggyNodeNamespacePrefix = $tmpFixRdfNodeNamespacePrefix ? $nodeNamespacePrefix : $predicateNamespacePrefix;

$this->entityNamespaceNames[$repositoryOrSourceName] = $nodeNamespacePrefix . self::NS_ENTITY;
$this->dataNamespaceNames[$repositoryOrSourceName] = $predicateNamespacePrefix . self::NS_DATA;
$this->statementNamespaceNames[$repositoryOrSourceName] = [
self::NS_STATEMENT => $predicateNamespacePrefix . self::NS_STATEMENT,
self::NS_REFERENCE => $predicateNamespacePrefix . self::NS_REFERENCE,
self::NS_VALUE => $predicateNamespacePrefix . self::NS_VALUE,
self::NS_STATEMENT => $buggyNodeNamespacePrefix . self::NS_STATEMENT,
self::NS_REFERENCE => $buggyNodeNamespacePrefix . self::NS_REFERENCE,
self::NS_VALUE => $buggyNodeNamespacePrefix . self::NS_VALUE,
];

$this->propertyNamespaceNames[$repositoryOrSourceName] = array_combine(
Expand Down Expand Up @@ -295,16 +301,18 @@ function ( $ns ) use ( $nodeNamespacePrefix ) {
* @return string[]
*/
private function getConceptNamespaces( $nodeNamespacePrefix, $predicateNamespacePrefix, $baseUri, $dataUri ) {
$buggyNodeNamespacePrefix = $this->tmpFixRdfNodeNamespacePrefix ? $nodeNamespacePrefix : $predicateNamespacePrefix;

$topUri = $this->getConceptUriBase( $baseUri );

$propUri = $topUri . 'prop/';

return [
$nodeNamespacePrefix . self::NS_ENTITY => $baseUri,
$predicateNamespacePrefix . self::NS_DATA => $dataUri,
$predicateNamespacePrefix . self::NS_STATEMENT => $baseUri . 'statement/',
$predicateNamespacePrefix . self::NS_REFERENCE => $topUri . 'reference/',
$predicateNamespacePrefix . self::NS_VALUE => $topUri . 'value/',
$buggyNodeNamespacePrefix . self::NS_STATEMENT => $baseUri . 'statement/',
$buggyNodeNamespacePrefix . self::NS_REFERENCE => $topUri . 'reference/',
$buggyNodeNamespacePrefix . self::NS_VALUE => $topUri . 'value/',
// predicates
$nodeNamespacePrefix . self::NSP_DIRECT_CLAIM => $propUri . 'direct/',
$nodeNamespacePrefix . self::NSP_DIRECT_CLAIM_NORM => $propUri . 'direct-normalized/',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public function testConstruction(): void {
'pagePropertiesRdf' => $pagePropertyDefs,
'rdfDataRightsUrl' => 'https://license.test/cc0',
'tmpFixRdfSomevalueHash' => true,
'tmpFixRdfNodeNamespacePrefix' => false,
] ) );
$this->mockService( 'WikibaseRepo.EntitySourceDefinitions',
new EntitySourceDefinitions( [
Expand Down

0 comments on commit 6cc2d0a

Please # to comment.