# Migration guide: 6.x to 7.0

This guide collects the detailed lookup tables for migrating to Semantic MediaWiki 7.0.0. For the narrative overview of what changed, see the [7.0.0 release notes](../releasenotes/RELEASE-NOTES-7.0.0.md).

## Users and administrators

### String-based configuration

Settings that took `SMW_*` constants now accept plain strings; bitmask settings take arrays of strings. The constant form still works in 7.x with a deprecation notice and is removed in 8.0.

| Setting | Legacy form (deprecated) | New default | Accepted values |
|---|---|---|---|
| `$smwgShowFactbox` | `SMW_FACTBOX_NONEMPTY` | `'nonempty'` | `'hidden'`, `'special'`, `'nonempty'`, `'shown'` |
| `$smwgShowFactboxEdit` | `SMW_FACTBOX_NONEMPTY` | `'nonempty'` | `'hidden'`, `'special'`, `'nonempty'`, `'shown'` |
| `$smwgFactboxFeatures` | `SMW_FACTBOX_CACHE \| ...` | `[ 'cache', 'purge-refresh', 'display-subobject', 'display-attachment' ]` | `'cache'`, `'purge-refresh'`, `'display-subobject'`, `'display-attachment'` |
| `$smwgQEqualitySupport` | `SMW_EQ_SOME` | `'some'` | `'none'`, `'some'`, `'full'` |
| `$smwgQConceptCaching` | `CONCEPT_CACHE_HARD` | `'hard'` | `'none'`, `'hard'`, `'all'` |
| `$smwgSparqlRepositoryFeatures` | `SMW_SPARQL_NONE` | `'none'` | `'none'`, `'connection-ping'` |
| `$smwgResultFormatsFeatures` | `SMW_RF_TEMPLATE_OUTSEP` | `'template-outsep'` | `'none'`, `'template-outsep'` |
| `$smwgQFeatures` | `SMW_PROPERTY_QUERY \| SMW_CATEGORY_QUERY \| ...` | `[ 'property', 'category', 'concept', 'namespace', 'conjunction', 'disjunction' ]` | `'property'`, `'category'`, `'concept'`, `'namespace'`, `'conjunction'`, `'disjunction'` |
| `$smwgQConceptFeatures` | `SMW_PROPERTY_QUERY \| SMW_CATEGORY_QUERY \| ...` | `[ 'property', 'category', 'concept', 'namespace', 'conjunction', 'disjunction' ]` | `'property'`, `'category'`, `'concept'`, `'namespace'`, `'conjunction'`, `'disjunction'` |
| `$smwgQSortFeatures` | `SMW_QSORT \| SMW_QSORT_RANDOM` | `[ 'sort', 'random' ]` | `'sort'`, `'random'`, `'unconditional'` |
| `$smwgSparqlQFeatures` | `SMW_SPARQL_QF_REDI \| SMW_SPARQL_QF_SUBP \| SMW_SPARQL_QF_SUBC` | `[ 'redirects', 'subproperties', 'subcategories' ]` | `'redirects'`, `'subproperties'`, `'subcategories'`, `'collation'`, `'no-case'` |
| `$smwgCategoryFeatures` | `SMW_CAT_REDIRECT \| SMW_CAT_INSTANCE \| SMW_CAT_HIERARCHY` | `[ 'redirect', 'instance', 'hierarchy' ]` | `'redirect'`, `'instance'`, `'hierarchy'` |
| `$smwgBrowseFeatures` | `SMW_BROWSE_TLINK \| ...` | `[ 'toolbox-link', 'show-incoming', 'show-group', 'use-api' ]` | `'toolbox-link'`, `'show-inverse'`, `'show-incoming'`, `'show-group'`, `'show-sortkey'`, `'use-api'` |
| `$smwgAdminFeatures` | `SMW_ADM_REFRESH \| ...` | `[ 'refresh', 'setup', 'disposal', 'pstats', 'fullt', 'maintenance-script-docs', 'show-overview', 'alert-last-optimization-run' ]` | `'refresh'`, `'disposal'`, `'setup'`, `'pstats'`, `'fullt'`, `'maintenance-script-docs'`, `'show-overview'`, `'alert-last-optimization-run'` |
| `$smwgParserFeatures` | `SMW_PARSER_STRICT \| SMW_PARSER_INL_ERROR \| SMW_PARSER_HID_CATS` | `[ 'strict', 'inline-errors', 'hidden-categories' ]` | `'strict'`, `'unstrip'`, `'inline-errors'`, `'hidden-categories'`, `'links-in-values'` |
| `$smwgDVFeatures` | `SMW_DV_PROV_REDI \| SMW_DV_MLTV_LCODE \| ...` | `[ 'provider-redirect', 'monolingual-langcode', 'pattern-validation', 'wpv-display-title', 'time-calendar-model', 'preferred-label', 'provider-link-hint' ]` | `'provider-redirect'`, `'monolingual-langcode'`, `'number-value-usespaces'`, `'pattern-validation'`, `'wpv-display-title'`, `'provider-display-title'`, `'unique-constraint'`, `'time-calendar-model'`, `'preferred-label'`, `'provider-link-hint'`, `'wpv-pipetrick'` |
| `$smwgFulltextSearchIndexableDataTypes` | `SMW_FT_BLOB \| SMW_FT_URI` | `[ 'blob', 'uri' ]` | `'blob'`, `'uri'`, `'wikipage'` |
| `$smwgRemoteReqFeatures` | `SMW_REMOTE_REQ_SEND_RESPONSE \| SMW_REMOTE_REQ_SHOW_NOTE` | `[ 'send-response', 'show-note' ]` | `'send-response'`, `'show-note'` |
| `$smwgExperimentalFeatures` | `SMW_QUERYRESULT_PREFETCH \| SMW_SHOWPARSER_USE_CURTAILMENT` | `[ 'queryresult-prefetch', 'showparser-curtailment' ]` | `'queryresult-prefetch'`, `'showparser-curtailment'` |
| `$smwgFieldTypeFeatures` | `false` or `SMW_FIELDT_CHAR_NOCASE \| SMW_FIELDT_CHAR_LONG` | `false` | `false` (component disabled), or any subset of `'char-nocase'`, `'char-long'` |
| `$smwgQueryProfiler` | `true` (basic) or `SMW_QPRFL_DUR \| SMW_QPRFL_PARAMS` | `[]` | `false` (profiling disabled), `[]` (basic, no detail fields), or any subset of `'parameters'`, `'duration'` |
| `$smwgSpecialAskFormSubmitMethod` | `SMW_SASK_SUBMIT_POST` | `'post'` | `'get'`, `'get.redirect'`, `'post'` |
| `$smwgCheckForConstraintErrors` | `SMW_CONSTRAINT_ERR_CHECK_ALL` | `'check/all'` | `false`, `'check/main'`, `'check/all'` |

