.Dd October 21, 2021
.Dt SERD-SORT 1
.Os Serd
.Sh NAME
.Nm serd-sort
.Nd reorder RDF statements
.Sh SYNOPSIS
.Nm serd-sort
.Op Fl htV
.Op Fl B Ar base
.Op Fl I Ar syntax
.Op Fl O Ar syntax
.Op Fl b Ar bytes
.Op Fl c Ar collation
.Op Fl k Ar bytes
.Op Fl o Ar filename
.Op Ar input ...
.Sh DESCRIPTION
.Nm
reorders statements in RDF data by loading everything into memory then rewriting it.
By default,
a
.Dq pretty
ordering is used which is ideal for pretty-printing to Turtle or TriG.
The
.Fl c
option can be used to request a specific ordering,
which is mainly useful when emitting a line-based syntax like NTriples or NQuads in a pipeline.
.Pp
The
.Ar input
operands are processed in command-line order.
If
.Ar input
is
.Ar -
or absent,
.Nm
reads from standard input.
.Pp
The options are as follows:
.Pp
.Bl -tag -compact -width 3n
.It Fl B Ar base
Base URI, path, or
.Cm rebase
to use the output path.
See
.Xr serd-pipe 1
for details.
.Pp
.It Fl I Ar syntax
Input syntax or option:
.Cm NQuads ,
.Cm NTriples ,
.Cm TriG ,
.Cm Turtle ,
.Cm lax ,
.Cm variables ,
.Cm relative ,
or
.Cm labels .
See
.Xr serd-pipe 1
for details.
.Pp
.It Fl O Ar syntax
Output syntax or option:
.Cm empty ,
.Cm NQuads ,
.Cm NTriples ,
.Cm TriG ,
.Cm Turtle ,
.Cm ascii ,
.Cm contextual ,
.Cm expanded ,
.Cm verbatim ,
.Cm terse ,
or
.Cm lax .
See
.Xr serd-pipe 1
for details.
.Pp
.It Fl V
Display version information and exit.
.Pp
.It Fl b Ar bytes
I/O block size.
See
.Xr serd-pipe 1
for details.
.Pp
.It Fl c Ar collation
A specific collation (statement ordering) to use.
This can be any ordering of the characters
.Dq SPO ,
which stand for the subject, predicate, and object of statements.
Optionally,
.Dq G
can be added as the first character,
which will sort graph-first.
Concretely, the valid values are:
.Cm SPO ,
.Cm SOP ,
.Cm OPS ,
.Cm OSP ,
.Cm PSO ,
.Cm POS ,
.Cm GSPO ,
.Cm GSOP ,
.Cm GOPS ,
.Cm GOSP ,
.Cm GPSO ,
and
.Cm GPOS .
.Pp
.It Fl h
Print the command line options.
.Pp
.It Fl k Ar bytes
Parser stack size.
See
.Xr serd-pipe 1
for details.
.Pp
.It Fl o Ar filename
Write output to the given
.Ar filename
instead of stdout.
.Pp
.It Fl t
Do not write type as
.Dq a
before other properties.
Instead, rdf:type will be written in order like any other property.
.El
.Sh EXIT STATUS
.Nm
exits with a status of 0, or non-zero if an error occured.
.Sh EXAMPLES
To pretty-print a file:
.Pp
.Dl $ serd-sort -o pretty.ttl input.ttl
.Pp
To print statements ordered by predicate, subject, then object:
.Pp
.Dl $ serd-sort -c PSO input.ttl
.Sh SEE ALSO
.Bl -item -compact
.It
.Xr serd-pipe 1
.It
.Xr serd-filter 1
.It
.Lk http://drobilla.net/software/serd/
.El
.Sh STANDARDS
.Bl -item -compact
.It
.Rs
.%A W3C
.%T RDF 1.1 NQuads
.%D February 2014
.Re
.Lk https://www.w3.org/TR/n-quads/
.It
.Rs
.%A W3C
.%D February 2014
.%T RDF 1.1 NTriples
.Re
.Lk https://www.w3.org/TR/n-triples/
.It
.Rs
.%A W3C
.%T RDF 1.1 TriG
.%D February 2014
.Re
.Lk https://www.w3.org/TR/trig/
.It
.Rs
.%A W3C
.%D February 2014
.%T RDF 1.1 Turtle
.Re
.Lk https://www.w3.org/TR/turtle/
.El
.Sh AUTHORS
.Nm
is a part of serd, by
.An David Robillard
.Mt d@drobilla.net .