string_view contains a pointer to
existing, initialised memory and a size. Whilst a string_view variable is being used, the underlying memory referenced
must be valid. The string_view variable doesn't own the data and can't change it. But for read-only functions (eg find et al), it is light weight and fast as it has virtually no overhead (as string does). As it only has the pointer/size elements, creating one and copying one is fast with minimal overhead - so passing by value is OK. It can be created from a string, a string_view and a c-style char array. NOTE that it is
guaranteed to be null-terminated and so can't be passed to any function which requires a null-terminated string (string.c_str() returns null-terminated, but there's no equivalent for string_view).
There are some current limitations - such as not using a string_view to initialise a istringstream, using for a file name etc.
owning here simply means who is responsible for deleting/modifyig the data. If you pass string by value, you get a copy which is owned by who created the copy. If you pass by const ref, then the ownership remains with the original. string_view doesn't 'own' the underlying data - the original user still does.
The important point about string_view is that the original data must still be valid (owned) by the owner whilst the string_view is being used. This is of particular importance for 'temporary' data (rvalue) which isn't valid after it's duration.