SDMParser Public APIs

SDMParser Public APIs

SDMODataServiceDocument* sdmParseODataServiceDocumentXML(NSData* const content_in)
SDMODataSchema* sdmParseODataSchemaXML(NSData* const content_in, SDMODataServiceDocument* const serviceDocument)
NSMutableArray* sdmParseODataEntriesXML(NSData* const content_in, const SDMODataEntitySchema* const entitySchema, const SDMODataServiceDocument* const serviceDocument)
SDMODataError* sdmParseODataErrorXML(NSData* const content_in)
NSMutableArray* sdmParseFunctionImportResult(NSData* const content_in, const SDMODataFunctionImport* const functionImport)
SDMOpenSearchDescription* sdmParseOpenSearchDescriptionXML(NSData* const content_in)
SDMODataEntryXML* sdmBuildODataEntryXML (const SDMODataEntry *const entry, const enum TEN_ENTRY_OPERATIONS operation, const SDMODataServiceDocument *const serviceDocument, const BOOL serializeInlinedEntries)
SDMODataFeedXML* sdmBuildODataFeedXML (NSArray *const entries, const enum TEN_ENTRY_OPERATIONS operation, const SDMODataServiceDocument *const serviceDocument, const BOOL serializeInlinedEntries)
(NSString *)getEtag

Technical Details

The listed C-style parser APIs are provided for convenience. You can choose to instantiate the dedicated parser classes. As a reference, the following code excerpt shows how the C-style APIs wrap the parser calls:
/**
 * Parses the service document XML and converts it to an Obj-C service document object.
 */
SDMODataServiceDocument* sdmParseODataServiceDocumentXML(NSData* const content_in) {
	SDMODataServiceDocumentParser* svcDocParser = [[[SDMODataServiceDocumentParser alloc] init] autorelease];
	[svcDocParser parse: content_in];
	
	return svcDocParser.serviceDocument;
}


/**
 *	Parses and matches the schema with the service document and its collections. The function returns the same
 *  schema pointer as it can already be found in the serviceDocument.
 */
SDMODataSchema* sdmParseODataSchemaXML(NSData* const content_in, SDMODataServiceDocument* const serviceDocument) {
	if (!serviceDocument)
		//@throw [[[SDMParserException alloc] initWithName: @"NoServiceDocument" reason: @"No service document was provided" userInfo: nil] autorelease];
		@throw [[[SDMParserException alloc] initWithError: ParserNoServiceDocument detailedError: @"No service document was provided"] autorelease];
		
	SDMODataMetaDocumentParser* metaDocParser = [[[SDMODataMetaDocumentParser alloc] initWithServiceDocument: serviceDocument] autorelease];
	[metaDocParser parse: content_in];
	
	return serviceDocument.schema;
}


/**
 * Parses a feed or entry XML and returns an array of parsed entry/entries. 
 * Any "inlined"entries or feed(s) will be parsed when service document is passed to the function. If "inlined" feed(s) or entries 
 * should not be returned pass nil in the service document parameter.
 */
NSMutableArray* sdmParseODataEntriesXML(NSData* const content_in, const SDMODataEntitySchema* const entitySchema, const SDMODataServiceDocument* const serviceDocument) {
	if (!entitySchema)
		//@throw [[[SDMParserException alloc] initWithName: @"NoEntitySchema" reason: @"No entity schema was provided" userInfo: nil] autorelease];
		@throw [[[SDMParserException alloc] initWithError: ParserNoEntitySchema detailedError: @"No entity schema was provided"] autorelease];
	
	SDMODataDataParser* dataParser = [[[SDMODataDataParser alloc] initWithEntitySchema: entitySchema andServiceDocument: serviceDocument] autorelease];
	[dataParser parse: content_in];
	
	return dataParser.entries;	
}


/**
 * Parses an OData error payload XML
 * @see SDMODataError
 */
SDMODataError* sdmParseODataErrorXML(NSData* const content_in) {
	SDMODataErrorXMLParser* errorParser = [[[SDMODataErrorXMLParser alloc] init] autorelease];
	[errorParser parse: content_in];
	
	return errorParser.odataError;
}

/**
 * Parses the result payload XML of a function import.
 * @returns Returns an array of entries.
 * @remark Even if the result is not a feed or entry XML, the parser creates an entity schema out of the return type definition, so
 * application developers can access the returned data in a uniform way. The supported return types are:
 * - none
 * - EDMSimpleType		(for example: ReturnType="Edm.Int32"), the generated "entity" schema will be "element" with type Edm.Int32
 * - ComplexType		(for example: ReturnType="NetflixCatalog.Model.BoxArt")
 * - Collection of an EDMSimpleType (for example: ReturnType="Collection(Edm.String)")
 * - Collection of a ComplexType    (for example: ReturnType="Collection(NetflixCatalog.Model.BoxArt)")    
 * - Entry	(for example ReturnType="NetflixCatalog.Model.Title" EntitySet="Titles")
 * - Feed   (for example ReturnType="Collection(NetflixCatalog.Model.Title)" EntitySet="Titles")
 */
NSMutableArray* sdmParseFunctionImportResult(NSData* const content_in, const SDMODataFunctionImport* const functionImport) {
	SDMFunctionImportResultParser* fiParser = [[[SDMFunctionImportResultParser alloc] initWithFunctionImport: functionImport] autorelease];
	[fiParser parse: content_in];
	
	return fiParser.entries;
}


/**
 * Parses an XML that contains Open Search Description
 * The parsed data is returned in an SDMOpenSearchDescription typed object.
 */
SDMOpenSearchDescription* sdmParseOpenSearchDescriptionXML(NSData* const content_in) {
	SDMOpenSearchDescriptionXMLParser* osdParser = [[[SDMOpenSearchDescriptionXMLParser alloc] init] autorelease];
	[osdParser parse: content_in];
	
	return osdParser.openSearchDescription;
}

The SDMParser library communicates error conditions to the client via the dedicated SDMParserException exception class. Whenever a mandatory attribute is missing, the parser throws an exception.

The caller is responsible for error handling; this includes fetching the details included in the exception, logging information meant for debugging purposes, displaying a localized alert message, and providing a resolution or stopping the application flow.