brightway-lca / brightway2

Metapackage for brightway2 imports and documentation
https://brightway.dev/
BSD 3-Clause "New" or "Revised" License
100 stars 36 forks source link

ecospold2 import fails: no geography #18

Closed aleksandra-kim closed 1 year ago

aleksandra-kim commented 5 years ago

Original report by Benjamin W. Portner (Bitbucket: pommespapst, GitHub: pommespapst).


I am trying to import an ecospold2 file but I get the following error:

Extracting ecospold2 files: Traceback (most recent call last): File "", line 4, in File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\bw2io\importers\ecospold2.py", line 62, in init self.data = extractor.extract(dirpath, db_name) File "", line 4, in extract File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\bw2io\extractors\ecospold2.py", line 99, in extract data.append(cls.extract_activity(dirpath, filename, db_name)) File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\bw2io\extractors\ecospold2.py", line 135, in extract_activity stem.activityDescription.geography, "comment"))), File "src\lxml\objectify.pyx", line 230, in lxml.objectify.ObjectifiedElement.getattr File "src\lxml\objectify.pyx", line 450, in lxml.objectify._lookupChildOrRaise AttributeError: no such child: {http://www.EcoInvent.org/EcoSpold02}geography

I attached the .spold file. The error might appear because the file was originally a ILCD file which I converted to ecospold2 using the OpenLCA converter.

aleksandra-kim commented 5 years ago

Original comment by Benjamin W. Portner (Bitbucket: pommespapst, GitHub: pommespapst).


Update: error does not occur, if I export an ecoinvent activity as ILCD, convert it to ecospold2, and try to import it into brightway2. Seems, the error occurs because I try to import a custom process with mal-defined geography?

aleksandra-kim commented 5 years ago

Original comment by Chris Mutel (Bitbucket: cmutel, GitHub: cmutel).


The output file is not valid ecospold2. It is not just the location data, but a lot of different of elements:

#!bash

8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:12: element timePeriod: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}timePeriod': This element is not expected. Expected is one of ( {http://www.EcoInvent.org/EcoSpold02}classification, {http://www.EcoInvent.org/EcoSpold02}geography ).
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:45: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:45: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:48: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:48: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:51: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:51: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:54: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:54: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:57: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:57: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:60: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:60: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:63: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:63: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:66: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:66: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:69: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:69: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:72: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:72: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:75: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:75: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:78: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:78: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:81: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:81: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:84: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:84: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:87: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter', attribute 'id': The attribute 'id' is not allowed.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:87: element parameter: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}parameter': The attribute 'parameterId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:97: element dataEntryBy: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}dataEntryBy': The attribute 'personId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:97: element dataEntryBy: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}dataEntryBy': The attribute 'personName' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:97: element dataEntryBy: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}dataEntryBy': The attribute 'personEmail' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:98: element dataGeneratorAndPublication: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}dataGeneratorAndPublication': The attribute 'personId' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:98: element dataGeneratorAndPublication: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}dataGeneratorAndPublication': The attribute 'personName' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:98: element dataGeneratorAndPublication: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}dataGeneratorAndPublication': The attribute 'personEmail' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:99: element fileAttributes: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}fileAttributes': The attribute 'majorRevision' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold:99: element fileAttributes: Schemas validity error : Element '{http://www.EcoInvent.org/EcoSpold02}fileAttributes': The attribute 'minorRevision' is required but missing.
8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold fails to validate

Unfortunately, there is not much that Brightway can do here. If you expect this to be a major problem, the only real solution would be to write a more lenient extractor that provides default values for missing attributes (e.g. GLO for location).

aleksandra-kim commented 5 years ago

Original comment by Benjamin W. Portner (Bitbucket: pommespapst, GitHub: pommespapst).


Could you let me know how you created the log file?

aleksandra-kim commented 5 years ago

Original comment by Chris Mutel (Bitbucket: cmutel, GitHub: cmutel).


#!bash

xmllint --schema "path/to/EcoSpold02.xsd" --noout 8eb88a18-9ad1-4382-a1d1-99cec36e6a58.spold

You can download the schema from ecoinvent.

aleksandra-kim commented 5 years ago

Original comment by Benjamin W. Portner (Bitbucket: pommespapst, GitHub: pommespapst).


Thanks a lot for the hint to xmllint!

Concerning my problem: I found a work around. I will describe it here. Maybe you can make it a section in your documentation or something.

Aim: Export a model from GaBi into Brightway2.

Things I've tried:

Export as tsx -> import in Brightway2 : import of tsx not supported in Brightway2

Export as ecospold1 -> import in Brightway2: not an option because ecospold1 does not support parameters

Export as ILCD -> import in Brightway2: import of ILCD not supported in Brightway2

Export as ILCD -> convert to ecospold2 using OpenLCA conversion tool -> import in brightway2: import crashes with above errors (only for custom activities, ecoinvent activities work)

Export as ILCD -> import into OpenLCA -> export as ecospold2 -> import in brightway2: works!

Looks like OpenLCA import adds the missing attributes. Also export from OpenLCA seems to get the attribute naming right (parameterId instead of id), contrary to the conversion tool. Unfortunately there is no possibility in GaBi to export ecospold2. Would make things a lot easier...

aleksandra-kim commented 5 years ago

Original comment by Benjamin W. Portner (Bitbucket: pommespapst, GitHub: pommespapst).


Just realized that the import worked but the mathematical relations in the parameters were not imported. Is there a way to keep the mathematical relations?

aleksandra-kim commented 5 years ago

Original comment by Chris Mutel (Bitbucket: cmutel, GitHub: cmutel).


It's on the roadmap, and needed for current projects, so it is coming - but is not there yet. Shouldn't be too much of a change, you are welcome to look at the parameter extraction already in bw2io and extend it :)