def METHOD_NAME(self):
    # here we only look in the top level, We will have another
    # bpmn:startEvent if we have a subworkflow task
    start_node_list = self.xpath('./bpmn:startEvent')
    if not start_node_list and self.process_executable:
        raise ValidationException("No start event found", node=self.node, file_name=self.filename)
    self.spec = BpmnProcessSpec(name=self.bpmn_id, description=self.get_name(), filename=self.filename)
    self.spec.data_objects.update(self.inherited_data_objects)
    # Get the data objects
    for obj in self.xpath('./bpmn:dataObject'):
        data_object = self.parse_data_object(obj)
        self.spec.data_objects[data_object.bpmn_id] = data_object
    # Check for an IO Specification.
    io_spec = first(self.xpath('./bpmn:ioSpecification'))
    if io_spec is not None:
        self.spec.io_specification = self.parse_io_spec()
    # set the data stores on the process spec so they can survive
    # serialization
    self.spec.data_stores = self.data_stores
    for node in start_node_list:
        self.parse_node(node)