wikimedia/mediawiki-extensions-Wikibase

View on GitHub
lib/packages/wikibase/data-model/RELEASE-NOTES.md

Summary

Maintainability
Test Coverage
# Wikibase DataModel release notes

## Version 10.0.0 (TBD)

* Removed support for calling `Statement::addNewReference()` and `StatementList` constructor with a
  single array argument, which was deprecated in `Version 9.6.0 (2021-03-31)`. These should now be
  called with a variadic argument list.
* Added `__serialize()` and `__unserialize()` methods to the `EntityId` interface,
  and removed the `serialize()` and `unserialize()` methods and the `Serializable` interface.
* Added native type hints to the `Statement` and `StatementList` classes
* Added `strict_types=1` to `Statement.php`, `StatementList.php`, and related test files
* Removed support for repository names in entity IDs (e.g. `foo:Q1234`)

## Version 9.6.1 (2021-04-01)

* `Snak` now declares `getHash()` and `equals()` methods again,
  which it used to inherit from the `Hashable` and `Immutable` interfaces prior to version 9.6.0.
  (The methods were never removed from any specific classes,
  but since `Snak` is an interface, Phan started complaining that the methods were unknown.)

## Version 9.6.0 (2021-03-31)

* `ReferenceList::addNewReference()`, `Statement::addNewReference()` and the `StatementList` constructor
  supported being called with a variadic argument list, with a single array argument,
  or (in the case of `StatementList`) with a single `Traversable` argument.
  The latter two forms are now deprecated (though they still work);
  please update your code:
  for instance, change `->addNewReference( [ $x, $y ] )` to `->addNewReference( $x, $y )`,
  and `->addNewReference( $snaks )` to `->addNewReference( ...$snaks )`.
* `Statement`, `Reference`, `SnakList` and `Snak` no longer implement the `Hashable` and `Immutable` interfaces from `DataValues/DataValues`.
* Removed usages of the `Comparable` interface
* Made the library installable together with DataValues 3.x

## Version 9.5.1 (2020-06-03)

* Updated release notes

## Version 9.5.0 (2020-06-02)

* Added PHP 7.4 support

## Version 9.4.0 (2020-04-03)

* Added `getGuidPart` to `StatementGuid`

## Version 9.3.0 (2020-03-10)

* Raised minimum PHP version to 7.1
* Added `TermTypes` with term type constants
* Allow installing with wikimedia/assert 0.5.0

## Version 9.2.0 (2020-01-24)

* `TermList` now throws `InvalidArgumentException` when given non-iterable rather than failing silently
* `SiteLinkList` now throws `InvalidArgumentException` when given non-iterable rather than failing silently
* Slightly optimized `EntityId::isForeign`

## Version 9.1.0 (2019-01-24)

* Raised minimum PHP version to 7.0 or HHVM
* Redirecting an entity to itself now causes an exception

## Version 9.0.1 (2018-11-09)

* `Item` and `Property` now implement `ClearableEntity` again

## Version 9.0.0 (2018-11-01)

* Breaking change: `EntityDocument` no longer extends `ClearableEntity` (8.0.0 revert)
* The `TermList` constructor now takes any `iterable` instead of just `array`
* The `SiteLinkList` constructor now takes any `iterable` instead of just `array`
* Added `TermList::addAll`

## Version 8.0.0 (2018-08-03)

#### Breaking changes

* `Item::setId` and `Property::setId` no longer accept integers
* Removed `Item::getSiteLinks` and `Item::hasSiteLinks`
* Removed `HashArray`
* `SnakList` no longer extends `HashArray` and no longer has these public and protected methods:
    * `addElement`
    * `getByElementHash`
    * `getNewOffset`
    * `getObjectType`
    * `hasElement`
    * `hasElementHash`
    * `hasValidType`
    * `preSetElement`
    * `removeByElementHash`
    * `removeElement`
    * `setElement`
* Removed `WIKIBASE_DATAMODEL_VERSION` constant
* Added periods to the list of disallowed characters in `RepositoryNameAssert`
* `EntityDocument` now extends `ClearableEntity`

#### Other changes

