In libarxx a data source is accessed by means of a data channel. A data channel is an object that is a descendant from Arxx::DataChannel and implements its abstract interface including a function Arxx::DataChannel::vFetchData(Arxx::Item &) which is responsible for retrieving the data from the data source. The retrival logic is completely implemented in a Arxx::DataChannel descendant. This way it is possible to have many various data sources referenced in an ARX archive.
When you set an item's data source, you specify compression type, compressed and decompressed data size and the a URI that locates the data source. This URI is translated to a specific data channel by the Arxx::DataRepository, an object that employs URI matching algorithms to identify the most appropriate Arxx::DataChannel that it has registered.