| 
 | 1 | +#!/usr/bin/env python3  | 
 | 2 | +"""  | 
 | 3 | +a command line client for csvwlib  | 
 | 4 | +"""  | 
 | 5 | + | 
 | 6 | +import argparse  | 
 | 7 | +from csvwlib import CSVWConverter  | 
 | 8 | +import rdflib  | 
 | 9 | + | 
 | 10 | +def convert(csv_path=None, metadata_path=None, mode="standard", format="json-ld"):  | 
 | 11 | +    # Run csvwlib conversion  | 
 | 12 | +    graph = CSVWConverter.to_rdf(csv_path, metadata_path, mode=mode)  | 
 | 13 | +    # Ensure result is an rdflib.Graph  | 
 | 14 | +    if not isinstance(graph, rdflib.Graph):  | 
 | 15 | +        raise RuntimeError("csvwlib did not return an rdflib.Graph")  | 
 | 16 | +    return graph.serialize(format=format)  | 
 | 17 | + | 
 | 18 | +def main():  | 
 | 19 | +    parser = argparse.ArgumentParser(description="Convert CSV + metadata to JSON-LD with csvwlib")  | 
 | 20 | +    parser.add_argument("--csv", "-c", help="URL to a CSV file (optional if metadata references it)")  | 
 | 21 | +    parser.add_argument("--meta", "-m", help="URL to a CSVW metadata JSON")  | 
 | 22 | +    parser.add_argument("--out", "-o", help="Output RDF file (default: print to stdout)")  | 
 | 23 | +    parser.add_argument("--mode", default="minimal", choices=["standard", "minimal"],  | 
 | 24 | +                        help="CSVW conversion mode")  | 
 | 25 | +    parser.add_argument("--format", "-f", default="json-ld",   | 
 | 26 | +                        help="A rdf format to serialize (default: json-ld)",   | 
 | 27 | +                        choices=["json-ld","xml","n3","nt","ttl","trig","nquads"])  | 
 | 28 | +    args = parser.parse_args()  | 
 | 29 | + | 
 | 30 | +    myrdf = convert(args.csv, args.meta, mode=args.mode, format=args.format)  | 
 | 31 | + | 
 | 32 | +    if args.out:  | 
 | 33 | +        with open(args.out, "w", encoding="utf-8") as f:  | 
 | 34 | +            f.write(myrdf)  | 
 | 35 | +        print(f"✔ Wrote rdf to {args.out}")  | 
 | 36 | +    else:  | 
 | 37 | +        print(myrdf)  | 
 | 38 | + | 
 | 39 | + | 
 | 40 | +if __name__ == "__main__":  | 
 | 41 | +    main()  | 
0 commit comments