* Added `StatementListProvidingEntity`
* Un-deprecated several sitelink related shortcuts from `Item`:
    * `addSiteLink`
    * `getSiteLink`
    * `hasLinkToSite`
    * `removeSiteLink`
* Installation together with DataValues 2.x is now supported

## Version 7.5.0 (2018-05-02)

* Introduce `ClearableEntity` interface.

## Version 7.4.1 (2018-05-02)

* Removed `clear` from `EntityDocument`. This was a compatibility break of the interface.

## Version 7.4.0 (2018-05-02)

* Added `clear` to `EntityDocument`

## Version 7.3.0 (2017-11-13)

* Performance optimizations on `EntityId`:
      * Added protected `$repositoryName` and `$localPart` properties
      * Added protected `extractRepositoryNameAndLocalPart`

## Version 7.2.0 (2017-10-23)

* Performance optimizations on methods critical for dump generation:
    * `DispatchingEntityIdParser::parse`
    * `SnakList::orderByProperty`

## Version 7.1.0 (2017-09-01)

* Changed `EntityIdValue::getArrayValue` to allow it handle foreign entity IDs and entity IDs that
  do not have a numeric representation.
* Fixed exception handling in `EntityIdValue` not always forwarding the full stack trace.
* Deprecated `EntityIdValue::newFromArray`
* Deprecated `StatementGuid::getSerialization`
* Improved documentation of `EntityDocument::isEmpty`
* Removed MediaWiki integration files

## Version 7.0.0 (2017-03-15)

This release adds support for custom entity types to `EntityIdValue`, and thus changes the hashes of
snaks, qualifiers, and references.

* Changed the internal `serialize()` format of several `EntityId` related classes. In all cases
  `unserialize()` still supports the previous format.
    * Serialization of `SnakObject` (includes `PropertyNoValueSnak` and `PropertySomeValueSnak`)
      does not use numeric IDs any more
    * Serialization of `PropertyValueSnak` (includes `DerivedPropertyValueSnak`) does not use
      numeric IDs any more
    * Serialization of `EntityIdValue` does not use numeric IDs any more
    * `EntityIdValue` can now serialize and unserialize `EntityId`s other than `ItemId` and
      `PropertyId`
    * Minimized serialization of `ItemId` and `PropertyId` to not include the entity type any more

#### Other breaking changes

* Removed `FingerprintHolder`. Use `TermList::clear` and `AliasGroupList::clear` instead. `Item` and
  `Property` also still implement `setFingerprint`.
* Removed class aliases deprecated since 3.0:
    * `Wikibase\DataModel\Claim\Claim`
    * `Wikibase\DataModel\Claim\ClaimGuid`
    * `Wikibase\DataModel\StatementListProvider`
* Added a `SnakList` constructor that is not compatible with the `ArrayList` constructor any more,
  and does not accept null any more.
* Removed `HashArray::equals`, and `HashArray` does not implement `Comparable` any more
* Removed `HashArray::getHash`, and `HashArray` does not implement `Hashable` any more
* Removed `HashArray::rebuildIndices`
* Removed `HashArray::indicesAreUpToDate`
* Removed `HashArray::removeDuplicates`
* Removed `$acceptDuplicates` feature from `HashArray`

#### Additions

* Added `clear` to `TermList`, `AliasGroupList` and `StatementList`
* Added `newFromRepositoryAndNumber` to `ItemId` and `PropertyId`

#### Other changes

* Fixed `ReferenceList::addReference` sometimes moving existing references around
* Fixed exceptions in `DispatchingEntityIdParser` and `ItemIdParser` not forwarding the previous
  exception

## Version 6.3.1 (2016-11-30)

* `ItemId::getNumericId` and `PropertyId::getNumericId` no longer throw exceptions for foreign IDs

## Version 6.3.0 (2016-11-03)

* Added `RepositoryNameAssert` class

## Version 6.2.0 (2016-10-14)

* Raised minimum PHP version to 5.5
* Added basic support for foreign EntityIds
    * Added `isForeign`, `getRepository` and `getLocalPart` to `EntityId`
    * The constructor of `EntityId` was made public
    * Added static `EntityId::splitSerialization` and `EntityId::joinSerialization`
    * `getNumericId` throws an exception for foreign EntityIds
    * Added documentation for foreign EntityIds

## Version 6.1.0 (2016-07-15)

* Added optional index parameter to `Statement::addStatement`.
* Added `Int32EntityId` interface.
    * `ItemId` and `PropertyId` now implement `Int32EntityId`.
    * `ItemId` and `PropertyId` construction now fails for numbers larger than 2147483647.
* Added an `id` element containing the full ID string to the `EntityIdValue::getArrayValue`
  serialization.
* Fixed `ByPropertyIdArray` iterating the properties of non-traversable objects.

## Version 6.0.1 (2016-04-25)

* Fixed `ItemId` and `PropertyId` not rejecting strings with a newline at the end.

## Version 6.0.0 (2016-03-10)

This release removes the long deprecated Entity base class in favor of much more narrow interfaces.

#### Breaking changes

* Removed `Entity` class (deprecated since 1.0)
* `Item` and `Property` no longer extend `Entity`
    * Removed `getLabel`, `getDescription`, `getAliases`, `getAllAliases`,
      `setLabels`, `setDescriptions`, `addAliases`, `setAllAliases`,
      `removeLabel`, `removeDescription` and `removeAliases` methods
* `Item::getLabels` and `Property::getLabels` now return a `TermList`
* `Item::getDescriptions` and `Property::getDescriptions` now return a `TermList`
* Removed `clear` methods from `Item` and `Property`
* `StatementListProvider`, `LabelsProvider`, `DescriptionsProvider`, `AliasesProvider` and
  `FingerprintProvider` now give the guarantee to return objects by reference
* `TermList` and `AliasGroupList` no longer throw an `InvalidArgumentException` for invalid language codes.
    * `getByLanguage` throws an `OutOfBoundsException` instead.
    * `removeByLanguage` does nothing for invalid values.
    * `hasTermForLanguage` and `hasGroupForLanguage` return false instead.

#### Additions

* `Item` and `Property` now implement `LabelsProvider`, `DescriptionsProvider` and `AliasesProvider`
* Added `Item::getAliasGroups` and `Property::getAliasGroups`

## Version 5.1.0 (2016-03-08)

This release significantly reduces the memory footprint when entities are cloned.

* `Item::copy` and `Property::copy` do not clone immutable objects any more
* Deprecated `FingerprintHolder` and `StatementListHolder`

## Version 5.0.2 (2016-02-23)

* Fixed regression in `ReferenceList::addReference` and the constructor possibly adding too many objects

## Version 5.0.1 (2016-02-18)

* Fixed regression in `ReferenceList::removeReferenceHash` possibly removing too many objects
* `ReferenceList::unserialize` no longer calls the constructor

## Version 5.0.0 (2016-02-15)

This release removes the last remaining mentions of claims. Claims are still a concept in the mental
data model, but not modelled in code any more.

* Removed `Claims` class (deprecated since 1.0)
* Removed `getClaims` and `setClaims` methods from `Entity`, `Item` and `Property` (deprecated since 1.0)
* Removed `HashableObjectStorage` class (deprecated since 4.4)
* `ReferenceList` no longer derives from `SplObjectStorage`
    * Removed `addAll`, `attach`, `contains`, `detach`, `getHash`, `getInfo`, `removeAll`,
      `removeAllExcept` and `setInfo` methods
* `ReferenceList` no longer implements `ArrayAccess`
    * Removed `offsetExists`, `offsetGet`, `offsetSet` and `offsetUnset` methods
* `ReferenceList` no longer implements `Iterator`
    * Removed `current`, `key`, `next`, `rewind` and `valid` methods
* `ReferenceList` now implements `IteratorAggregate`
    * Added `getIterator` method
* Removed `ReferenceList::removeDuplicates`
* `ReferenceList::addReference` now throws an `InvalidArgumentException` for negative indices
* Added `EntityDocument::equals`, and `EntityDocument` now implements `Comparable`
* Added `EntityDocument::copy`
* Fixed `Property::clear` not clearing statements
* `TermList` now skips and removes empty terms
* Deprecated `ByPropertyIdArray`

