# Changelog archive (1.5.3 and earlier)

Releases before 2.0.0. For 2.0.0 and later, see the [current changelog](https://github.com/trungdong/prov/blob/master/HISTORY.md).

## 1.5.3 (2018-11-20)

- Reorganised source code to /src
- Added Python 3.7 support
- Removed Python 3.3 support due to end-of-life
- plus minor improvements and bug fixes

## 1.5.2 (2018-02-06)

- Fixed association relation in RDF serialisation
- Fixed compatibility with networkx 2.0+

## 1.5.1 (2017-07-18)

- Replaced pydotplus with pydot (see #111)
- Fixed datetime and bundle error in RDF serialisation
- Tested against Python 3.6
- Improved documentation

## 1.5.0 (2016-10-19)

- Added: Support for [PROV-O](http://www.w3.org/TR/prov-o/) (RDF) serialization and deserialization
- Added: `direction` option for {py:meth}`prov.dot.prov_to_dot`
- Added: {py:meth}`prov.graph.graph_to_prov` to convert a [MultiDiGraph](https://networkx.readthedocs.io/en/stable/reference/classes.multigraph.html) back to a {py:class}`~prov.model.ProvDocument`
- Testing with Python 3.5
- Various minor bug fixes and improvements

## 1.4.0 (2015-08-13)

- Changed the type of qualified names to prov:QUALIFIED_NAME (fixed #68)
- Removed XSDQName class and stopped supporting parsing xsd:QName as qualified names
- Replaced pydot dependency with pydotplus
- Removed support for Python 2.6
- Various minor bug fixes and improvements

## 1.3.2 (2015-06-17)

- Added: prov-compare script to check equivalence of two PROV files (currently supporting JSON and XML)
- Fixed: deserialising Python 3's bytes objects (issue #67)

## 1.3.1 (2015-02-27)

- Fixed unicode issue with deserialising text contents
- Set the correct version requirement for six
- Fixed format selection in prov-convert script

## 1.3.0 (2015-02-03)

- Python 3.3 and 3.4 supported
- Updated prov-convert script to support XML output
- Added missing test JSON and XML files in distributions

## 1.2.0 (2014-12-19)

- Added: {py:meth}`prov.graph.prov_to_graph` to convert a {py:class}`~prov.model.ProvDocument` to a [MultiDiGraph](https://networkx.readthedocs.io/en/stable/reference/classes.multigraph.html)
- Added: PROV-N serializer
- Fixed: None values for empty formal attributes in PROV-N output (issue #60)
- Fixed: PROV-N representation for xsd:dateTime (issue #58)
- Fixed: Unintended merging of Identifier and QualifiedName values
- Fixed: Cloning the records when creating a new document from them
- Fixed: incorrect SoftwareAgent records in XML serialization

## 1.1.0 (2014-08-21)

- Added: Support for [PROV-XML](http://www.w3.org/TR/prov-xml/) serialization and deserialization
- A {py:class}`~prov.model.ProvRecord` instance can now be used as the value of an attributes
- Added: convenient assertions methods for {py:class}`~prov.model.ProvEntity`, {py:class}`~prov.model.ProvActivity`, and {py:class}`~prov.model.ProvAgent`
- Added: {py:meth}`prov.model.ProvDocument.update` and {py:meth}`prov.model.ProvBundle.update`
- Fixed: Handling default namespaces of bundles when flattened

## 1.0.1 (2014-08-18)

- Added: Default namespace inheritance for bundles
- Fixed: {py:meth}`prov.model.NamespaceManager.valid_qualified_name` did not support {py:class}`~prov.model.XSDQName`
- Added: Convenience {py:func}`prov.read` method with a lazy format detection
- Added: Convenience {py:meth}`~prov.model.ProvBundle.plot` method on the {py:class}`~prov.model.ProvBundle` class (requiring matplotlib).
- Changed: The previous {py:meth}`!add_record` method renamed to {py:meth}`~prov.model.ProvBundle.new_record`
- Added: {py:meth}`~prov.model.ProvBundle.add_record` function which takes one argument, a {py:class}`~prov.model.ProvRecord`, has been added
- Fixed: Document flattening (see {py:meth}`~prov.model.ProvDocument.flattened`)
- Added: {py:meth}`~prov.model.ProvRecord.__hash__` function added to {py:class}`~prov.model.ProvRecord` (**at risk**: to be removed as {py:class}`~prov.model.ProvRecord` is expected to be mutable)
- Added: {py:attr}`~prov.model.ProvRecord.extra_attributes` added to mirror existing {py:attr}`~prov.model.ProvRecord.formal_attributes`

## 1.0.0 (2014-07-15)

- The underlying data model has been rewritten and is **incompatible** with pre-1.0 versions.
- References to PROV elements (i.e. entities, activities, agents) in relation records are now QualifiedName instances.
- A document or bundle can have multiple records with the same identifier.
- PROV-JSON serializer and deserializer are now separated from the data model.
- Many tests added, including round-trip PROV-JSON encoding/decoding.
- For changes pre-1.0, see the "Pre-1.0 change log" section below.

## Pre-1.0 change log

### 0.5.3 (2013-12-13)

- Changed: Allowed namespaces at bundle level
- Fixed: Only check equality of ProvBundles on asserted records
- Fixed: Some string literals are wrongly converted to QNames
- Updated test cases from ProvToolbox (v4.1)
- Added text explanations for some ProvException subclasses
- Added support for langtag in prov.persistence.LiteralAttribute
- Fixed: Support for prov:InternationalizedString literals
- Fixed: Keep timezone information when parsing xsd:dateTime

### 0.5.2 (2013-10-18)

- Added South migrations for prov.persistence
- Fixed: Support for unlimited-length record identifier
- Fixed: Support for unlimited-length URI in namespace
- Fixed: Support for long literals (i.e. longer than 255 characters)
- Fixed: (JSON) Support for membership with multiple members
- Fixed: UnicodeEncodeError error
- Fixed: Support for JSON having records sharing the same identifier
- Fixed: Refactor the flattening code
- Fixed: Parsing XSD dateTime
- Fixed: Triple quoted multi-line string literals in PROV-N
- Added: Support initialising namespaces when creating a ProvBundle

### 0.5.1 (2013-09-13)

- Added: JSON membership relation with a single entity (in a list)
- Fixed: Not generating inferred records in JSON encoding.
- Fixed: Generating JSON arrays for multi-value attributes
- Fixed: Comparing unicode literal values (fixed #12)
- Fixed: Returning the identifier of a record if the required attribute type is Identifier
- Fixed: No longer trying to find the actual generalEntity record when creating a Mention record
- Added informative arguments to ProvException classes
- Fixed: Attribute validation does not fail if the attribute is already a ProvRecord

### 0.5.0 (2013-09-02)

- Allow inferred records to be retyped when flattening
- prov.model.graph: check if a node of a relation already drawn
- Add get_flattened() function to ProvBundle
- Added: hash functions for Literal and Namespace
- Changed: Add new bundle's namespaces to parent document
- Fixed: prov.persistence only saves namespaces at document level
- Added: is_document() and is_bundle() for ProvBundle
- Fixed: Stop outputting prefix in an bundle's PROV-JSON
- Changed: Removed namespace declarations in example bundles
- Better handling of ids when generating PROV-JSON
- Changed: Bundles cannot have their own namespace prefixes
- When exporting a bundle as a document add namespaces from parent
- Return pdbundle when calling add_prov_bundle
- Fixed support for the default namespace
- Fixed minor bugs.

### 0.4.9 (2013-08-09)

- Fixed: Cannot get_label() when self._extra_attributes is None

### 0.4.8 (2013-08-06)

- Added: Option to show attributes of relations in DOT graph generation
- Added: option to show attributes of nodes in DOT graph representation
- Added: Convenient methods for (de)serialising PROV-JSON (closes #17)
- Fixed: No longer output inferred records in PROV-N and PROV-JSON
- Fixed: Bundles now can have own namespaces
- Fixed: missing return Literal(...)
- Fixed: Error getting the value and datatype of Literal

### 0.4.7 (2013-07-10)

- Changed: Removed out-dated example_graph()
- Changed: Improved mappings between default Python and XSD data types
- Changed: Removed ProvElement as the inferred record for influence
- Changed: Updated examples (primer, bundles1, bundles2)
- Fixed: Removed the duplicated Bundle definition in PROV_RECORD_TYPES
- Added JSON test files from ProvToolbox and a test for loading these
- Changed: Improved Literal equality test
- Added langtag getter to Literal

### 0.4.6 (2013-04-24)

- Fixed: Removed the 'activity' attribute from Influence expression
- Fixed: Inferred records couldn't be created when the expected types provided as a list

### 0.4.5 (2013-03-13)

- Changed: ProvActivity.set_time() can now accept just one argument. It previously sets the time of the missing argument to None.
- Changed: ProvAgent is now eligible for entity arguments and ProvEntity for agent ones
- Fixed: Producing the right PROV-N representation for float values

### 0.4.4

- Added float data type support for prov.persistence
- Removed ProvCollection class since collections should be instantiated as entities
- Added get_attribute() and get_value() to ProvRecord
- Changed: Check if an attribute's value is a valid QName and return the QName
- Fixed exception rendering graphs with empty records

### 0.4.3

- Fixed: PROV-N export - top-level bundle -> document
- Fixed: Bug when renaming prefixes

### 0.4.2

- Updated graph colors to the PROV style

### 0.4.1

- Restructured package folder
- Moved to a new repo.
- Fixed: 'memberof' -> 'hadMember'

### 0.4.0 (2012-10-31)

- Initial release.
