* Added the "Resource Pool File" attribute to ProjectProperties, which represents the full path of the resource pool used by an MPP file. This attribute is accessible via the `getResourcePoolFile` and `setResourcePoolFile` methods.
* Added the `getResourcePoolObject` method to allow the resource pool file to be located and read
* Added support for reading the task attribute Subproject GUID from MPP files. This attribute can be accessed via the `getSubprojectGUID` and `setSubprojectGUID` methods.
* Added support for the task attribute "External Project". When this attribute is true it indicates that the task represents a subproject. The attribute is accessed via the `getExternalProject` and `setExternalProject` methods.
* When reading an MSPDI file with external task predecessors, MPXJ now attempts to recreate the placeholder external tasks which would be present if the equivalent MPP file was read.
* External task predecessors are now represented when writing an MSPDI file.
* Added the Task method `getSubprojectObject` which allows the caller to retrieve a ProjectFile instance representing the external project linked to a task.
* Added the Task method `expandSubproject`. For task which represent an external project, this method automatically loads the external project and attaches the tasks it contains as children of the current task. This is analogous to the behavior in Microsoft Project where a subproject is expanded to reveal the tasks it contains.
* Added the ProjectFile method `expandSubprojects` which identifies any tasks in the project which represent an external project and expands them, linking the tasks from the external project as children of the task in the parent project. Note that the method works recursively so multiple levels of external tasks will be expanded.
* Updated to ensure that the `internal_name` attribute of a `UserdefinedField` is generated if not present.
* Updated to avoid an exception when reading notebook topics from PMXML files.
* Marked the Task method `setSubprojectName` as deprecated. Use the `setSubProjectFile` method instead.
* Marked the Task method `getSubprojectName` as deprecated. Use `getSubprojectFile` instead.
* Marked the Task method `setExternalTaskProject` as deprecated. Use the `setSubprojectFile` method instead.
* Marked the Task method `getExternalTaskProject` as deprecated. Use the `getSubprojectFile` method instead.
* Marked the ProjectFile method `getSubProjects` as deprecated. Use the subproject attributes on individual tasks instead.
* Marked the Task methods `getSubProject` and `setSubProject` as deprecated. Use the subproject attributes instead.