Functional product overview
Fonto Review extends the Fonto Editor. It enables users to collaborate on reviewing document without the need to lock the document. Not having to lock the document for reviewing allows for unlimited concurrent users. The product consists of two main environments: A route dedicated to reviewing documents and an integration in the editor meant for authors.
The route dedicated to reviewing documents allows users to focus on their review tasks. The document loads in a clean and read-only view. Annotating a document is as easy as selecting a bit of text and creating an annotation with a single mouse click. The integration in the editor allows authors to easily process the feedback that has been gathered for one or more documents.
For more information about the features of this add-on, refer to the Fonto Review product page.
Technical product overview
Fonto Review consists of two main components:
The Review add-on for Fonto Editor
The Position Recovery Service, a server-side service
The Review add-on provides a framework for creating your own review experience. A reference configuration package containing all the UI components to get you started is available. It can be dowloaded from its own public Github repository. You can fully tailor the reference configuration to fit your needs. This enables you to configure Fonto Review so it can be used for many different kinds of annotations.
The Position Recovery Service is a server-side component. Annotations are not stored in the document that is being reviewed. They are stored in a database that is managed by a CMS of your choice. This may cause positions to not be automatically updated when a document is changed.
The editor itself is capable of tracking changes made to a document and updating positions accordingly. However, changing documents is not limited to the Fonto Editor and can also be done by external applications. Other applications are not capable of tracking changes made to a document and applying those changes to a position. This is why positions need to be updated when a document has been changed. Calculating these changes is a CPU intensive task. That's why the Position Recovery Service is a server-side component. It is built on the Microsoft .NET Core platform and can be hosted in Docker or as a self-contained build to run native on your server's OS.
Fonto Review requires CMS storage for its annotations. Fonto Review interacts with the CMS via the CMS Connectors API as described here. The data model is fully documented. You can use this information to analyze the contents of the annotation database and to generate reports from this data.
There are three things that need to be done when you want to integrate Fonto Review into your Fonto Editor application:
You need to integrate the Fonto Review add-on into your application.
When you have integrated the Review add-on, it needs some way of getting data from the CMS. This communication is done via the CMS Connectors API, either via the REST API or the iFrame connector.
The Position Recovery Service needs to be deployed somewhere. The Position Recovery Service is accessed by the add-on via a proxy endpoint that should be provided by the CMS. The Position Recovery Service can be deployed inside a Docker container or as a self contained build for your server's OS.
Fonto- Correlation- Id header
This connector provides a way to correlate requests by appending the Fonto-Correlation-Id header to the request forwarded to the Fonto Review. On subsequent requests back to the CMS, the Fonto-Correlation-Id header is also appended. This mechanism can be used by the CMS to for example perform access control checks.
Annotations are stored in the database together with its target. The target is a range for text, or just one pointer in case of objects. Targets in Fonto Review are stored as a very strict subset of XPath. The XPaths MUST BE structured as follows:
The first part, per Fonto 7.8.2, MUST BE
The following parts MUST BE structured as
The whole XPath MUST BE XPath 1.0 compliant
For text ranges, the XPath is accompanied by an offset. The offset MUST BE a positive integer or zero (0) and be within the length of the container it points to.