Unknown strings are ignored with a structured-log warning. The last two settings (`$smwgSpecialAskFormSubmitMethod`, `$smwgCheckForConstraintErrors`) need no normalizer entry because their `SMW_SASK_SUBMIT_*` / `SMW_CONSTRAINT_ERR_CHECK_*` constants already resolve to the listed string values; the constants continue to work.

`$smwgQueryProfiler`'s `extension.json` default changes from `true` to `[]`; behaviour is unchanged because both forms produce zero flag bits in `Options::isFlagSet`. Note that `[]` enables basic profiling (no detail fields), it does NOT disable; use `false` to disable profiling entirely. The legacy `true` form is also accepted with a deprecation notice and will be removed in 8.0.

### Removed legacy settings

The runtime shim that rewrote settings deprecated in SMW 3.1 and 3.2 to their replacements is gone. Update any of these names in `LocalSettings.php` to the replacement below; otherwise the legacy names are silently ignored. Special:Admin no longer surfaces them as deprecation notices.

| Removed setting | Use instead |
|---|---|
| `$smwgEnabledInTextAnnotationParserStrictMode` | `$smwgParserFeatures` (option `'strict'`) |
| `$smwgInlineErrors` | `$smwgParserFeatures` (option `'inline-errors'`) |
| `$smwgShowHiddenCategories` | `$smwgParserFeatures` (option `'hidden-categories'`) |
| `$smwgLinksInValues` | `$smwgParserFeatures` (option `'links-in-values'`) |
| `$smwgFactboxUseCache` | `$smwgFactboxFeatures` (option `'cache'`) |
| `$smwgFactboxCacheRefreshOnPurge` | `$smwgFactboxFeatures` (option `'purge-refresh'`) |
| `$smwgUseCategoryRedirect` | `$smwgCategoryFeatures` (option `'redirect'`) |
| `$smwgCategoriesAsInstances` | `$smwgCategoryFeatures` (option `'instance'`) |
| `$smwgUseCategoryHierarchy` | `$smwgCategoryFeatures` (option `'hierarchy'`) |
| `$smwgQSortingSupport` | `$smwgQSortFeatures` (option `'sort'`) |
| `$smwgQRandSortingSupport` | `$smwgQSortFeatures` (option `'random'`) |
| `$smwgToolboxBrowseLink` | `$smwgBrowseFeatures` (option `'toolbox-link'`) |
| `$smwgBrowseShowInverse` | `$smwgBrowseFeatures` (option `'show-inverse'`) |
| `$smwgBrowseShowAll` | `$smwgBrowseFeatures` (option `'show-incoming'`) |
| `$smwgBrowseByApi` | `$smwgBrowseFeatures` (option `'use-api'`) |
| `$smwgAdminRefreshStore` | `$smwgAdminFeatures` (option `'refresh'`) |
| `$smwgQueryProfiler['smwgQueryDurationEnabled']` | `$smwgQueryProfiler` (option `'duration'`) |
| `$smwgQueryProfiler['smwgQueryParametersEnabled']` | `$smwgQueryProfiler` (option `'parameters'`) |
| `$smwgCacheType` | `$smwgMainCacheType` |
| `$smwgImportFileDir` | `$smwgImportFileDirs` |
| `$smwgDeclarationProperties` | `$smwgChangePropagationWatchlist` |
| `$smwgQueryDependencyPropertyExemptionlist` | `$smwgQueryDependencyPropertyExemptionList` (capital `L`) |
| `$smwgSparqlDatabaseConnector` | `$smwgSparqlRepositoryConnector` |
| `$smwgSparqlDatabase` | `$smwgSparqlCustomConnector` |
| `$smwgSparqlQueryEndpoint` | `$smwgSparqlEndpoint['query']` |
| `$smwgSparqlUpdateEndpoint` | `$smwgSparqlEndpoint['update']` |
| `$smwgSparqlDataEndpoint` | `$smwgSparqlEndpoint['data']` |
| `$smwgTypePagingLimit` | `$smwgPagingLimit['type']` |
| `$smwgConceptPagingLimit` | `$smwgPagingLimit['concept']` |
| `$smwgPropertyPagingLimit` | `$smwgPagingLimit['property']` |
| `$smwgSubPropertyListLimit` | `$smwgPropertyListLimit['subproperty']` |
| `$smwgRedirectPropertyListLimit` | `$smwgPropertyListLimit['redirect']` |
| `$smwgCacheUsage['smwgStatisticsCacheExpiry']` | `$smwgCacheUsage['special.statistics']` |
| `$smwgCacheUsage['smwgPropertiesCacheExpiry']` | `$smwgCacheUsage['special.properties']` |
| `$smwgCacheUsage['smwgUnusedPropertiesCacheExpiry']` | `$smwgCacheUsage['special.unusedproperties']` |
| `$smwgCacheUsage['smwgWantedPropertiesCacheExpiry']` | `$smwgCacheUsage['special.wantedproperties']` |

