vocabulary as tabular { extends as xsd extends as dc extends as rdfs extends as file aspect Collection concept TabularData :> file:Data, file:File concept Cell :> file:Data concept Row :> Collection concept Column :> Collection scalar property holdsContent [ domain Cell range xsd:string functional ] scalar property hasRowPosition [ domain Cell // Maybe limit to positive integers here already, no need for shacl that way range xsd:int ] scalar property hasColumnPosition [ domain Cell // Maybe limit to positive integers here already, no need for shacl that way range xsd:int ] scalar property hasRowId [ domain Row // Maybe limit to positive integers here already, no need for shacl that way range xsd:int ] scalar property hasColumnId [ domain Row // Maybe limit to positive integers here already, no need for shacl that way range xsd:int ] enumerated scalar HeadingModifier [ "yes", "no" ] scalar property hasHeadingModifier [ domain Row range HeadingModifier functional ] concept HeaderRow :> Row [ restricts scalar property hasHeadingModifier to "yes" ] relation entity HasCell [ from Collection to Cell forward hasCell reverse isInCollection ] relation entity HasCells [ from TabularData to Cell forward hasCells reverse isCellOfTabularData ] relation entity HasRows [ from TabularData to Row forward hasRow reverse isRowOfTabularData ] relation entity HasColumns [ from TabularData to Column forward hasColumn reverse isColumnOfTabularData ] }