As discussed in the introduction to Section 12, “
class BirdForm: Notes for one kind of
bird”, the translation of XML into
an internal data structure does not strictly follow the
structure of the XML: a
form element with
floc children will be represented as a
BirdForm instance with one
Sighting instance, while
if there are
floc children, each of them
will be converted to one
This method requires a
txny instance that
defines the taxonomy of birds, and also the parent
dayNotes instance so that it can check the
validity of any location codes used.
# - - - B i r d F o r m . r e a d N o d e @staticmethod def readNode(txny, dayNotes, node): """Convert from XML """
The first step is to extract the parts of the
form element: the
attributes, the optional
(which includes child
as well as attributes), and the various
sighting-notes child elements. See Section 12.8, “
method)”, which also builds
#-- 1 -- # [ if node's taxon-group defines a kind of bird valid # in txny -> # dayNotes := a BirdForm instance with parent dayNotes # made from node's taxon-group # birdForm := that instance # else -> raise IOError ] try: birdForm = BirdForm.getTaxonGroup(txny, dayNotes, node) except KeyError as x: raise IOError(str(x))
At this point we determine whether there any
floc children or not.
#-- 2 -- # [ flocList := node's rnc.FLOC_N children as et.Element # instances ] flocList = node.xpath(rnc.FLOC_N)
At this point, if
flocList is empty, this is the
single-sighting case; otherwise it is the multi-sighting case.
#-- 3 -- # [ if flocList is empty -> # birdForm := birdForm with a single Sighting child # added, made from node's age-sex-group, loc-group, # and sighting-notes content # else -> # birdForm := birdForm with loc-group and sighting-notes # added from node, and Sighting children added, made # from the elements of flocList ] if len(flocList) == 0: birdForm.singleSighting(dayNotes, node) else: birdForm.multiSighting(dayNotes, node, flocList) #-- 4 -- return birdForm