# Preserves Path schema [Preserves Path](https://preserves.dev/preserves-path.html) is a language for selecting and filtering portions of a Preserves value. It has an associated schema describing the various kinds of Path expressions as abstract syntax. The schema source below is taken from [path/path.prs](https://gitlab.com/preserves/preserves/-/blob/main/path/path.prs) in the [Preserves source code repository](https://gitlab.com/preserves/preserves). Preserves Path expressions come in several flavours: selectors, steps (axes and filters), and predicates. Each is described below along with its abstract syntax definitions. ## Selectors and Steps *Selectors* are a sequence of *steps*, applied one after the other to the currently-selected value. Each step transforms an input into zero or more outputs. A step is an *axis* or a *filter*. ```preserves-schema Selector = [Step ...] . Step = Axis / Filter . ``` ## Axes: selecting portions of the input Each *axis* step generally selects some sub-portion or -portions of the current document. An axis may also have a secondary filtering effect: for example, `label` only applies to Records, and will yield an empty result set when applied to any other kind of input. ```preserves-schema Axis = / ;; yields the immediate subvalues of the input nonrecursively / ;; recurses through all descendant subvalues of the input / ;; extracts a subvalue named by the given key, if any /