## Version 4.4.0 (2016-01-20)

* Added `ItemIdParser`
* Added `ReferenceList::isEmpty`
* Added `ReferencedStatementFilter::FILTER_TYPE` constant
* Added `EntityRedirect::__toString`
* Deprecated `HashableObjectStorage`
* `SnakRole` enum is not an interface any more but a private class

## Version 4.3.0 (2015-09-02)

* Added `isEmpty` to `EntityDocument`

## Version 4.2.0 (2015-08-26)

* Added `EntityRedirect`
* Added `EntityIdParser` and `EntityIdParsingException`
* Added `BasicEntityIdParser`
* Added `DispatchingEntityIdParser`
* Removed no longer needed dependency on `diff/diff`

## Version 4.1.0 (2015-08-04)

* Added `StatementList::filter`
* Added `StatementFilter` and `ReferencedStatementFilter`
* Added `LabelsProvider`, `DescriptionsProvider` and `AliasesProvider`
* Added `FingerprintHolder`

## Version 4.0.0 (2015-07-28)

#### Breaking changes

The services that resided in this component have been moved to the new
Wikibase DataModel Services library. These symbols have been removed:

* `Entity::getDiff` and `Entity::patch`
* `EntityIdParser` and derivatives
* `EntityDiffer` and associated services
* `EntityPatcher` and associated services
* `EntityDiff` and derivatives
* `ItemLookup` and `ItemNotFoundException`
* `PropertyLookup` and `PropertyNotFoundException`
* `PropertyDataTypeLookup`
* `BestStatementsFinder`
* `ByPropertyIdGrouper`
* `StatementGuidParser` and alias `ClaimGuidParser`
* `StatementGuidParsingException` and alias `ClaimGuidParsingException`
* `StatementList::getBestStatementPerProperty`

#### Additions

* Added `DerivedPropertyValueSnak`

## Version 3.0.1 (2015-07-01)

* Fixed out of bounds bug in `SnakList::orderByProperty`

## Version 3.0.0 (2015-06-06)

#### Breaking changes

The concept of `Claim` is no longer modelled:

* The `Claim` class itself has been removed, though `Claim` is now a temporary alias for `Statement`
* `Claim::RANK_TRUTH` have been removed
* `Statement` no longer takes a `Claim` in its constructor
* `Statement::setClaim` and `Statement::getClaim` have been removed
* Removed `ClaimList`
* Removed `ClaimListAccess`
* Removed `addClaim`, `hasClaims` and `newClaim` from all entity classes

Phasing out of `Claims`:

* `Claims::addClaim` no longer supports setting an index
* Removed `Claims::getBestClaims`, use `StatementList::getBestStatements` instead
* Removed `Claims::getByRank` and `Claims::getByRanks`, use `StatementList::getByRank` instead
* Removed `Claims::getMainSnaks`, use `StatementList::getMainSnaks` instead
* Removed `Claims::getClaimsForProperty`, use `StatementList::getWithPropertyId` instead
* Removed `Claims::getHashes`
* Removed `Claims::getGuids`
* Removed `Claims::equals` (and `Claims` no longer implements `Comparable`)
* Removed `Claims::getHash` (and `Claims` no longer implements `Hashable`)
* Removed `Claims::hasClaim`
* Removed `Claims::isEmpty`, use `StatementList::isEmpty` instead
* Removed `Claims::indexOf`, use `StatementList::getFirstStatementWithGuid` or `StatementByGuidMap` instead
* Removed `Claims::removeClaim`

Other breaking changes:

* Removed `Snaks` interface, use `SnakList` instead
* Removed previously deprecated `Entity::getAllSnaks`, use `StatementList::getAllSnaks` instead
* Removed previously deprecated `EntityId::getPrefixedId`, use `EntityId::getSerialization` instead
* Removed previously deprecated `Property::newEmpty`, use `Property::newFromType` or `new Property()` instead
* Renamed `StatementList::getWithPropertyId` to `StatementList::getByPropertyId`
* Renamed `StatementList::getWithRank` to `StatementList::getByRank`
* Added `EntityDocument::setId`
* `Entity::setLabel` and `Entity::setDescription` no longer return anything
* `Reference` and `ReferenceList`s no longer can be instantiated with `null`

#### Additions

* Added `StatementByGuidMap`
* Added `StatementListHolder`
* Added `StatementList::getFirstStatementWithGuid`
* Added `StatementList::removeStatementsWithGuid`
* `ReferenceList::addNewReference` and `Statement::addNewReference` support an array of Snaks now
* Added PHPMD support

#### Deprecations

* Renamed `Claim\ClaimGuid` to `Statement\StatementGuid`, leaving a b/c alias in place
* Renamed `Claim\ClaimGuidParser` to `Statement\StatementGuidParser`, leaving a b/c alias in place
* Renamed `Claim\ClaimGuidParsingException` to `Statement\StatementGuidParsingException`, leaving a b/c alias in place
* Renamed `StatementListProvider` to `Statement\StatementListProvider`, leaving a b/c alias in place

#### Other changes

* `Item::setLabel`, `Item::setDescription` and `Item::setAliases` are no longer deprecated
* `Property::setLabel`, `Property::setDescription` and `Property::setAliases` are no longer deprecated

## Version 2.6.1 (2015-04-25)

* Allow installation together with Diff 2.x.

## Version 2.6.0 (2015-03-08)

* Added `Reference::isEmpty`
* Empty strings are now detected as invalid in the `SiteLink` constructor
* Empty References are now ignored when added to `ReferenceList`
* The `ReferenceList` constructor now throws an `InvalidArgumentException` when getting a non-iterable input
* The `SnakList` constructor now throws an `InvalidArgumentException` when getting a non-iterable input
* The `AliasGroup::equals` and `Term::equals` methods no longer incorrectly return true for fallback objects

## Version 2.5.0 (2014-01-20)

* Added `ItemLookup` and `PropertyLookup` interfaces
* Added `ItemNotFoundException`
* Added `AliasGroupList::getWithLanguages`
* Added `AliasGroupList::toTextArray`
* Added `ItemIdSet::getSerializations`
* Added `SiteLinkList::setNewSiteLink`
* Added `SiteLinkList::setSiteLink`
* Added `SiteLinkList::toArray`
* Added `TermList::getWithLanguages`
* Empty strings are now detected as invalid language codes in the term classes
* Made all `Fingerprint` constructor parameters optional
* Made all `Item` constructor parameters optional
* Made the `Property` constructor's fingerprint parameter nullable
* The `StatementList` constructor now accepts `Statement` objects in variable-length argument list format
* Deprecated `Fingerprint::newEmpty` in favour of `new Fingerprint()`
* Deprecated `Item::newEmpty` in favour of `new Item()`
* Added PHPCS support

## Version 2.4.1 (2014-11-26)

* Fixed `StatementList` not reindexing array keys

## Version 2.4.0 (2014-11-23)

* `Property` now implements the deprecated claim related methods defined in `Entity`
* Added `AliasGroupList::isEmpty`
* Added `StatementList::getBestStatements`
* Added `StatementList::getWithRank`
* Added `TermList::isEmpty`
* Added `AliasGroupFallback`
* Added `TermFallback`

## Version 2.3.0 (2014-11-18)

* Added `AliasGroupList::toArray`
* Added `StatementList::getMainSnaks`
* Added `StatementList::getWithPropertyId`
* `BestStatementsFinder::getBestStatementsForProperty` no longer throws an `OutOfBounds` exception

## Version 2.2.0 (2014-11-10)

* `Item` and `Property` now implement `StatementListProvider`
* Introduced the `StatementListProvider` interface for classes containing a `StatementList`
* Added rank comparison to `Statement::equals`

## Version 2.1.0 (2014-10-27)

* `ReferenceList` now implements `Serializable`
* Enhanced 32 bit compatibility for numeric ids

## Version 2.0.2 (2014-10-23)

* Fixed handling of numeric ids as string in `LegacyIdInterpreter` which was broken in 2.0.1.

