diff --git a/src/zbmath_rest2oai/restApi_software_Json.py b/src/zbmath_rest2oai/restApi_software_Json.py index 4f62d480..c4e50c50 100644 --- a/src/zbmath_rest2oai/restApi_software_Json.py +++ b/src/zbmath_rest2oai/restApi_software_Json.py @@ -1,74 +1,76 @@ -import json - -import requests - -from swhid import parse_csv_to_dict - - -# Main function to handle the API request, CSV parsing, and JSON modification -def process_metadata(csv_file_path, api_url, output_path=None): - # Extract the swmathid from the API URL - swmathid = int(api_url.split('/')[-1]) # This extracts the number after 'software/' - - # Make a GET request to the API - response = requests.get(api_url) - - # Check if the request was successful (status code 200) - if response.status_code == 200: - # Parse the response JSON content - data = response.json() - - # Parse the CSV and get the dictionary of swmathid to swhid - swmathid_to_swhid = parse_csv_to_dict(csv_file_path) - - # Prepare the output log - output_log = [] - - # Check if the swmathid from the API exists in the CSV mapping - if swmathid in swmathid_to_swhid: - matched_swhid = swmathid_to_swhid[swmathid] - - # Modify the JSON structure with the matched swhid - swhdeposit_data = { - "swhdeposit:deposit": { - "swhdeposit:reference": { - "swhdeposit:object": { - "@swhid": matched_swhid - } - }, - "swhdeposit:metadata-provenance": { - "schema:url": "https://staging.swmath.org/" # Split or modify the URL as needed - } - } - } - - # Merge this into the original JSON - data.update(swhdeposit_data) - - # Add a log entry for success - output_log.append(f"swmathid {swmathid} matched to swhid: {matched_swhid}") - else: - # If no match is found - output_log.append(f"swmathid {swmathid} not found in the CSV file.") - - # Save the modified JSON data to a file - output_json_filename = 'output_with_swhid.json' - with open(output_path, 'w') as json_file: - json.dump(data, json_file, indent=4, ensure_ascii=False) - print(f"Data successfully saved to {output_json_filename}") - - # Save the output log to a file - # output_log_filename = 'process_log.txt' - with open(output_log_filename, 'w') as log_file: - for log_entry in output_log: - log_file.write(log_entry + '\n') - print(f"Log successfully saved to {output_log_filename}") - else: - print(f"Failed to retrieve data. Status code: {response.status_code}") - - -csv_file_path = '../../test/data/software/swh_swmath.csv' # Path to your CSV file -api_url = 'https://api.zbmath.org/v1/software/825' # API URL, can be generalized for any software ID -output_path = '../../test/data/software/software_with_swhid.json' -output_log_filename = '../../test/data/software/logfile.txt' -process_metadata(csv_file_path, api_url, output_path) + +import json + +import requests + +from swhid import parse_csv_to_dict + + +# Main function to handle the API request, CSV parsing, and JSON modification +def process_metadata(csv_file_path, api_url, output_path=None): + # Extract the swmathid from the API URL + swmathid = int(api_url.split('/')[-1]) # This extracts the number after 'software/' + + # Make a GET request to the API + response = requests.get(api_url) + + # Check if the request was successful (status code 200) + if response.status_code == 200: + # Parse the response JSON content + data = response.json() + + # Parse the CSV and get the dictionary of swmathid to swhid + swmathid_to_swhid = parse_csv_to_dict(csv_file_path) + + # Prepare the output log + output_log = [] + + # Check if the swmathid from the API exists in the CSV mapping + if swmathid in swmathid_to_swhid: + matched_swhid = swmathid_to_swhid[swmathid] + + # Modify the JSON structure with the matched swhid + swhdeposit_data = { + "swhdeposit:deposit": { + "swhdeposit:reference": { + "swhdeposit:object": { + "@swhid": matched_swhid + } + }, + "swhdeposit:metadata-provenance": { + "schema:url": "https://staging.swmath.org/" # Split or modify the URL as needed + } + } + } + + # Merge this into the original JSON + data.update(swhdeposit_data) + + # Add a log entry for success + output_log.append(f"swmathid {swmathid} matched to swhid: {matched_swhid}") + else: + # If no match is found + output_log.append(f"swmathid {swmathid} not found in the CSV file.") + + # Save the modified JSON data to a file + output_json_filename = 'output_with_swhid.json' + with open(output_path, 'w') as json_file: + json.dump(data, json_file, indent=4, ensure_ascii=False) + print(f"Data successfully saved to {output_json_filename}") + + # Save the output log to a file + # output_log_filename = 'process_log.txt' + with open(output_log_filename, 'w') as log_file: + for log_entry in output_log: + log_file.write(log_entry + '\n') + print(f"Log successfully saved to {output_log_filename}") + else: + print(f"Failed to retrieve data. Status code: {response.status_code}") + + +csv_file_path = '../../test/data/software/swh_swmath.csv' # Path to your CSV file +api_url = 'https://api.zbmath.org/v1/software/825' # API URL, can be generalized for any software ID +output_path = '../../test/data/software/software_with_swhid.json' +output_log_filename = '../../test/data/software/logfile.txt' +process_metadata(csv_file_path, api_url, output_path) + diff --git a/test/data/software/Test_Result_Codemeta.xml b/test/data/software/Test_Result_Codemeta.xml index 9462f4ae..6976fff8 100644 --- a/test/data/software/Test_Result_Codemeta.xml +++ b/test/data/software/Test_Result_Codemeta.xml @@ -1,192 +1,197 @@ - - zbmath-825 - - - - - - https://staging.swmath.org/ - - - - - Developers - The Sage - - - Stein - William - - - Joyner - David - - - Kohel - David - - - Cremona - John - - - Eröcal - Burçin - - - SageMath - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - http://www.sagemath.org - https://github.com/sagemath/sage - orms - Python - Cython - Sage - Open Source - Interfaces - None - 255 - None - 05 - 11 - 14 - 20 - 68 - 00 - 01 - 03 - 06 - 12 - 13 - 15 - 16 - 17 - 18 - 19 - 22 - 26 - 28 - 30 - 31 - 32 - 33 - 34 - 35 - 37 - 39 - 40 - 41 - 42 - 43 - 44 - 46 - 47 - 49 - 51 - 52 - 53 - 54 - 55 - 57 - 58 - 60 - 62 - 65 - 70 - 74 - 76 - 78 - 80 - 81 - 82 - 83 - 85 - 86 - 90 - 91 - 92 - 93 - 94 - 97 - 2829 - - Magma - 540 - GAP - 320 - GitHub - 23170 - OEIS - 7248 - PARI/GP - 680 - SINGULAR - 866 - Sage-Combinat - 16448 - Macaulay2 - 537 - Mathematica - 554 - Maple - 545 - LMFDB - 7249 - Python - 14460 - ecdata - 27596 - nauty - 611 - Traces - 7823 - Maxima - 560 - DLMF - 4968 - Gfan - 4698 - MathOverflow - 23728 - SciPy - 6293 - - - - 7045592 - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - 2019 - - 6418360 - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - 2015 - - 6532438 - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - 2013 - - 6462232 - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - 2013 - - 6114556 - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - 2012 - - 5785538 - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - 2010 - - 5380273 - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - zbMATH Open Web Interface contents unavailable due to conflicting licenses. - 2008 - - https://zbmath.org/software/825 - + + + + zbmath-825 + + + + + + https://staging.swmath.org/ + + + + Developers, The Sage + The Sage + Developers + Stein, William + William + Stein + Joyner, David + David + Joyner + Kohel, David + David + Kohel + Cremona, John + John + Cremona + Eröcal, Burçin + Burçin + Eröcal + + SageMath + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + http://www.sagemath.org + https://github.com/sagemath/sage + orms + Python + Cython + Sage + Open Source + Interfaces + None + + schema:PropertyValue + 255 + + None + + schema:PropertyValue + zbmath-825 + + + 05 + 11 + 14 + 20 + 68 + 00 + 01 + 03 + 06 + 12 + 13 + 15 + 16 + 17 + 18 + 19 + 22 + 26 + 28 + 30 + 31 + 32 + 33 + 34 + 35 + 37 + 39 + 40 + 41 + 42 + 43 + 44 + 46 + 47 + 49 + 51 + 52 + 53 + 54 + 55 + 57 + 58 + 60 + 62 + 65 + 70 + 74 + 76 + 78 + 80 + 81 + 82 + 83 + 85 + 86 + 90 + 91 + 92 + 93 + 94 + 97 + + + 2829 + + + Magma + 540 + GAP + 320 + GitHub + 23170 + OEIS + 7248 + SINGULAR + 866 + PARI/GP + 680 + Sage-Combinat + 16448 + Macaulay2 + 537 + Mathematica + 554 + Maple + 545 + LMFDB + 7249 + Python + 14460 + ecdata + 27596 + nauty + 611 + Traces + 7823 + DLMF + 4968 + Maxima + 560 + Gfan + 4698 + MathOverflow + 23728 + SciPy + 6293 + + + 7045592 + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + 2019 + 6418360 + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + 2015 + 6532438 + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + 2013 + 6462232 + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + 2013 + 6114556 + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + 2012 + 5785538 + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + 2010 + 5380273 + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + 2008 + + https://zbmath.org/software/825 + + diff --git a/test/data/software/software_with_swhid_2.json b/test/data/software/software_with_swhid_2.json new file mode 100644 index 00000000..6aaeffa4 --- /dev/null +++ b/test/data/software/software_with_swhid_2.json @@ -0,0 +1,143 @@ +{ + "result": { + "articles_count": 150, + "authors": [ + "Jr, Frank E Harrell" + ], + "classification": [ + "62", + "65", + "68", + "91", + "92", + "00", + "20", + "37", + "41", + "60", + "81", + "82", + "83", + "86", + "90", + "93", + "94" + ], + "dependencies": "R; Hmisc (≥ 3.7), survival (≥ 2.36-3)", + "description": "zbMATH Open Web Interface contents unavailable due to conflicting licenses.", + "homepage": "http://cran.r-project.org/web/packages/rms/", + "id": 4532, + "keywords": [], + "license_terms": "GPL (≥ 2)", + "name": "rms", + "operating_systems": null, + "orms_id": null, + "programming_languages": null, + "related_software": [ + { + "id": 771, + "name": "R" + }, + { + "id": 6377, + "name": "SAS" + }, + { + "id": 4364, + "name": "survival" + }, + { + "id": 8159, + "name": "glmnet" + }, + { + "id": 6029, + "name": "Stata" + }, + { + "id": 4490, + "name": "VGAM" + }, + { + "id": 11049, + "name": "ElemStatLearn" + }, + { + "id": 4557, + "name": "ggplot2" + }, + { + "id": 12561, + "name": "ordinal" + }, + { + "id": 18788, + "name": "SAS/STAT" + }, + { + "id": 11008, + "name": "BayesDA" + }, + { + "id": 19105, + "name": "bootstrap" + }, + { + "id": 19099, + "name": "brms" + }, + { + "id": 2892, + "name": "S-PLUS" + }, + { + "id": 4479, + "name": "MASS (R)" + }, + { + "id": 4074, + "name": "UCI-ml" + }, + { + "id": 8068, + "name": "timereg" + }, + { + "id": 4586, + "name": "KernSmooth" + }, + { + "id": 4351, + "name": "CRAN" + }, + { + "id": 20527, + "name": "ordinalNet" + } + ], + "source_code": "https://github.com/cran/rms", + "standard_articles": [], + "zbmath_url": "https://zbmath.org/software/4532" + }, + "status": { + "execution": "successful request", + "execution_bool": true, + "internal_code": "ok", + "last_id": null, + "nr_total_results": 1, + "nr_request_results": 1, + "query_execution_time_in_seconds": 0.10137176513671875, + "status_code": 200, + "time_stamp": "2024-10-17T17:48:07Z" + }, + "swhdeposit:deposit": { + "swhdeposit:reference": { + "swhdeposit:object": { + "@swhid": "swh:1:snp:3f97c8fa7714065b16fa022ae54522c6b783e3a3" + } + }, + "swhdeposit:metadata-provenance": { + "schema:url": "https://staging.swmath.org/" + } + } +} \ No newline at end of file diff --git a/test/data/software/software_with_swhid_2.xml b/test/data/software/software_with_swhid_2.xml new file mode 100644 index 00000000..b8b13d8d --- /dev/null +++ b/test/data/software/software_with_swhid_2.xml @@ -0,0 +1,121 @@ + + + 150 + Jr, Frank E Harrell + 62 + 65 + 68 + 91 + 92 + 00 + 20 + 37 + 41 + 60 + 81 + 82 + 83 + 86 + 90 + 93 + 94 + + + + + + https://staging.swmath.org/ + + + R; Hmisc (≥ 3.7), survival (≥ 2.36-3) + zbMATH Open Web Interface contents unavailable due to conflicting licenses. + http://cran.r-project.org/web/packages/rms/ + 4532 + GPL (≥ 2) + rms + None + None + None + + 771 + R + + + 6377 + SAS + + + 4364 + survival + + + 8159 + glmnet + + + 6029 + Stata + + + 4490 + VGAM + + + 11049 + ElemStatLearn + + + 4557 + ggplot2 + + + 12561 + ordinal + + + 18788 + SAS/STAT + + + 11008 + BayesDA + + + 19105 + bootstrap + + + 19099 + brms + + + 2892 + S-PLUS + + + 4479 + MASS (R) + + + 4074 + UCI-ml + + + 8068 + timereg + + + 4586 + KernSmooth + + + 4351 + CRAN + + + 20527 + ordinalNet + + https://github.com/cran/rms + https://zbmath.org/software/4532 + diff --git a/xslt/software/xslt-software-Codemeta.xslt b/xslt/software/xslt-software-Codemeta.xslt index 4460ba02..c0303cd1 100644 --- a/xslt/software/xslt-software-Codemeta.xslt +++ b/xslt/software/xslt-software-Codemeta.xslt @@ -1,223 +1,250 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - zbmath- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + zbmath- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + schema:PropertyValue + + + + + + + + + + + + + + + schema:PropertyValue + + zbmath- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +