# CSVs and Tabular Data LinkML can support both complex interlinked normalized relational data as well as flat/denormalized data as typically found in spreadsheets and in CSVs used by data scientists. Our philosophy is "always have a schema" even when working with simple tabular data. ## Conversion the `linkml-convert` script can be used to convert between CSVs/TSVs and other formats like JSON/RDF. The same tooling for [validating-data](validating-data) operate in the same way. ### Conventions for working with tabular data LinkML allows you to create schemas with complex nested data - these don't necessarily have a simple unified mapping to tables/TSVs. However, you can still work with tabular representations if your schema has a certain "shape" and you provide sufficient hints. ### Container objects See [part 2 of the tutorial](../intro/tutorial02) for an introduction to container objects. To serialize your data objects as TSVs, it's assumed that you have a class in your schema that serves the role of *container*. It can be called whatever you like. You can also annotate this with [tree_root](https://w3id.org/linkml/tree_root) set to true. This class will have a multivalued slot pointing at the list of things you want to serialize in the TSV. This slot is known as the *index slot* For example, in the [PersonSchema](https://github.com/linkml/linkml/tree/main/examples/PersonSchema) schema, the Container class has two possible index slots: [![img](https://yuml.me/diagram/nofunky;dir:TB/class/[Person],[Organization],[Organization]