## Version 2.0.1 (2014-10-23)

* Fixed last remaining HHVM issue (caused by calling `reset` on an `ArrayObject` subclass)
* `EntityIdValue::unserialize` now throws the correct type of exception
* Improved performance of `BasicEntityIdParser` and `LegacyIdInterpreter`

## Version 2.0.0 (2014-10-14)

#### Breaking changes

* Removed all class aliases
* Removed support for deserializing `EntityId` instances serialized with version 0.4 or earlier
* Removed `References` interface in favour of `ReferenceList`
* The `Statement` constructor no longer supports a `Snak` parameter

#### Additions

* Added `Statement::RANK_` enum
* Added `Statement::addNewReference`

#### Deprecations

* Deprecated `Claim::RANK_` enum in favour of `Statement::RANK_` enum
* Deprecated `Claim::getRank`

## Version 1.1.0 (2014-09-29)

#### Additions

* The `Property` constructor now accepts an optional `StatementList` parameter
* Added `Property::getStatements` and `Property::setStatements`
* Added `PropertyIdProvider` interface
* Added `ByPropertyIdGrouper`
* Added `BestStatementsFinder`
* Added `EntityPatcher` and `EntityPatcherStrategy`
* Added `StatementList::getAllSnaks` to use instead of `Entity::getAllSnaks`
* The `Statement` constructor now also accepts a `Claim` parameter
* Added `Statement::setClaim`
* The `Reference` constructor now accepts a `Snak` array
* Added `ReferenceList::addNewReference`

## Version 1.0.0 (2014-09-02)

#### Breaking changes

Changes in the `Entity` hierarchy:

* Changed the constructor signature of `Item`
* Changed the constructor signature of `Property`
* Removed `Entity::setClaims` (`Item::setClaims` has been retained)
* Removed `Entity::stub`
* Removed `Entity::getIdFromClaimGuid`
* `Entity::removeLabel` no longer accepts an array of language codes
* `Entity::removeDescription` no longer accepts an array of language codes
* `Entity` no longer implements `Serializable`
* Protected method `Entity::patchSpecificFields` no longer has a second parameter
* `Entity::getFingerprint` is now returned by reference

Removal of `toArray` and `newFromArray`:

* Removed `Entity::toArray`, `Item::newFromArray` and `Property::newFromArray`
* Removed `Claim::toArray` and `Statement::toArray`
* Removed `Claim::newFromArray` and `Statement::newFromArray`
* Removed `ReferenceList::toArray` and `ReferenceList::newFromArray`
* Removed `toArray` from the `References` interface
* Removed `SiteLink::toArray` and `SiteLink::newFromArray`
* Removed `toArray` from the `Snak` and `Snaks` interfaces
* Removed `PropertyValueSnak::toArray`
* Removed `SnakList::toArray` and `SnakList::newFromArray`
* Removed `SnakObject::toArray` and `SnakObject::newFromArray`
* Removed `SnakObject::newFromType`

Other breaking changes:

* `Item` now has an array of `Statement` rather than an array of `Claim`
* `Property` no longer has an array of `Claim`
* `Claim` and `Statement` no longer implement `Serializable`
* Protected method `Entity::entityToDiffArray` got renamed to `Entity::getDiffArray`
* Removed `Fingerprint::getAliases`
* Removed `EntityId::newFromPrefixedId`
* The constructor of `EntityId` is no longer public
* `Claims::getDiff` no longer takes a second optional parameter
* `Claims::getDiff` now throws an `UnexpectedValueException` rather than an `InvalidArgumentException`
* Removed these class aliases deprecated since 0.4:
`ItemObject`, `ReferenceObject`, `ClaimObject`, `StatementObject`
* `HashArray` and `SnakList` no longer take an optional parameter in `getHash`
* Calling `clear` on an `Item` will now cause its statements to be removed
* `SiteLinkList::addNewSiteLink` no longer returns a `SiteLinkList` instance
* Removed the global variable `evilDataValueMap`
* Removed `ClaimAggregate` interface, which is thus no longer implemented by `Entity`
* `HashableObjectStorage::getValueHash` no longer accepts a first optional parameter
* `MapHasher` and `MapValueHasher` are now package private
* Removed `Claims::getDiff`

#### Additions

* Added `ClaimList`
* Added `StatementList`
* Added `StatementListDiffer`
* Added `PropertyDataTypeLookup` and trivial implementation `InMemoryDataTypeLookup`
* Added `PropertyNotFoundException`
* Added `ItemDiffer` and `PropertyDiffer`
* Added `EntityDiffer` and `EntityDifferStrategy`
* Added `Statement::getClaim`
* Added `Item::getStatements`
* Added `Item::setStatements`

#### Deprecations

* Deprecated `Entity` (but not the derivatives)
* Deprecated `Claims`
* Deprecated `Entity::setId`
* Deprecated `Entity::newClaim`
* Deprecated `Entity::getAllSnaks`
* Deprecated `Entity::getDiff` in favour of `EntityDiffer` and more specific differs
* Deprecated `Item::getClaims` in favour of `Item::getStatements`
* Deprecated `Item::setClaims` in favour of `Item::setStatements`
* Deprecated `Item::hasClaims` in favour of `Item::getStatements()->count`
* Deprecated `Item::addClaim` in favour of `Item::getStatements()->add*`

#### Other changes

* Undeprecated passing an integer to `Item::setId` and `Property::setId`
* The FQN of `Statement` is now `Wikibase\DataModel\Statement\Statement`. The old FQN is deprecated.

## Version 0.9.1 (2014-08-26)

* Fixed error caused by redeclaration of getType in `Entity`, after it already got defined in `EntityDocument`

## Version 0.9.0 (2014-08-15)

* Changed the signatures of `setLabel`, `setDescription` and `setAliasGroup` in `Fingerprint`
* Added `hasLabel`, `hasDescription` and `hasAliasGroup` to `Fingerprint`

## Version 0.8.2 (2014-07-25)

* Added `EntityDocument` interface, which is implemented by `Entity`
* Added `LegacyIdInterpreter`
* Undeprecated `Entity::isEmpty`
* Undeprecated `Entity::clear`

## Version 0.8.1 (2014-06-06)

* Fixed fatal error when calling `Item::getSiteLinkList` on an `Item` right after constructing it

## Version 0.8.0 (2014-06-05)

#### Breaking changes

* `Item::removeSiteLink` no longer takes an optional second parameter and no longer returns a boolean
* Shallow clones of `Item` will now share the same list of site links
* `SiteLinkList` is now mutable

#### Additions

* `AliasGroupList::hasGroupForLanguage`
* `AliasGroupList::setAliasesForLanguage`
* `SiteLinkList::addSiteLink`
* `SiteLinkList::addNewSiteLink`
* `SiteLinkList::removeLinkWithSiteId`
* `SiteLinkList::isEmpty`
* `SiteLinkList::removeLinkWithSiteId`
* `Item::getSiteLinkList`
* `Item::setSiteLinkList`
* `TermList::setTextForLanguage`

#### Deprecations

* `Item::addSiteLink`
* `Item::removeSiteLink`
* `Item::getSiteLinks`
* `Item::getSiteLink`
* `Item::hasLinkToSite`
* `Item::hasSiteLinks`

#### Improvements

* An empty `TermList` can now be constructed with no constructor arguments
* An empty `AliasGroupList` can now be constructed with no constructor arguments

## Version 0.7.4 (2014-04-24)

#### Additions

* Made these classes implement `Comparable`:
    * `TermList`
    * `AliasGroupList`
    * `Fingerprint`
    * `SiteLink`
    * `SiteLinkList`
    * `Claim`
    * `Claims`
    * `Statement`
* Added methods to `Fingerprint`:
    * `getLabel`
    * `setLabel`
    * `removeLabel`
    * `setLabels`
    * `getDescription`
    * `setDescription`
    * `removeDescription`
    * `setDescriptions`
    * `getAliasGroup`
    * `setAliasGroup`
    * `removeAliasGroup`
    * `setAliasGroups`
    * `getAliasGroups`
    * `isEmpty`
