Provides a client API to access the NRE Knowledgebase https://wiki.openraildata.com/index.php?title=KnowledgeBase
The Knowedgebase class has properties (IKnowedgebase interface) and async methods (IKnowedgebaseAsync interface) to easily access the knowledgebase data.
The Knowedgebase constructor requires an implementation of IKnowledgebaseSource. The library provides 2 implementations of this:
NationalRailEnquiriesSource: this connects to https://opendata.nationalrail.co.uk to download the knowledgebaseFileSource: this uses local files to load the knowledgebase
NationalRailEnquiriesSource requires being initialised before it can get any knowledgebase data. You need to have a registered user on https://opendata.nationalrail.co.uk and to have enabled the Knowledgebase feed. It implementsIDispose to ensure it cleans itself up.
using (var source = new NationalRailEnquiriesSource(new HttpClient(), logger))
{
await source.Initiate(user, password, CancellationToken.None);
var knowledgebase = new Knowledgebase(source, logger);
var tocs = await knowledgebase.GetTocs(CancellationToken.None);
...
}
FileSource requires being initialised with a dictionary with the location of the knowledgebase files. It does not require all knowledgebase subjects to be configured. The library throws KnowledgebaseException if a knowledgebase subject is not configured or the file does not exist.
var sourceFiles = new Dictionary<KnowedgebaseSubjects, string>()
{
{ KnowedgebaseSubjects.TicketTypes, "Data/TicketTypes.xml" },
{ KnowedgebaseSubjects.TicketRestrictions, "Data/TicketRestrictions.xml" },
{ KnowedgebaseSubjects.Promotions, "Data/Promotions.xml" },
{ KnowedgebaseSubjects.Incidents, "Data/Incidents.xml" },
{ KnowedgebaseSubjects.TocServiceIndicators, "Data/ServiceIndicators.xml" },
{ KnowedgebaseSubjects.Stations, "Data/Stations.xml" },
{ KnowedgebaseSubjects.Tocs, "Data/Tocs.xml" },
};
var knowledgebase = new Knowledgebase(new FileSource(sourceFiles, logger), logger);
var tocs = await knowledgebase.GetTocs(CancellationToken.None);
The library has a set of unit tests.
LiveKnowledgebaseTest is an integration test class that call the NRE web site. Need to have your user and password set as environment variables NRE_USER and NRE_PASSWORD. To run these tests need to delete the skip parameters.
The library is .NetStandard2.0 and depends upon:
- Microsoft.AspNet.WebApi.Client
- Serilog for logging
Run the generateClasses.ps1 powershell script found in the schemas folder.
The Fares schema "http://nationalrail.co.uk/xml/ticket" generates an incompatible ClassEnumeration, manually change the TicketTypeDescriptionStructure.Class property to be a string to stop deserialisation issues.