'An iterator that yields item, name is_linear for every item in the
books\' spine. item is the lxml element, name is the canonical file name
and is_linear is True if the item is linear. See also: :attr:`spine_names` and :attr:`spine_items`.'

@property
def spine_iter(self):

    manifest_id_map = self.manifest_id_map
    non_linear = []
    for item in self.opf_xpath(u'//opf:spine/opf:itemref[@idref]'):
        idref = item.get(u'idref')
        name = manifest_id_map.get(idref, None)
        path = self.name_path_map.get(name, None)
        if path:
            if (item.get(u'linear', u'yes') == u'yes'):
                (yield (item, name, True))
            else:
                non_linear.append((item, name))
    for (item, name) in non_linear:
        (yield (item, name, False))