* Added `ItemIdSet`

#### Deprecations

* ~~`Entity::clear` (to be removed in 1.0)~~
* ~~`Entity::isEmpty` (to be removed in 1.0)~~
* `Entity::stub` (to be removed in 1.0)
* `Fingerprint::getAliases` (in favour of `Fingerprint::getAliasGroups`)

#### Removals

* This library no longer uses the MediaWiki i18n system when MediaWiki is loaded.
No description will be shown as part of its entry on Special:Version.

## Version 0.7.3 (2014-04-11)

#### Additions

* Added `Wikibase\DataModel\Term` namespace with these constructs:
    * Term\AliasGroup
    * Term\AliasGroupList
    * Term\Fingerprint
    * Term\FingerprintProvider
    * Term\Term
    * Term\TermList
* Added `Entity::getFingerprint`
* Added `Entity::setFingerprint`

#### Deprecations

* Deprecated `Property::newEmpty` in favor of `Property::newFromType`
* Deprecated old fingerprint related methods in `Entity`:
    * setLabel
    * setDescription
    * removeLabel
    * removeDescription
    * getAliases
    * getAllAliases
    * setAliases
    * addAliases
    * removeAliases
    * getDescriptions
    * getLabels
    * getDescription
    * getLabel
    * setLabels
    * setDescriptions
    * setAllAliases
* Deprecated `SnakList::newFromArray`
* Deprecated `Statement::newFromArray`
* Deprecated `Claim::newFromArray`
* Deprecated `ReferenceList::newFromArray`

## Version 0.7.2 (2014-03-13)

* Added Claims::getByRanks

## Version 0.7.1 (2014-03-12)

* Removed DataValues Geo, DataValues Time and DataValues Number from the dependency list.
They where no longer needed.

## Version 0.7.0 (2014-03-07)

#### Additions

* Added TypedSnak value object
* Added SiteLinkList value object
* Added Claims::getBestClaims
* Added Claims::getByRank

#### Improvements

* The PHPUnit bootstrap file now works again on Windows
* Changed class loading from PSR-0 to PSR-4

#### Deprecations

* Deprecated SiteLink::toArray(), SiteLink::newFromArray(), SiteLink::getBadgesFromArray()

#### Removals

* Removed PropertySnak interface
* Removed Claims::getObjectType

## Version 0.6.0 (2013-12-23)

#### Improvements

* Wikibase DataModel now uses the "new" DataValues components. This means binding to other code has
decreased and several design issues have been tackled.
* Wikibase DataModel is now PSR-0 compliant.

#### Deprecations

* All classes and interfaces not yet in the Wikibase\DataModel namespace got moved. The old names
remain as aliases, and should be considered as deprecated.
* SimpleSiteLink was renamed to SiteLink. The old name remains as deprecated alias.
* Item::addSimpleSiteLink and Item::getSimpleSiteLinks where renamed to Item::adSiteLink and
Item::getSiteLinks. The old names remains as deprecated aliases.

#### Removals

* Entity::getTerms was removed, as it returned objects of type Term, which is defined by a component
Wikibase DataModel does not depend upon.

## Version 0.5.0 (2013-12-11)

Note that this list is incomplete. In particular, not all breaking changes are listed.

#### Additions

* Added ItemId and PropertyId classes.
* Added BasicEntityIdParser that allows for parsing of serializations of entity ids defined
by Wikibase DataModel.
* Added ClaimGuid and ClaimGuidParser.

#### Improvements

* EntityId no longer is a DataValue. A new EntityIdValue was added to function as a DataValue
representing the identity of an entity.

#### Removals

* ObjectComparer has been removed from the public namespace.
* SnakFactory has been moved out of this component.

#### Deprecations

* Constructing an EntityId (rather then one of its derivatives) is now deprecated.
* Wikibase\EntityId has been renamed to Wikibase\DataModel\Entity\EntityId. The old name is deprecated.

## Version 0.4.0 (2013-06-17)

Initial release as Wikibase DataModel component.

## Version 0.1.0 (2012-11-01)

Initial release as part of Wikibase.