{"id":24973266,"url":"https://github.com/bluedynamics/vdexcsv","last_synced_at":"2025-08-06T15:07:58.929Z","repository":{"id":62587183,"uuid":"1924921","full_name":"bluedynamics/vdexcsv","owner":"bluedynamics","description":"Converts CSV files to IMS VDEX XML (Vocabulary Definition Exchange Format)","archived":false,"fork":false,"pushed_at":"2014-10-11T22:10:12.000Z","size":253,"stargazers_count":0,"open_issues_count":0,"forks_count":4,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-07-23T13:34:18.434Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://pypi.python.org/pypi/vdexcsv/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bluedynamics.png","metadata":{"files":{"readme":"README.rst","changelog":"HISTORY.rst","contributing":null,"funding":null,"license":"LICENSE.rst","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-06-20T17:56:11.000Z","updated_at":"2017-08-10T13:05:52.000Z","dependencies_parsed_at":"2022-11-03T22:09:32.158Z","dependency_job_id":null,"html_url":"https://github.com/bluedynamics/vdexcsv","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/bluedynamics/vdexcsv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluedynamics%2Fvdexcsv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluedynamics%2Fvdexcsv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluedynamics%2Fvdexcsv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluedynamics%2Fvdexcsv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bluedynamics","download_url":"https://codeload.github.com/bluedynamics/vdexcsv/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bluedynamics%2Fvdexcsv/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269101017,"owners_count":24359850,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-06T02:00:09.910Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-03T18:27:01.347Z","updated_at":"2025-08-06T15:07:58.877Z","avatar_url":"https://github.com/bluedynamics.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Converter from CSV file to a multilingual IMS VDEX vocabulary XML file\n======================================================================\n\nVDEX is a very good standardized format for multilingual vocabularies, \nontologies, etc. It just sucks to create its XML manually. There is poor editor \nsupport. But everybody has Excel, well, but almost everybody knows how to create \ntables. So let the user create a sheet with a column of keys for each term and \nfor each language a column with the translated terms value. \n\nA flat vocabulary\n-----------------\n\n=== ======= ======== =========\nkey english german   italian\n=== ======= ======== =========\nk01 ant     Ameise   formica\nk02 bee     Biene    ape   \nk03 wasp    Wespe    vespa\nk04 hornet  Hornisse calabrone\n=== ======= ======== =========\n\nAs a CSV this looks like::\n\n    \"key\";\"english\";\"german\";\"italian\"\n    \"k01\";\"ant\";\"Ameise\";\"formica\"\n    \"k02\";\"bee\";\"Biene\";\"ape\"\n    \"k03\";\"wasp\";\"Wespe\";\"vespa\"\n    \"k04\";\"hornet\";\"Hornisse\";\"calabrone\"\n\nAfter running through csv2vdex, called like so::\n\n    csv2vdex insects 'insects,Insekten,insetto' \\\n             insects.csv insects.xml --languages en,de,it --startrow 1\n\nThis results in such a VDEX XML::\n\n    \u003cvdex xmlns=\"http://www.imsglobal.org/xsd/imsvdex_v1p0\" orderSignificant=\"true\"\u003e\n      \u003cvocabIdentifier\u003einsects\u003c/vocabIdentifier\u003e\n      \u003cvocabName\u003e\n        \u003clangstring language=\"en\"\u003einsects\u003c/langstring\u003e\n        \u003clangstring language=\"de\"\u003eInsekten\u003c/langstring\u003e\n        \u003clangstring language=\"it\"\u003einsetto\u003c/langstring\u003e\n      \u003c/vocabName\u003e\n      \u003cterm\u003e\n        \u003ctermIdentifier\u003ek01\u003c/termIdentifier\u003e\n        \u003ccaption\u003e\n          \u003clangstring language=\"en\"\u003eant\u003c/langstring\u003e\n          \u003clangstring language=\"de\"\u003eAmeise\u003c/langstring\u003e\n          \u003clangstring language=\"it\"\u003eformica\u003c/langstring\u003e\n        \u003c/caption\u003e\n      \u003c/term\u003e\n      \u003cterm\u003e\n        \u003ctermIdentifier\u003ek02\u003c/termIdentifier\u003e\n        \u003ccaption\u003e\n          \u003clangstring language=\"en\"\u003ebee\u003c/langstring\u003e\n          \u003clangstring language=\"de\"\u003eBiene\u003c/langstring\u003e\n          \u003clangstring language=\"it\"\u003eape\u003c/langstring\u003e\n        \u003c/caption\u003e\n      \u003c/term\u003e\n      \u003cterm\u003e\n        \u003ctermIdentifier\u003ek03\u003c/termIdentifier\u003e\n        \u003ccaption\u003e\n          \u003clangstring language=\"en\"\u003ewasp\u003c/langstring\u003e\n          \u003clangstring language=\"de\"\u003eWespe\u003c/langstring\u003e\n          \u003clangstring language=\"it\"\u003evespa\u003c/langstring\u003e\n        \u003c/caption\u003e\n      \u003c/term\u003e\n      \u003cterm\u003e\n        \u003ctermIdentifier\u003ek04\u003c/termIdentifier\u003e\n        \u003ccaption\u003e\n          \u003clangstring language=\"en\"\u003ehornet\u003c/langstring\u003e\n          \u003clangstring language=\"de\"\u003eHornisse\u003c/langstring\u003e\n          \u003clangstring language=\"it\"\u003ecalabrone\u003c/langstring\u003e\n        \u003c/caption\u003e\n      \u003c/term\u003e\n    \u003c/vdex\u003e\n\nA tree vocabulary\n-----------------\n\nIf we want to have a tree-like vocabulary, the key is used to define the level.\nHere a dot is used as delimiter.\n\n===== ====================\nkey   term value\n===== ====================\nnwe   North-west of Europe\nnwe.1 A. m. iberica\nnwe.2 A. m. intermissa\nnwe.3 A. m. lihzeni\nnwe.4 A. m. mellifera\nnwe.5 A. m. sahariensis\nswe   South-west of Europe\nswe.1 A. m. carnica\nswe.2 A. m. cecropia\nswe.3 A. m. ligustica\nswe.4 A. m. macedonica\nswe.5 A. m. ruttneri\nswe.6 A. m. sicula\n===== ====================\n\nAs a CSV it looks like::\n\n    \"key\";\"term value\"\n    \"nwe\";\"North-west of Europe\"\n    \"nwe.1\";\"A. m. iberica\"\n    \"nwe.2\";\"A. m. intermissa\"\n    \"nwe.3\";\"A. m. lihzeni\"\n    \"nwe.4\";\"A. m. mellifera\"\n    \"nwe.5\";\"A. m. sahariensis\"\n    \"swe\";\"South-west of Europe\"\n    \"swe.1\";\"A. m. carnica\"\n    \"swe.2\";\"A. m. cecropia\"\n    \"swe.3\";\"A. m. ligustica\"\n    \"swe.4\";\"A. m. macedonica\"\n    \"swe.5\";\"A. m. ruttneri\"\n    \"swe.6\";\"A. m. sicula\"\n\nAfter running through csv2vdex, called like so::\n\n    csv2vdex beeeurope 'European Honey Bees' bees.csv bees.xml -s 1\n    \nThe result is::\n\n    \u003cvdex xmlns=\"http://www.imsglobal.org/xsd/imsvdex_v1p0\" orderSignificant=\"true\"\u003e\n      \u003cvocabIdentifier\u003ebeeeurope\u003c/vocabIdentifier\u003e\n      \u003cvocabName\u003e\n        \u003clangstring language=\"en\"\u003eEuropean Honey Bees\u003c/langstring\u003e\n      \u003c/vocabName\u003e\n      \u003cterm\u003e\n        \u003ctermIdentifier\u003enwe\u003c/termIdentifier\u003e\n        \u003ccaption\u003e\n          \u003clangstring language=\"en\"\u003eNorth-west of Europe\u003c/langstring\u003e\n        \u003c/caption\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003enwe.1\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. iberica\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003enwe.2\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. intermissa\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003enwe.3\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. lihzeni\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003enwe.4\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. mellifera\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003enwe.5\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. sahariensis\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n      \u003c/term\u003e\n      \u003cterm\u003e\n        \u003ctermIdentifier\u003eswe\u003c/termIdentifier\u003e\n        \u003ccaption\u003e\n          \u003clangstring language=\"en\"\u003eSouth-west of Europe\u003c/langstring\u003e\n        \u003c/caption\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003eswe.1\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. carnica\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n       \u003cterm\u003e\n          \u003ctermIdentifier\u003eswe.2\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. cecropia\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003eswe.3\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. ligustica\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003eswe.4\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. macedonica\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003eswe.5\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. ruttneri\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003eswe.6\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eA. m. sicula\u003c/langstring\u003e\n          \u003c/caption\u003e\n        \u003c/term\u003e\n      \u003c/term\u003e\n    \u003c/vdex\u003e\n\nA tree-vocabulary with descriptions \n------------------------------------\n\n================== ================ ===================================================\nkey                english          description\n================== ================ ===================================================\nfield_work_terms   Field work terms\nfield_work_terms.1 Acidification    Acidification is a process. It happens naturall ...\nfield_work_terms.2 Aquifer          If you get a shovel and dig at the ground below ...\nfield_work_terms.3 Biodiversity     This has many contentious meanings but for our ...\n================== ================ ===================================================\n\nAs a CSV this looks like::\n\n    field_work_terms,Field work terms,\n    field_work_terms.1,Acidification,\"Acidification is a process. It happens naturally ...\"\n    field_work_terms.2,Aquifer,\"If you get a shovel and dig at the ground below your ...\"\n    field_work_terms.3,Biodiversity,\"This has many contentious meanings but for our ...\"\n\nAfter running through csv2vdex, called like so::\n\n    csv2vdex --description True --csvdelimiter \",\" terms \"Terminology\" terms.csv terms.xml\n\nThis results in such a VDEX XML::\n\n    \u003cvdex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.imsglobal.org/xsd/imsvdex_v1p0\" xsi:schemaLocation=\"http://www.imsglobal.org/imsvdex_v1p0 imsvdex_v1p0.xsd\" profileType=\"lax\" orderSignificant=\"true\"\u003e\n      \u003cvocabIdentifier\u003eterms\u003c/vocabIdentifier\u003e\n      \u003cvocabName\u003e\n        \u003clangstring language=\"en\"\u003eTerminology\u003c/langstring\u003e\n      \u003c/vocabName\u003e\n      \u003cterm\u003e\n        \u003ctermIdentifier\u003efield_work_terms\u003c/termIdentifier\u003e\n        \u003ccaption\u003e\n          \u003clangstring language=\"en\"\u003eField work terms\u003c/langstring\u003e\n        \u003c/caption\u003e\n        \u003cdescription\u003e\n          \u003clangstring language=\"en\"\u003e\u003c/langstring\u003e\n        \u003c/description\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003efield_work_terms.1\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eAcidification\u003c/langstring\u003e\n          \u003c/caption\u003e\n          \u003cdescription\u003e\n            \u003clangstring language=\"en\"\u003eAcidification is a process. It happens naturally ...\u003c/langstring\u003e\n          \u003c/description\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003efield_work_terms.2\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eAquifer\u003c/langstring\u003e\n          \u003c/caption\u003e\n          \u003cdescription\u003e\n            \u003clangstring language=\"en\"\u003eIf you get a shovel and dig at the ground below your ...\u003c/langstring\u003e\n          \u003c/description\u003e\n        \u003c/term\u003e\n        \u003cterm\u003e\n          \u003ctermIdentifier\u003efield_work_terms.3\u003c/termIdentifier\u003e\n          \u003ccaption\u003e\n            \u003clangstring language=\"en\"\u003eBiodiversity\u003c/langstring\u003e\n          \u003c/caption\u003e\n          \u003cdescription\u003e\n            \u003clangstring language=\"en\"\u003eThis has many contentious meanings but for our ...\u003c/langstring\u003e\n          \u003c/description\u003e\n        \u003c/term\u003e\n      \u003c/term\u003e\n    \u003c/vdex\u003e\n\n\nHelp Text\n=========\n\n::\n\n\tusage: csv2vdex [-h] [--languages [LANGUAGES]] [--startrow [STARTROW]]\n            [--description [DESCRIPTION]] [--keycolumn [KEYCOLUMN]]\n            [--startcolumn [STARTCOLUMN]]\n\t\t\t[--ordered [ORDERED]] [--dialect [DIALECT]]\n\t\t\t[--csvdelimiter [CSVDELIMITER]]\n\t\t\t[--treedelimiter [TREEDELIMITER]] [--encoding [ENCODING]]\n\t\t\tid name source target\n\tcsv2vdex: error: too few arguments\n\tjensens@minime:~/workspace/vdexcsv$ ./bin/csv2vdex --help\n\tusage: csv2vdex [-h] [--languages [LANGUAGES]] [--startrow [STARTROW]]\n            [--description [DESCRIPTION]] [--keycolumn [KEYCOLUMN]]\n            [--startcolumn [STARTCOLUMN]]\n\t\t\t[--ordered [ORDERED]] [--dialect [DIALECT]]\n\t\t\t[--csvdelimiter [CSVDELIMITER]]\n\t\t\t[--treedelimiter [TREEDELIMITER]] [--encoding [ENCODING]]\n\t\t\tid name source target\n\n\tConverts CSV files to VDEX XML\n\n\tpositional arguments:\n\t  id                    unique identifier of vocabulary\n\t  name                  Human readable name of vocabulary. If more than one\n\t\t\t\tlanguage is given separate each langstring by a comma\n\t\t\t\tand provide same order as argument --languages\n\t  source                CSV file to read from\n\t  target                XML target file\n\n\toptional arguments:\n\t  -h, --help            show this help message and exit\n\t  --languages [LANGUAGES], -l [LANGUAGES]\n\t\t\t\tComma separated list of ISO-language codes. Default:\n\t\t\t\ten\n      --description\n                Whether the terms have descriptions. If so, each term takes \n                up two columns per language: one for the caption and one for\n                the description.\n\t  --startrow [STARTROW], -r [STARTROW]\n\t\t\t\tnumber of row in CSV file where to begin reading,\n\t\t\t\tstarts with 0, default 0.\n\t  --keycolumn [KEYCOLUMN], -k [KEYCOLUMN]\n\t\t\t\tnumber of column with the keys of the vocabulary,\n\t\t\t\tstart with 0, default 0.\n\t  --startcolumn [STARTCOLUMN], -s [STARTCOLUMN]\n\t\t\t\tnumber of column with the first langstring of the\n\t\t\t\tvocabulary. It assumes n + number languages of columns\n\t\t\t\tafter this, starts counting with 0, default 1.\n                If terms include description, it assumes two columns \n                per language.\n\t  --ordered [ORDERED], -o [ORDERED]\n\t\t\t\tWhether vocabulary is ordered or not, Default: True\n\t  --dialect [DIALECT]   CSV dialect, default excel.\n\t  --csvdelimiter [CSVDELIMITER]\n\t\t\t\tCSV delimiter of the source file, default semicolon.\n\t  --treedelimiter [TREEDELIMITER]\n\t\t\t\tDelimiter used to split the key the vocabulary into a\n\t\t\t\tpath to determine the position in the tree, default\n\t\t\t\tdot.\n\t  --encoding [ENCODING], -e [ENCODING]\n                                Encoding of input file. Default: utf-8\n\n\n  \nSource Code\n===========\n\n.. image:: https://travis-ci.org/bluedynamics/vdexcsv.png?branch=master   :target: https://travis-ci.org/bluedynamics/vdexcsv\n\nThe sources are in a GIT DVCS with its main branches at \n`github \u003chttp://github.com/bluedynamics/vdexcsv\u003e`_.\n\nWe'd be happy to see many forks and pull-requests to make vdexcsv even better.\n\nContributors\n============\n\n- Jens W. Klein \u003cjens@bluedynamics.com\u003e\n\n- Peter Holzer \u003chpeter@agitator.com\u003e\n\n- Jean Jordaan \u003cjean.jordaan@gmail.com\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluedynamics%2Fvdexcsv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbluedynamics%2Fvdexcsv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluedynamics%2Fvdexcsv/lists"}