### Renamed `<section>` parser tag

SMW's `<section>` parser tag is renamed to `<smwsection>` so it no longer collides with the `<section>` tag registered by extensions such as [LabeledSectionTransclusion](https://www.mediawiki.org/wiki/Extension:Labeled_Section_Transclusion). The rendered output is unchanged (still an HTML `<section class="smw-property-specification">` element), so styling and property-page tabs are unaffected; only the wikitext tag name changes.

Saved pages are not migrated automatically. Update any page (typically in the `Property:` namespace) that wraps content in `<section>...</section>` for SMW, replacing the tags with `<smwsection>...</smwsection>`. The `$smwgSupportSectionTag` setting still controls whether SMW registers its tag; with the collision resolved, most wikis no longer need to disable it.

## Developers

### Query API module subclasses now require a `QuerySourceFactory`

`SMW\MediaWiki\Api\Query`, the base class for SMW's query API modules, gained a
required third constructor argument:

```php
public function __construct(
	ApiMain $main,
	string $action,
	QuerySourceFactory $querySourceFactory
)
```

SMW's own `ask` and `askargs` modules are registered so MediaWiki's ObjectFactory
injects the dependency. Extensions that register an API module subclassing
`Api\Query` must do the same — add the `SMW.QuerySourceFactory` service to the
module's `extension.json` registration:

```json
"APIModules": {
	"yourmodule": {
		"class": "Your\\Api\\Module",
		"services": [
			"SMW.QuerySourceFactory"
		]
	}
}
```

A subclass still registered by bare class name — or instantiated with only
`$main` and `$action` — fails with an `ArgumentCountError`.

### Removed job aliases

All job types must now use their `smw.*` names. The following aliases no longer work:

| Removed alias | Use instead |
|---|---|
| `SMW\UpdateJob` | `smw.update` |
| `SMW\RefreshJob` | `smw.refresh` |
| `SMW\UpdateDispatcherJob` | `smw.updateDispatcher` |
| `SMW\FulltextSearchTableUpdateJob` | `smw.fulltextSearchTableUpdate` |
| `SMW\EntityIdDisposerJob` | `smw.entityIdDisposer` |
| `SMW\PropertyStatisticsRebuildJob` | `smw.propertyStatisticsRebuild` |
| `SMW\FulltextSearchTableRebuildJob` | `smw.fulltextSearchTableRebuild` |
| `SMW\ChangePropagationDispatchJob` | `smw.changePropagationDispatch` |
| `SMW\ChangePropagationUpdateJob` | `smw.changePropagationUpdate` |
| `SMW\ChangePropagationClassUpdateJob` | `smw.changePropagationClassUpdate` |
| `SMWUpdateJob` | `smw.update` |
| `SMWRefreshJob` | `smw.refresh` |

### Deprecated class aliases

These aliases are deprecated and will be removed in a future release. Update code to the new namespaced class names.

| Deprecated alias | New class name |
|---|---|
| `SMWDIBlob` | `SMW\DataItems\Blob` |
| `SMWDIBoolean` | `SMW\DataItems\Boolean` |
| `SMW\DIConcept` | `SMW\DataItems\Concept` |
| `SMWDIContainer` | `SMW\DataItems\Container` |
| `SMWDataItem` | `SMW\DataItems\DataItem` |
| `SMWDIError` | `SMW\DataItems\Error` |
| `SMWDIGeoCoord` | `SMW\DataItems\GeoCoord` |
| `SMWDINumber` | `SMW\DataItems\Number` |
| `SMW\DIProperty` | `SMW\DataItems\Property` |
| `SMWDITime` | `SMW\DataItems\Time` |
| `SMWDIUri` | `SMW\DataItems\Uri` |
| `SMW\DIWikiPage` | `SMW\DataItems\WikiPage` |
| `SMWDataValue` | `SMW\DataValues\DataValue` |
| `SMWConceptValue` | `SMW\DataValues\ConceptValue` |
| `SMWErrorValue` | `SMW\DataValues\ErrorValue` |
| `SMWNumberValue` | `SMW\DataValues\NumberValue` |
| `SMWPropertyListValue` | `SMW\DataValues\PropertyListValue` |
| `SMWQuantityValue` | `SMW\DataValues\QuantityValue` |
| `SMWRecordValue` | `SMW\DataValues\RecordValue` |
| `SMWTimeValue` | `SMW\DataValues\TimeValue` |
| `SMWURIValue` | `SMW\DataValues\URIValue` |
| `SMWWikiPageValue` | `SMW\DataValues\WikiPageValue` |
| `SMWExpData` | `SMW\Export\ExpData` |
| `SMWExportController` | `SMW\Export\ExportController` |
| `SMWExporter` | `SMW\Export\Exporter` |
| `SMWQuery` | `SMW\Query\Query` |
| `SMWQueryProcessor` | `SMW\Query\QueryProcessor` |
| `SMW\QueryPrinterFactory` | `SMW\Query\QueryPrinterFactory` |
| `SMW\PropertiesQueryPage` | `SMW\QueryPages\PropertiesQueryPage` |
| `SMW\QueryPage` | `SMW\QueryPages\QueryPage` |
| `SMW\UnusedPropertiesQueryPage` | `SMW\QueryPages\UnusedPropertiesQueryPage` |
| `SMW\WantedPropertiesQueryPage` | `SMW\QueryPages\WantedPropertiesQueryPage` |
| `SMWSpecialOWLExport` | `SMW\MediaWiki\Specials\SpecialOWLExport` |
| `SMWSpecialTypes` | `SMW\MediaWiki\Specials\SpecialTypes` |
| `SMW\SpecialConcepts` | `SMW\MediaWiki\Specials\SpecialConcepts` |
| `SMW\SpecialProperties` | `SMW\MediaWiki\Specials\SpecialProperties` |
| `SMW\SpecialUnusedProperties` | `SMW\MediaWiki\Specials\SpecialUnusedProperties` |
| `SMW\SpecialWantedProperties` | `SMW\MediaWiki\Specials\SpecialWantedProperties` |
| `SMW\MessageFormatter` | `SMW\Formatters\MessageFormatter` |
| `SMWInfolink` | `SMW\Formatters\Infolink` |
| `SMWPageLister` | `SMW\Formatters\PageLister` |
| `SMW\Highlighter` | `SMW\Formatters\Highlighter` |
| `SMW\RecurringEvents` | `SMW\Utils\RecurringEvents` |
| `SMW\SemanticData` | `SMW\DataModel\SemanticData` |
| `SMW\Subobject` | `SMW\DataModel\Subobject` |
| `SMWElasticStore` | `SMW\Elastic\ElasticStore` |
| `SMWSearch` | `SMW\MediaWiki\Search\ExtendedSearchEngine` |
| `SMWOutputs` | `SMW\MediaWiki\Outputs` |
| `SMWPageSchemas` | `SMW\MediaWiki\PageSchemas` |
| `SMW\ContentParser` | `SMW\Parser\ContentParser` |
| `SMW\SQLStore\Lookup\ListLookup` | `SMW\Lookup\ListLookup` |
| `SMW\SQLStore\Lookup\CachedListLookup` | `SMW\Lookup\CachedListLookup` |
| `SMW\SQLStore\ConceptCache` | `SMW\SQLStore\ConceptMaterializer` |

### Removed long-deprecated methods

The following long-deprecated functions and methods were removed. Use the listed replacement.

* `smwfNormalTitleText()` — use `Localizer::getInstance()->normalizeTitleText()` (deprecated since 3.2)
* `smwfNumberFormat()` — use `IntlNumberFormatter::getInstance()->getLocalizedFormattedNumber()` (deprecated since 2.1)
* `SMW_HEADER_TOOLTIP`, `SMW_HEADER_SORTTABLE`, `SMW_HEADER_STYLE` constants and the numeric-id branch in `Outputs::requireHeadItem()`
* `TimeValue::getXMLSchemaDate()` — use `getISO8601Date()`
* `ValueDescription::getDataValue()` — use `getDataItem()`
* `ResultPrinter::getParameters()` — use `getParamDefinitions()`
* `ParserData::setData()` / `getData()` — use `setSemanticData()` / `getSemanticData()`
* `Subobject::setSemanticData()` — use `setEmptyContainerForId()`
* `PropertyRegistry::findPropertyLabel()` — use `findPropertyLabelById()`
* `PropertyRegistry::getPredefinedPropertyTypeId()` — use `getPropertyValueTypeById()`
* `PropertyRegistry::findPropertyId()` — use `findPropertyIdByLabel()`
* `ParserFunctionFactory::getSubobjectParser()` — use `newSubobjectParserFunction()`
* `ParserFunctionFactory::getRecurringEventsParser()` — use `newRecurringEventsParserFunction()`
* `smwInitProperties` hook — use `SMW::Property::initProperties`
* `SMWSQLStore3::deleteSubjectBefore` / `deleteSubjectAfter` hooks — use `SMW::SQLStore::BeforeDeleteSubjectComplete` / `AfterDeleteSubjectComplete`
* `ParserParameterProcessor::getFirst()` — use `getFirstParameter()`
* `DataValue::prepareValue()` — use `DescriptionBuilder`
* `HashBuilder::createHashIdFromSegments()` — use `createFromSegments()`
* `DataValueFactory::newDataItemValue()` — use `newDataValueByItem()`
* `DataValueFactory::newPropertyObjectValue()` — use `newDataValueByProperty()`
* `DataValueFactory::newTypeIdValue()` — use `newDataValueByType()`
* `DataValueFactory::newPropertyValue()` — use `newDataValueByText()`
* `InMemoryPoolCache::getPoolCacheFor()` — use `getPoolCacheById()`
* `ParserParameterProcessor::getParameterValuesFor()` — use `getParameterValuesByKey()`
* `Localizer::getLanguageCodeFrom()` — use `getAnnotatedLanguageCodeFrom()`
* `ServicesFactory::newQueryParser()` — use `QueryFactory::newQueryParser()`
* `DataTypeRegistry::getDataItemId()` — use `getDataItemByType()`
* `DataTypeRegistry::getDefaultDataItemTypeId()` — use `getDefaultDataItemByType()`
* `QueryResult::getLink()` — use `getQueryLink()`
* `Options::getOptions()` — use `toArray()` (deprecated since 3.0)
* `PropertyRegistry::isKnownPropertyId()` — use `isRegistered()` (deprecated since 3.0)
* `PropertyRegistry::getPropertyTypeId()` — use `getPropertyValueTypeById()` (deprecated since 3.0)
* `PropertyRegistry::registerPropertyDescriptionMsgKeyById()` — use `registerPropertyDescriptionByMsgKey()` (deprecated since 3.0)
* `ParserData::setSemanticDataStateToParserOutputProperty()` — use `copyToParserOutput()` (deprecated since 3.0)
* `ChangeOp::getCombinedIdListOfChangedEntities()` — use `getChangedEntityIdSummaryList()` (deprecated since 3.0)
* `TableChangeOp::getFixedPropertyValueBy()` — use `getFixedPropertyValByField()` (deprecated since 3.0)
* `DataTypeRegistry::findTypeId()` — use `findTypeByLabel()` (deprecated since 3.0)
* `DataValue::checkAllowedValues()` — use `checkConstraints()` (deprecated since 3.1)
* `EntityIdManager::getDataItemPoolHashListFor()` — use `getDataItemsFromList()` (deprecated since 3.0)
* `CallableUpdate::enabledDeferredUpdate()` — use `isDeferrableUpdate()` (deprecated since 3.0)
* `TaskHandler::setEnabledFeatures()` — use `setFeatureSet()` (deprecated since 3.1)
* `MwCollaboratorFactory::newEditInfoProvider()` — use `newEditInfo()` (deprecated since 3.1)
* `LocalLanguage::fetchByLanguageCode()` — use `fetch()` (deprecated since 3.0)
* `LocalLanguage::getPropertyId()`, `findMonth()`, `getMonthLabel()` — use `getPropertyIdByLabel()`, `findMonthNumberByLabel()`, `getMonthLabelByNumber()`
* `LoadBalancerConnectionProvider::asConnectionRef()` (deprecated since 5.0)
* `ParserData::pushSemanticDataToParserOutput()` — use `copyToParserOutput()` (deprecated since 3.0)
* `DataValue::isEnabledFeature()` — use `hasFeature()` (deprecated since 3.0)
* `TaskHandler::isEnabledFeature()` — use `hasFeature()` (deprecated since 3.1)
* `Property::setPropertyTypeId()` — use `setPropertyValueType()` (deprecated since 3.0)
* `Property::findPropertyTypeId()` — use `findPropertyValueType()` (deprecated since 3.0)

### Removed internal APIs

* `ServicesFactory::getMediaWikiLogger()` and the `SMW\Utils\Logger` wrapper — use `MediaWiki\Logger\LoggerFactory::getInstance( $channel )` directly
* **Cache services moved to MediaWiki primitives** (the bundled `onoi/cache` and `onoi/blob-store` dependencies are gone):
  * `ServicesFactory::getCache()` and the `SMW.Cache` service are removed — use `ServicesFactory::getObjectCache()` (or the `SMW.ObjectCache` service), which returns a `Wikimedia\ObjectCache\BagOStuff` over `$smwgMainCacheType`.
  * `CacheFactory::newFixedInMemoryCache()`, `newNullCache()`, `newMediaWikiCache()`, `newMediaWikiCompositeCache()`, and `newCacheByType()` are removed — use MediaWiki's `Wikimedia\ObjectCache\BagOStuff` / `MapCacheLRU`, or the in-tree `SMW\Cache\InMemoryLruCache`, directly.
  * `ServicesFactory::newBlobStore()` and `CacheFactory::newBlobStore()` are renamed to `newQueryResultStore()`, and the `'BlobStore'` service route is now `'QueryResultStore'` (they construct a `SMW\Query\Cache\QueryResultStore`).
  * `CacheFactory::getPurgeCacheKey()` is removed — build the key with `smwfCacheKey( SMW\MediaWiki\Hooks\ArticlePurge::CACHE_NAMESPACE, $articleId )`.
  * `SMW\InMemoryPoolCache::__construct()` no longer takes a `CacheFactory` argument — resolve the pool via `InMemoryPoolCache::getInstance()`.
