{ let $search-keys-regex := {"author": "Person|Autor", "title": ("Titelwort", "Titel"), "free": "Freie *Suche", "keywords": "Schlag|Thema", "isbn": "ISBN", "id": "Signatur"} let $inputs := //input let $selects := //select let $elements := $inputs | $selects let $basic-selects-pos := for $e at $i in $elements where $e/(self::select and contains($e/@id, "SUCH0")) return $i let $basic-selects := for $i in $basic-selects-pos return $elements[$i] let $options := $basic-selects//option let $filter-names := {"libraryLocation": "BEZIWA_1", "libraryBranch": ("AUSGAB_1","SUCBER_1"), "mediaType": "MEDIUM_1", "language": "GHTSPR_1"} let $filter-selects := {|for $name in jn:keys($filter-names) let $ids := $filter-names($name) let $select := $selects[@id = $ids][1] where $select return {$name: $select} |} return ( search-basic-selects := $basic-selects/@name, search-basic-inputs := for $i in $basic-selects-pos return $elements[$i + 1][self::input]/@name, if (count($search-basic-selects) lt 3 or count($search-basic-selects) ne count($search-basic-inputs)) then vl:raise-internal("Zu wenig Suchfelder oder die Suchfelder wurden nicht erkannt.") else (), search-basic-options := map:merge( for $key in jn:keys($search-keys-regex) let $r := $search-keys-regex($key) return {$key: head(for $r in $r return $options[matches(., $r)]/@value)} ), search-basic-input-year := $inputs[@id = "GEJAHR_1"]/@name, search-filter-map := {| map:keys($filter-selects) ! {.: $filter-selects(.)/@name} |}, search-params := ( for $key in ("title", "author", "free", "keywords", "isbn", "id") where $search-basic-options($key) return $key, $search-basic-input-year[1]!"year", map:keys($filter-selects) ! {"name": ., "options": $filter-selects(.)//option} ), search-start-button := ($inputs[@type="submit"][contains(@class, "suche-starten")])[1] ) }