'Parses the data from the sentence and validates the checksum.
@param rawSentence: The NMEA positioning sentence.
@type rawSentence: C{bytes}'

def lineReceived(self, rawSentence):

    sentence = rawSentence.strip()
    _validateChecksum(sentence)
    splitSentence = _split(sentence)
    sentenceType = nativeString(splitSentence[0])
    contents = [nativeString(x) for x in splitSentence[1:]]
    try:
        keys = self._SENTENCE_CONTENTS[sentenceType]
    except KeyError:
        raise ValueError(('unknown    sentence    type    %s' % sentenceType))
    sentenceData = {'type': sentenceType}
    for (key, value) in izip(keys, contents):
        if ((key is not None) and (value != '')):
            sentenceData[key] = value
    sentence = NMEASentence(sentenceData)
    if (self._sentenceCallback is not None):
        self._sentenceCallback(sentence)
    self._receiver.sentenceReceived(sentence)
