diff --git a/core/modules/views/config/schema/views.access.schema.yml b/core/modules/views/config/schema/views.access.schema.yml
new file mode 100644
index 0000000..2dc6d90
--- /dev/null
+++ b/core/modules/views/config/schema/views.access.schema.yml
@@ -0,0 +1,22 @@
+# Schema for the views access plugins.
+
+views.access.none:
+  type: sequence
+  label: 'None'
+  sequence:
+    - type: string
+
+views.access.perm:
+  type: mapping
+  label: 'Permission'
+  mapping:
+    perm:
+      type: string
+      label: 'Permission'
+
+views.access.role:
+  type: sequence
+  label: 'Role'
+  sequence:
+    - type: string
+      label: 'Role'
diff --git a/core/modules/views/config/schema/views.area.schema.yml b/core/modules/views/config/schema/views.area.schema.yml
new file mode 100644
index 0000000..3c54b0b
--- /dev/null
+++ b/core/modules/views/config/schema/views.area.schema.yml
@@ -0,0 +1,58 @@
+# Schema for the views area plugins.
+
+views.area.*:
+  type: views_area
+  label: 'Default area'
+
+views.area.text:
+  type: views_area
+  label: 'Text'
+  mapping:
+    content:
+      type: text
+      label: 'The shown text of the area'
+    format:
+      type: string
+      label: 'The filter format the content is in'
+    tokenize:
+      type: boolean
+      label: 'Should replacement tokens be used from the first row'
+
+views.area.text_custom:
+  type: views_area
+  label: 'Text custom'
+  mapping:
+    content:
+      type: text
+      label: 'The shown text of the area'
+    tokenize:
+      type: boolean
+      label: 'Should replacement tokens be used from the first row'
+
+views.area.result:
+  type: views_area
+  label: 'Result'
+  mapping:
+    content:
+      type: text
+      label: 'The shown text of the result summary area'
+
+
+views.area.title:
+  type: views_area
+  label: 'Title'
+  mapping:
+    title:
+      type: label
+      label: 'The title which will be overriden for the page'
+
+views.area.view:
+  type: views_area
+  label: 'View'
+  mapping:
+    view_to_insert:
+      type: string
+      label: 'View to insert'
+    inherit_to_arguments:
+      type: boolean
+      label: 'Inherit contextual filters'
diff --git a/core/modules/views/config/schema/views.argument.schema.yml b/core/modules/views/config/schema/views.argument.schema.yml
new file mode 100644
index 0000000..2d6729b
--- /dev/null
+++ b/core/modules/views/config/schema/views.argument.schema.yml
@@ -0,0 +1,67 @@
+# Schema for the views argument plugins.
+
+views.argument.*:
+  type: views_argument
+  label: 'Default argument'
+
+views.argument.many_to_one:
+  type: views_argument
+  label: 'Many to one'
+  mapping:
+    break_phrase:
+      type: boolean
+      label: 'Allow multiple values'
+    add_table:
+      type: boolean
+      label: 'Allow multiple filter values to work together'
+    require_value:
+      type: boolean
+      label: 'Do not display items with no value in summary'
+
+views.argument.null:
+  type: views_argument
+  label: 'Null'
+  mapping:
+    must_not_be:
+      type: boolean
+      label: 'Fail basic validation if any argument is given'
+
+views.argument.numeric:
+  type: views_argument
+  label: 'Numeric'
+  mapping:
+    break_phrase:
+      type: boolean
+      label: 'Allow multiple values'
+    not:
+      type: boolean
+      label: 'Exclude'
+
+views.argument.string:
+  type: views_argument
+  label: 'String'
+  mapping:
+    glossary:
+      type: boolean
+      label: 'Glossary mode'
+    limit:
+      type: integer
+      label: 'Character limit'
+    case:
+      type: string
+      label: 'Case'
+    path_case:
+      type: string
+      label: 'Case in path'
+    transform_dash:
+      type: boolean
+      label: 'Transform spaces to dashes in URL'
+    break_phrase:
+      type: boolean
+      label: 'Allow multiple values'
+    add_table:
+      type: boolean
+      label: 'Allow multiple filter values to work together'
+    require_value:
+      type: boolean
+      label: 'Do not display items with no value in summary'
diff --git a/core/modules/views/config/schema/views.argument_default.schema.yml b/core/modules/views/config/schema/views.argument_default.schema.yml
new file mode 100644
index 0000000..16b23fc
--- /dev/null
+++ b/core/modules/views/config/schema/views.argument_default.schema.yml
@@ -0,0 +1,28 @@
+# Schema for the views default arguments.
+
+views.argument_default.fixed:
+  type: mapping
+  label: 'Fixed'
+  mapping:
+    argument:
+      type: string
+      label: 'Fixed value'
+
+views.argument_default.php:
+  type: mapping
+  label: 'PHP Code'
+  mapping:
+    code:
+      type: string
+      label: 'PHP contextual filter code'
+
+views.argument_default.raw:
+  type: mapping
+  label: 'Raw value from URL'
+  mapping:
+    index:
+      type: integer
+      label: 'Path component'
+    use_alias:
+      type: boolean
+      label: 'Use path alias'
diff --git a/core/modules/views/config/schema/views.argument_validator.schema.yml b/core/modules/views/config/schema/views.argument_validator.schema.yml
new file mode 100644
index 0000000..5bf1a2d
--- /dev/null
+++ b/core/modules/views/config/schema/views.argument_validator.schema.yml
@@ -0,0 +1,19 @@
+# Schema for the views argument validators.
+
+views.argument_validator.none:
+  type: sequence
+  label: 'Basic validation'
+  sequence:
+    - type: string
+
+views.argument_validator.php:
+  type: mapping
+  label: 'PHP Code'
+  mapping:
+    code:
+      type: string
+      label: 'PHP validate code'
+
+views.argument_validator.numeric:
+  type: boolean
+  label: 'Numeric'
diff --git a/core/modules/views/config/schema/views.cache.schema.yml b/core/modules/views/config/schema/views.cache.schema.yml
new file mode 100644
index 0000000..b1aa27d
--- /dev/null
+++ b/core/modules/views/config/schema/views.cache.schema.yml
@@ -0,0 +1,33 @@
+# Schema for the views cache.
+
+views.cache.none:
+  type: mapping
+  lable: 'None'
+  mapping:
+    type:
+      type: string
+      label: 'Cache type'
+
+views.cache.time:
+  type: mapping
+  lable: 'None'
+  mapping:
+    type:
+      type: string
+      label: 'Time-based'
+    options:
+      type: mapping
+      label: 'Cache options'
+      mapping:
+        result_lifespan:
+          type: integer
+          label: 'The length of time raw query results should be cached.'
+        result_lifespan_custom:
+          type: integer
+          label: 'Length of time in seconds raw query results should be cached.'
+        output_lifespan:
+          type: integer
+          label: 'The length of time rendered HTML output should be cached.'
+        output_lifespan_custom:
+          type: integer
+          label: 'Length of time in seconds rendered HTML output should be cached.'
diff --git a/core/modules/views/config/schema/views.data_types.schema.yml b/core/modules/views/config/schema/views.data_types.schema.yml
new file mode 100644
index 0000000..f8a2770
--- /dev/null
+++ b/core/modules/views/config/schema/views.data_types.schema.yml
@@ -0,0 +1,741 @@
+# Basic data types for views.
+
+views_display:
+  type: mapping
+  label: 'Display options'
+  mapping:
+    title:
+      type: text
+      label: 'Display title'
+    format:
+      type: string
+      label: 'Format'
+    fields:
+      type: sequence
+      label: 'Fields'
+      sequence:
+        - type: views.field.[plugin_id]
+    pager:
+      type: mapping
+      label: 'Pager'
+      mapping:
+        type:
+          label: 'Pager type'
+        options:
+          type: views.pager.[%parent.type]
+    exposed_form:
+      type: mapping
+      label: 'Exposed form'
+      mapping:
+        type:
+          label: 'Exposed form type'
+        options:
+          label: 'Options'
+          type: views.exposed_form.[%parent.type]
+    access:
+      type: mapping
+      label: 'Access'
+      mapping:
+        type:
+          type: string
+          label: 'Access type'
+        options:
+          type: views.access.[%parent.type]
+    cache:
+      type: views.cache.[type]
+      label: 'Caching'
+    empty:
+      type: sequence
+      label: 'No results behavior'
+      sequence:
+        - type: views.area.[plugin_id]
+    sorts:
+      type: sequence
+      label: 'Sorts'
+      sequence:
+        - type: views.sort.[plugin_id]
+    arguments:
+      type: sequence
+      label: 'Arguments'
+      sequence:
+        - type: views.argument.[plugin_id]
+    filters:
+      type: sequence
+      label: 'Filters'
+      sequence:
+        - type: views.filter.[plugin_id]
+    style:
+      type: mapping
+      label: 'Format'
+      mapping:
+        type:
+          label: 'Type'
+        options:
+          type: views.style.[%parent.type]
+    row:
+      type: mapping
+      label: 'Row'
+      mapping:
+        type:
+          label: 'Row type'
+        options:
+          type: views.row.[%parent.type]
+    query:
+      type: mapping
+      label: 'Query'
+      mapping:
+        type:
+          type: string
+          label: 'Query type'
+        options:
+          type: views.query.[%parent.type]
+    defaults:
+      type: mapping
+      label: 'Defaults'
+      mapping:
+        access:
+          type: boolean
+          label: 'Access restrictions'
+        cache:
+          type: boolean
+          label: 'Caching'
+        query:
+          type: boolean
+          label: 'Query options'
+        title:
+          type: boolean
+          label: 'Title'
+        css_class:
+          type: boolean
+          label: 'CSS class'
+        display_description:
+          type: boolean
+          label: 'Administrative description'
+        use_ajax:
+          type: boolean
+          label: 'Use AJAX'
+        hide_attachment_summary:
+          type: boolean
+          label: 'Hide attachments when displaying a contextual filter summary'
+        show_admin_links:
+          type: boolean
+          label: 'Show contextual links'
+        pager:
+          type: boolean
+          label: 'Use pager'
+        use_more:
+          type: boolean
+          label: 'Create more link'
+        use_more_always:
+          type: boolean
+          label: 'Display ''more'' link only if there is more content'
+        use_more_text:
+          type: boolean
+          label: 'The text to display for the more link.'
+        exposed_form:
+          type: boolean
+          label: 'Exposed form style'
+        link_display:
+          type: boolean
+          label: 'Link display'
+        link_url:
+          type: boolean
+          label: 'Link URL'
+        group_by:
+          type: boolean
+          label: 'Aggregate'
+        style:
+          type: boolean
+          label: 'Style'
+        row:
+          type: boolean
+          label: 'Row'
+        relationships:
+          type: boolean
+          label: 'Relationships'
+        fields:
+          type: boolean
+          label: 'Fields'
+        sorts:
+          type: boolean
+          label: 'Sorts'
+        arguments:
+          type: boolean
+          label: 'Arguments'
+        filters:
+          type: boolean
+          label: 'Filters'
+        filter_groups:
+          type: boolean
+          label: 'Filter groups'
+        pager_options:
+          type: boolean
+          label: 'Pager options'
+    relationships:
+      type: sequence
+      label: 'Relationships'
+      sequence:
+        - type: views.relationship.[plugin_id]
+
+views_sort:
+  type: mapping
+  label: 'Sort criteria'
+  mapping:
+    id:
+      type: string
+      label: 'ID'
+    table:
+      type: string
+      label: 'Table name'
+    field:
+      type: string
+      label: 'Field name'
+    relationship:
+      type: string
+      label: 'Relationship'
+    group_type:
+      type: string
+      label: 'Group type'
+    admin_label:
+      type: label
+      label: 'Administrative title'
+    order:
+      type: string
+      label: 'Sort order'
+    expose:
+      type: views.sort_expose.[%parent.plugin_id]
+      label: 'Expose settings'
+    exposed:
+      type: boolean
+      label: 'Expose this sort to visitors, to allow them to change it'
+    plugin_id:
+      type: string
+      label: 'Plugin ID'
+
+views_area:
+  type: views_handler
+  label: 'Area'
+  mapping:
+    label:
+      type: label
+      label: 'A string to identify the area instance in the admin UI.'
+    empty:
+      type: boolean
+      label: 'Should the area be displayed on empty results.'
+
+views_handler:
+  type: mapping
+  mapping:
+    id:
+      type: string
+      label: 'A unique ID per handler type'
+    table:
+      type: string
+      label: 'The views_data table for this handler'
+    field:
+      type: string
+      label: 'The views_data field for this handler'
+    relationship:
+      type: string
+      label: 'The ID of the relationship instance used by this handler'
+    group_type:
+      type: string
+      label: 'A sql aggregation type'
+    admin_label:
+      type: label
+      label: 'A string to identify the handler instance in the admin UI.'
+
+views_argument:
+  type: views_handler
+  label: 'Argument'
+  mapping:
+    default_action:
+      type: string
+      label: 'When the filter value is NOT available'
+    exception:
+      type: mapping
+      label: 'Exception value'
+      mapping:
+        value:
+          type: string
+          label: 'Value'
+        title_enable:
+          type: boolean
+          label: 'Override title'
+        title:
+          type: label
+          label: 'Title'
+    title_enable:
+      type: boolean
+      label: 'Override title'
+    title:
+      type: label
+      label: 'Title'
+    breadcrumb_enable:
+      type: boolean
+      label: 'Override breadcrumb'
+    breadcrumb:
+      type: label
+      label: 'Breadcrumb'
+    default_argument_type:
+      type: string
+      label: 'Type'
+    default_argument_options:
+      type: views.argument_default.[%parent.default_argument_type]
+      label: 'Default argument options'
+    default_argument_skip_url:
+      type: boolean
+      label: 'Skip default argument for view URL'
+    summary_options:
+      type: views.style.[%parent.summary.format]
+      label: 'Summary options'
+    summary:
+      type: mapping
+      label: 'Display a summary'
+      mapping:
+        sort_order:
+          type: string
+          label: 'Sort order'
+        number_of_records:
+          type: integer
+          label: 'Sort by'
+        format:
+          type: string
+          label: 'Format'
+    specify_validation:
+      type: boolean
+      label: 'Specify validation criteria'
+    validate:
+      type: mapping
+      label: 'Validation settings'
+      mapping:
+        type:
+          type: string
+          label: 'Validator'
+        fail:
+          type: string
+          label: 'Action to take if filter value does not validate'
+    validate_options:
+      type: views.argument_validator.[%parent.validate.type]
+      label: 'Validate options'
+    glossary:
+      type: boolean
+      label: 'Glossary mode'
+    limit:
+      type: integer
+      label: 'Character limit'
+    case:
+      type: string
+      label: 'Case'
+    path_case:
+      type: string
+      label: 'Case in path'
+    transform_dash:
+      type: boolean
+      label: 'Transform spaces to dashes in URL'
+    break_phrase:
+      type: boolean
+      label: 'Allow multiple values'
+    plugin_id:
+      type: string
+      label: 'Plugin ID'
+
+
+views_exposed_form:
+  type: mapping
+  mapping:
+    submit_button:
+      type: label
+      label: 'Submit button text'
+    reset_button:
+      type: boolean
+      label: 'Include reset button'
+    reset_button_label:
+      type: label
+      label: 'Reset button label'
+    exposed_sorts_label:
+      type: label
+      label: 'Exposed sorts label'
+    expose_sort_order:
+      type: boolean
+      label: 'Expose sort order'
+    sort_asc_label:
+      type: label
+      label: 'Ascending'
+    sort_desc_label:
+      type: label
+      label: 'Descending'
+
+views_field:
+  type: views_handler
+  mapping:
+    label:
+      type: label
+      label: 'Create a label'
+    exclude:
+      type: boolean
+      label: 'Exclude from display'
+    alter:
+      type: mapping
+      label: 'Rewrite results'
+      mapping:
+        alter_text:
+          type: boolean
+          label: 'Override the output of this field with custom text'
+        text:
+          type: text
+          label: 'Text'
+        make_link:
+          type: boolean
+          label: 'Output this field as a custom link'
+        path:
+          type: string
+          label: 'Link path'
+        absolute:
+          type: boolean
+          label: 'Use absolute path'
+        external:
+          type: boolean
+          label: 'External server URL'
+        replace_spaces:
+          type: boolean
+          label: 'Replace spaces with dashes'
+        path_case:
+          type: string
+          label: 'Transform the case'
+        trim_whitespace:
+          type: boolean
+          label: 'Remove whitespace'
+        alt:
+          type: label
+          label: 'Title text'
+        rel:
+          type: string
+          label: 'Rel Text'
+        link_class:
+          type: string
+          label: 'Link class'
+        prefix:
+          type: label
+          label: 'Prefix text'
+        suffix:
+          type: label
+          label: 'Suffix text'
+        target:
+          type: string
+          label: 'Target'
+        nl2br:
+          type: boolean
+          label: 'Convert newlines to HTML <br> tags'
+        max_length:
+          type: string
+          label: 'Maximum number of characters'
+        word_boundary:
+          type: boolean
+          label: 'Trim only on a word boundary'
+        ellipsis:
+          type: boolean
+          label: 'Add "..." at the end of trimmed text'
+        more_link:
+          type: boolean
+          label: 'Add a read-more link if output is trimmed.'
+        more_link_text:
+          type: label
+          label: 'More link label'
+        more_link_path:
+          type: string
+          label: 'More link path'
+        strip_tags:
+          type: boolean
+          label: 'Strip HTML tags'
+        trim:
+          type: boolean
+          label: 'Trim this field to a maximum number of characters'
+        preserve_tags:
+          type: string
+          label: 'Preserve certain tags'
+        html:
+          type: boolean
+          label: 'Field can contain HTML'
+    element_type:
+      type: string
+      label: 'HTML element'
+    element_class:
+      type: string
+      label: 'CSS class'
+    element_label_type:
+      type: string
+      label: 'Label HTML element'
+    element_label_class:
+      type: string
+      label: 'CSS class'
+    element_label_colon:
+      type: boolean
+      label: 'Place a colon after the label'
+    element_wrapper_type:
+      type: string
+      label: 'Wrapper HTML element'
+    element_wrapper_class:
+      type: string
+      label: 'CSS class'
+    element_default_classes:
+      type: boolean
+      label: 'Add default classes'
+    empty:
+      type: string
+      label: 'No results text'
+    hide_empty:
+      type: boolean
+      label: 'Hide if empty'
+    empty_zero:
+      type: boolean
+      label: 'Count the number 0 as empty'
+    hide_alter_empty:
+      type: boolean
+      label: 'Hide rewriting if empty'
+
+views_pager:
+  type: mapping
+  label: 'Pager'
+  mapping:
+    offset:
+      type: integer
+      label: 'Offset'
+
+views_pager_sql:
+  type: views_pager
+  label: 'SQL pager'
+  mapping:
+    items_per_page:
+      type: integer
+      label: 'Items per page'
+    total_pages:
+      type: integer
+      label: 'Number of pages'
+    id:
+      type: integer
+      label: 'Pager ID'
+    tags:
+      type: mapping
+      label: 'Pager link labels'
+      mapping:
+        next:
+          type: label
+          label: 'Next page link text'
+        previous:
+          type: label
+          label: 'Previous page link text'
+    expose:
+      type: mapping
+      label: 'Exposed options'
+      mapping:
+        items_per_page_label:
+          type: label
+          label: 'Items per page label'
+        items_per_page_options:
+          type: string
+          label: 'Exposed items per page options'
+        items_per_page_options_all:
+          type: boolean
+          label: 'Include all items option'
+        items_per_page_options_all_label:
+          type: label
+          label: 'All items label'
+        offset:
+          type: boolean
+          label: 'Expose Offset'
+        offset_label:
+          type: label
+          label: 'Offset label'
+
+views_style:
+  type: mapping
+  mapping:
+    grouping:
+      type: sequence
+      label: 'Grouping field number %i'
+      sequence:
+        - type: mapping
+          label: 'Field'
+          mapping:
+            field:
+              type: string
+              label: 'Field'
+            rendered:
+              type: boolean
+              label: 'Use rendered output to group rows'
+            rendered_strip:
+              type: boolean
+              label: 'Remove tags from rendered output'
+    row_class:
+      type: string
+      label: 'Row class'
+    default_row_class:
+      type: boolean
+      label: 'Add views row classes'
+    row_class_special:
+      type: boolean
+      label: 'Add striping (odd/even), first/last row classes'
+    uses_fields:
+      type: boolean
+      label: 'Force using fields'
+
+views_filter:
+  type: views_handler
+  mapping:
+    operator:
+      type: string
+      label: 'Operator'
+    value:
+      type: views.filter_value.[plugin_id]
+      label: 'Value'
+    group:
+      type: string
+      label: 'Group'
+    exposed:
+      type: boolean
+      label: 'Expose this filter to visitors, to allow them to change it'
+    expose:
+      type: mapping
+      label: 'Expose'
+      mapping:
+        operator_id:
+          type: string
+          label: 'Operator identifier'
+        label:
+          type: label
+          label: 'Label'
+        description:
+          type: label
+          label: 'Description'
+        use_operator:
+          type: boolean
+          label: 'Expose operator'
+        operator:
+          type: string
+          label: 'Operator'
+        identifier:
+          type: string
+          label: 'Filter identifier'
+        required:
+          type: boolean
+          label: 'Required'
+        remember:
+          type: boolean
+          label: 'Remember the last selection'
+        multiple:
+          type: boolean
+          label: 'Allow multiple selections'
+        remember_roles:
+          type: sequence
+          label: 'User roles'
+          sequence:
+            - type: string
+              label: 'Role'
+    is_grouped:
+      type: boolean
+      label: 'Grouped filters'
+    group_info:
+      type: mapping
+      label: 'Group'
+      mapping:
+        label:
+          type: label
+          label: 'Label'
+        description:
+          type: label
+          label: 'Description'
+        identifier:
+          type: string
+          label: 'Identifier'
+        optional:
+          type: boolean
+          label: 'Optional'
+        widget:
+          type: string
+          label: 'Widget type'
+        multiple:
+          type: boolean
+          label: 'Allow multiple selections'
+        remember:
+          type: integer
+          label: 'Remember'
+        default_group:
+          type: string
+          label: 'Default'
+        default_group_multiple:
+          type: sequence
+          label: 'Defaults'
+          sequence:
+            - type: integer
+              label: 'Default'
+        group_items:
+          type: views.filter.group_items.[plugin_id]
+          label: 'Group items'
+    plugin_id:
+      type: string
+      label: 'Plugin ID'
+    filter_groups:
+      type: mapping
+      label: 'Groups'
+      mapping:
+        operator:
+          type: string
+          label: 'Operator'
+        groups:
+          type: sequence
+          label: 'Groups'
+          sequence:
+            - type: string
+              label: 'Operator'
+
+views_relationship:
+  type: mapping
+  mapping:
+    id:
+      type: string
+      label: 'ID'
+    table:
+      type: string
+      label: 'Table'
+    field:
+      type: string
+      label: 'UID'
+    plugin_id:
+      type: string
+      label: 'Plugin ID'
+    relationship:
+      type: string
+      label: 'Relationship'
+    group_type:
+      type: string
+      label: 'Group type'
+    admin_label:
+      type: string
+      label: 'Administrative title'
+    required:
+      type: boolean
+      label: 'Require this relationship'
+
+views_query:
+  type: mapping
+  label: 'Query options'
+  mapping:
+    query_comment:
+      type: boolean
+      label: 'Query comment'
+    disable_sql_rewrite:
+      type: boolean
+      label: 'Disable SQL rewriting'
+    distinct:
+      type: boolean
+      label: 'Distinct'
+    slave:
+      type: boolean
+      label: 'Use Slave Server'
+    query_tags:
+      type: sequence
+      label: 'Query Tags'
+      sequence:
+        - type: string
+          label: 'Tag'
diff --git a/core/modules/views/config/schema/views.display.schema.yml b/core/modules/views/config/schema/views.display.schema.yml
new file mode 100644
index 0000000..d84feb2
--- /dev/null
+++ b/core/modules/views/config/schema/views.display.schema.yml
@@ -0,0 +1,112 @@
+# Schema for the views display plugins.
+
+views.display.default:
+  type: views_display
+  label: 'Default display options'
+
+views.display.page:
+  type: views_display
+  label: 'Page display options'
+  mapping:
+    path:
+      type: string
+      label: 'Page path'
+    menu:
+      type: mapping
+      label: 'Menu'
+      mapping:
+        type:
+          type: string
+          label: 'Type'
+        title:
+          type: text
+          label: 'Title'
+        description:
+          type: text
+          label: 'Description'
+        weight:
+          type: integer
+          label: 'Weight'
+        name:
+          type: string
+          label: 'Menu name'
+        context:
+          type: string
+          label: 'Context'
+    tab_options:
+      type: mapping
+      label: 'Tab options'
+      mapping:
+        type:
+          type: string
+          label: 'Type'
+        title:
+          type: text
+          label: 'Title'
+        description:
+          type: text
+          label: 'Description'
+        weight:
+          type: integer
+          label: 'Weight'
+        name:
+          type: string
+          label: 'Menu name'
+
+views.display.block:
+  type: views_display
+  label: 'Block display options'
+  mapping:
+    block_description:
+      type: text
+      label: 'Block name'
+    block_caching:
+      type: boolean
+      label: 'Block caching'
+
+views.display.feed:
+  type: views_display
+  label: 'Feed display options'
+  mapping:
+    path:
+      type: string
+      label: 'Page path'
+    sitename_title:
+      type: boolean
+      label: 'Use the site name for the title'
+    displays:
+      type: sequence
+      label: 'The feed icon will be available only to the selected displays.'
+      sequence:
+        - type: string
+          label: 'Display'
+
+views.display.embed:
+  type: views_display
+  label: 'Embed display options'
+
+views.display.attachment:
+  type: views_display
+  label: 'Attachment display options'
+  mapping:
+    displays:
+      type: sequence
+      label: 'Attach to'
+      sequence:
+        - type: string
+          label: 'Display'
+    attachment_position:
+      type: string
+      label: 'Attachment position'
+    inherit_arguments:
+      type: boolean
+      lablel: 'Inherit contextual filters'
+    inherit_exposed_filters:
+      type: boolean
+      label: 'Inherit exposed filters'
+    inherit_pager:
+      type: boolean
+      label: 'Inherit pager'
+    render_pager:
+      type: boolean
+      label: 'Render pager'
diff --git a/core/modules/views/config/schema/views.display_extender.schema.yml b/core/modules/views/config/schema/views.display_extender.schema.yml
new file mode 100644
index 0000000..e69de29
diff --git a/core/modules/views/config/schema/views.exposed_form.schema.yml b/core/modules/views/config/schema/views.exposed_form.schema.yml
new file mode 100644
index 0000000..c2877fe
--- /dev/null
+++ b/core/modules/views/config/schema/views.exposed_form.schema.yml
@@ -0,0 +1,16 @@
+# Schema for the views exposed form.
+
+views.exposed_form.basic:
+  type: views_exposed_form
+  label: 'Basic'
+
+views.exposed_form.input_required:
+  type: views_exposed_form
+  label: 'Input required'
+  mapping:
+    text_input_required:
+      type: text
+      label: 'Text on demand'
+    text_input_required_format:
+      type: string
+      label: 'Text on demand format'
diff --git a/core/modules/views/config/schema/views.field.schema.yml b/core/modules/views/config/schema/views.field.schema.yml
new file mode 100644
index 0000000..8f0684d
--- /dev/null
+++ b/core/modules/views/config/schema/views.field.schema.yml
@@ -0,0 +1,153 @@
+# Schema for the views field plugins.
+
+views.field.*:
+  type: views_field
+  label: 'Default field'
+
+views.field.boolean:
+  type: views_field
+  label: 'Boolean'
+  mapping:
+    type:
+      type: string
+      label: 'Output format'
+    type_custom_true:
+      type: string
+      label: 'Custom output for TRUE'
+    type_custom_false:
+      type: string
+      label: 'Custom output for FALSE'
+    not:
+      type: string
+      label: 'Reverse'
+
+views.field.broken:
+  type: views_field
+  label: 'Broken'
+
+views.field.counter:
+  type: views_field
+  label: 'Counter'
+  mapping:
+    counter_start:
+      type: integer
+      label: 'Starting value'
+
+views.field.custom:
+  type: views_field
+  label: 'Custom'
+
+views.field.date:
+  type: views_field
+  label: 'Date'
+  mapping:
+    date_format:
+      type: string
+      label: 'Date format'
+    custom_date_format:
+      type: string
+      label: 'Custom date format'
+    timezone:
+      type: string
+      label: 'Timezone'
+
+views.field.file_size:
+  type: views_field
+  label: 'File size'
+  mapping:
+    file_size_display:
+      type: string
+      label: 'File size display'
+
+views.field.links:
+  type: views_field
+  label: 'Links'
+  mapping:
+    fields:
+      type: string
+      label: 'Fields'
+    destination:
+      type: boolean
+      label: 'Include destination'
+
+views.field.machine_name:
+  type: views_field
+  label: 'Machine name'
+  mapping:
+    machine_name:
+      type: boolean
+      label: 'Output machine name'
+
+views.field.numeric:
+  type: views_field
+  label: 'Numeric'
+  mapping:
+    set_precision:
+      type: boolean
+      label: 'Round'
+    precision:
+      type: integer
+      label: 'Precision'
+    decimal:
+      type: string
+      label: 'Decimal point'
+    separator:
+      type: string
+      label: 'Thousands marker'
+    format_plural:
+      type: boolean
+      label: 'Format plural'
+    format_plural_singular:
+      type: label
+      label: 'Singular form'
+    format_plural_plural:
+      type: label
+      label: 'Plural form'
+    prefix:
+      type: label
+      label: 'Prefix'
+    suffix:
+      type: label
+      label: 'Suffix'
+
+views.field.prerender_list:
+  type: views_field
+  label: 'List'
+  mapping:
+    type:
+      type: string
+      label: 'Display type'
+    separator:
+      type: string
+      label: 'Separator'
+
+views.field.serialized:
+  type: views_field
+  label: 'Serialized'
+  mapping:
+    format:
+      type: string
+      label: 'Display format'
+    key:
+      type: string
+      label: 'Which key should be displayed'
+
+views.field.standard:
+  type: views_field
+  label: 'Standard'
+
+views.field.time_interval:
+  type: views_field
+  label: 'Time interval'
+  mapping:
+    granularity:
+      type: integer
+      label: 'Granularity'
+
+views.field.url:
+  type: views_field
+  label: 'URL'
+  mapping:
+    display_as_link:
+      type: boolean
+      label: 'Display as link'
diff --git a/core/modules/views/config/schema/views.filter.schema.yml b/core/modules/views/config/schema/views.filter.schema.yml
new file mode 100644
index 0000000..757ba1c
--- /dev/null
+++ b/core/modules/views/config/schema/views.filter.schema.yml
@@ -0,0 +1,119 @@
+# Schema for the views filter plugins.
+
+views.filter.*:
+  type: views_filter
+  label: 'Default filter'
+
+views_filter_boolean:
+  type: views_filter
+  mapping:
+    value:
+      type: boolean
+
+views_filter_boolean_string:
+  type: views_filter_boolean
+
+views.filter.broken:
+  type: views_filter
+  label: 'Broken'
+
+views.filter.bundle:
+  type: views.filter.in_operator
+  label: 'Broken'
+
+views.filter.combine:
+  type: views.filter.string
+  label: 'Combine'
+
+views.filter.date:
+  type: views.filter.numeric
+  label: 'Date'
+
+views.filter.in_operator:
+  type: views_filter
+  label: 'IN operartor'
+  mapping:
+    operator:
+      type: string
+      label: 'Operator'
+    value:
+      type: sequence
+      label: 'Values'
+      sequence:
+        - type: string
+          label: 'Value'
+    expose:
+      type: mapping
+      label: 'Expose'
+      mapping:
+        reduce:
+          type: boolean
+          label: 'Reduce'
+
+views.filter.string:
+  type: views_filter
+  label: 'String'
+  mapping:
+    expose:
+      type: mapping
+      label: 'Exposed'
+      mapping:
+        required:
+          type: boolean
+          label: 'Required'
+
+views.filter.numeric:
+  type: views_filter
+  label: 'Numeric'
+  mapping:
+    value:
+      type: mapping
+      label: 'Operator'
+      mapping:
+        min:
+          type: string
+          label: 'Min'
+        max:
+          type: string
+          label: 'And max'
+        value:
+          type: string
+          label: 'Value'
+        type:
+          type: string
+          label: 'Value type'
+
+views.filter.equality:
+  type: views.filter.numeric
+  label: 'Broken'
+
+views.filter.many_to_one:
+  type: views.filter.in_operator
+  label: 'Many to one'
+  mapping:
+    operator:
+      type: string
+      label: 'Operator'
+    value:
+      type: sequence
+      label: 'Values'
+      sequence:
+        - type: string
+          label: 'Value'
+
+views.filter.group_items.string:
+  type: sequence
+  label: 'Group items'
+  sequence:
+    - type: mapping
+      label: 'Group item'
+      mapping:
+        title:
+          type: label
+          label: 'Label'
+        operator:
+          type: string
+          label: 'Operator'
+        value:
+          type: label
+          label: 'Value'
diff --git a/core/modules/views/config/schema/views.filter_value.schema.yml b/core/modules/views/config/schema/views.filter_value.schema.yml
new file mode 100644
index 0000000..a59fc46
--- /dev/null
+++ b/core/modules/views/config/schema/views.filter_value.schema.yml
@@ -0,0 +1,5 @@
+# Schema for the views filter value.
+
+views.filter_value.boolean:
+  type: boolean
+  label: 'value'
diff --git a/core/modules/views/config/schema/views.pager.schema.yml b/core/modules/views/config/schema/views.pager.schema.yml
new file mode 100644
index 0000000..4d171df
--- /dev/null
+++ b/core/modules/views/config/schema/views.pager.schema.yml
@@ -0,0 +1,36 @@
+# Schema for the views pager plugins.
+
+views.pager.*:
+  type: views_pager
+  label: 'Default pager'
+
+views.pager.none:
+  type: views_pager
+  label: 'Display all items'
+
+views.pager.some:
+  type: views_pager
+  label: 'Display a specified number of items'
+  mapping:
+    items_per_page:
+      type: integer
+      label: 'Items per page'
+
+views.pager.mini:
+  type: views_pager_sql
+  label: 'Paged output, mini pager'
+
+views.pager.full:
+  type: views_pager_sql
+  label: 'Paged output, full pager'
+  mapping:
+    tags:
+      type: mapping
+      label: 'Tags'
+      mapping:
+        first:
+          type: label
+          label: 'First page link text'
+        last:
+          type: label
+          label: 'Last page link text'
diff --git a/core/modules/views/config/schema/views.query.schema.yml b/core/modules/views/config/schema/views.query.schema.yml
new file mode 100644
index 0000000..47a4461
--- /dev/null
+++ b/core/modules/views/config/schema/views.query.schema.yml
@@ -0,0 +1,5 @@
+# Schema for the views query.
+
+views.query.views_query:
+  type: views_query
+  label: 'Views query'
diff --git a/core/modules/views/config/schema/views.relationship.schema.yml b/core/modules/views/config/schema/views.relationship.schema.yml
new file mode 100644
index 0000000..3629aa5
--- /dev/null
+++ b/core/modules/views/config/schema/views.relationship.schema.yml
@@ -0,0 +1,5 @@
+# Schema for the views relationship.
+
+views.relationship.standard:
+  type: views_relationship
+  label: 'Standard'
diff --git a/core/modules/views/config/schema/views.row.schema.yml b/core/modules/views/config/schema/views.row.schema.yml
new file mode 100644
index 0000000..0f20dc0
--- /dev/null
+++ b/core/modules/views/config/schema/views.row.schema.yml
@@ -0,0 +1,21 @@
+# Schema for the views row.
+
+views.row.fields:
+  type: mapping
+  label: 'Field options'
+  mapping:
+    default_field_elements:
+      type: string
+      label: 'Provide default field wrapper elements'
+    inline:
+      type: sequence
+      label: 'Inline'
+      sequence:
+        - type: string
+          label: 'Inline'
+    separator:
+      type: string
+      label: 'Separator'
+    hide_empty:
+      type: boolean
+      label: 'Hide empty'
diff --git a/core/modules/views/config/schema/views.schema.yml b/core/modules/views/config/schema/views.schema.yml
index 74bab51..6d49733 100644
--- a/core/modules/views/config/schema/views.schema.yml
+++ b/core/modules/views/config/schema/views.schema.yml
@@ -1,4 +1,5 @@
-# View definition (multiple)
+# Schema for the configuration files of the Views module.
+
 views.view.*:
   type: mapping
   label: 'View'
@@ -21,7 +22,7 @@ views.view.*:
       label: 'Base table'
     base_field:
       label: 'Base field'
-    label:
+    human_name:
       type: label
       label: 'Human readable name'
     core:
@@ -46,190 +47,4 @@ views.view.*:
               type: integer
               label: 'Position'
             display_options:
-              type: 'views.display.[%parent.display_plugin]'
-    langcode:
-      type: string
-      label: 'Default language'
-
-# Views display: common
-# Options for Drupal\views\Plugin\views\display\DisplayPluginBase
-views.display.*:
-  type: mapping
-  label: 'Display options'
-  mapping:
-    title:
-      type: text
-      label: 'Display title'
-    format:
-      label: 'Format'
-    fields:
-      type: sequence
-      label: 'Fields'
-      sequence:
-        - type: 'views.field.[table]-[field]'
-    pager:
-      type: mapping
-      label: 'Pager'
-      mapping:
-        type:
-          label: 'Pager type'
-        options:
-          type: mapping
-          label: 'Options'
-          mapping:
-            offset:
-              type: integer
-              label: 'Offset'
-
-    exposed_form:
-      type: mapping
-      label: 'Exposed form'
-      mapping:
-        type:
-          label: 'Exposed form type'
-    access:
-      type: mapping
-      label: 'Access'
-      mapping:
-        type:
-          label: 'Access type'
-    other:
-      label: 'Other'
-    cache:
-      type: mapping
-      label: 'Cache'
-      mapping:
-        type:
-          label: 'Cache type'
-    sorts:
-      type: sequence
-      label: 'Sorts'
-      sequence:
-        - type: 'views.sort.[table]-[field]'
-    arguments:
-      type: sequence
-      label: 'Arguments'
-      sequence:
-        - type: 'views.argument.[table]-[field]'
-    filters:
-      type: sequence
-      label: 'Filters'
-      sequence:
-        - type: 'views.filter.[table]-[field]'
-    style:
-      type: mapping
-      label: 'Style'
-      mapping:
-        type:
-          label: 'Type'
-    row:
-      type: mapping
-      label: 'Row'
-      mapping:
-        type:
-          label: 'Row type'
-        options:
-          include: 'views.row.[%parent.type]'
-    query:
-      type: mapping
-      label: 'Query'
-      mapping:
-        type:
-          label: 'Query type'
-        options:
-          type: mapping
-          label: 'Query options'
-          mapping:
-            query_comment:
-              type: boolean
-              label: 'Query comment'
-    defaults:
-      type: mapping
-      label: 'Defaults'
-      mapping:
-        style_plugin:
-          label: 'Style plugin'
-        style_options:
-          type: 'views.style.[%parent.style_plugin]'
-        row_plugin:
-          label: 'Row plugin'
-        row_options:
-          type: 'views.style.[%parent.row_plugin]'
-    relationships:
-      type: sequence
-      label: 'Relationships'
-      sequence:
-        - type: 'views.relationship.[table]-[field]'
-
-# Options for Drupal\views\Plugin\views\display\PathPluginBase
-views.display.PathPluginBase:
-  include: 'views.display.%'
-  type: mapping
-  mapping:
-    path:
-      type: string
-      label: 'Page path'
-
-# Views display plugin: Drupal\views\Plugin\views\display\Page
-views.display.page:
-  type: 'views.display.PathPluginBase'
-  label: 'Page display options'
-  mapping:
-    menu:
-      type: mapping
-      label: 'Menu'
-      mapping:
-        type:
-          label: 'Type'
-        title:
-          type: text
-          label: 'Title'
-        description:
-          type: text
-          label: 'Description'
-        weight:
-          type: integer
-          label: 'Weight'
-        name:
-          label: 'Menu name'
-        context:
-          label: 'Context'
-    tab_options:
-      type: mapping
-      label: 'Tab options'
-      mapping:
-        type:
-          label: 'Type'
-        title:
-          type: text
-          label: 'Title'
-        description:
-          type: text
-          label: 'Description'
-        weight:
-          type: integer
-          label: 'Weight'
-        name:
-          label: 'Menu name'
-
-# Views display plugin: Drupal\views\Plugin\views\display\Block
-views.display.block:
-  type: 'views.display.%'
-  label: 'Block display options'
-  mapping:
-    block_description:
-      type: text
-      label: 'Block name'
-    block_caching:
-      label: 'Block caching'
-
-# Views display plugin: Drupal\views\Plugin\views\display\Feed
-views.display.feed:
-  type: 'views.display.PathPluginBase'
-  label: 'Feed display options'
-  mapping:
-    sitename_title:
-      type: boolean
-      label: 'Use the site name for the title'
-    displays:
-      label: 'The feed icon will be available only to the selected displays.'
+              type: views.display.[%parent.display_plugin]
diff --git a/core/modules/views/config/schema/views.sort.schema.yml b/core/modules/views/config/schema/views.sort.schema.yml
new file mode 100644
index 0000000..76a3f5a
--- /dev/null
+++ b/core/modules/views/config/schema/views.sort.schema.yml
@@ -0,0 +1,13 @@
+# Schema for the views sort plugins.
+
+views.sort.*:
+  type: views_sort
+  label: 'Default sort'
+
+views.sort.boolean:
+  type: views_sort
+  label: 'Boolean sort'
+
+views.sort.date:
+  type: views_sort
+  label: 'Date sort'
diff --git a/core/modules/views/config/schema/views.sort_expose.schema.yml b/core/modules/views/config/schema/views.sort_expose.schema.yml
new file mode 100644
index 0000000..57a8e70
--- /dev/null
+++ b/core/modules/views/config/schema/views.sort_expose.schema.yml
@@ -0,0 +1,8 @@
+# Schema for the views sort expose.
+
+views.sort_expose.boolean:
+  type: mapping
+  mapping:
+    label:
+      type: label
+      label: 'Label'
diff --git a/core/modules/views/config/schema/views.style.schema.yml b/core/modules/views/config/schema/views.style.schema.yml
new file mode 100644
index 0000000..b8b8899
--- /dev/null
+++ b/core/modules/views/config/schema/views.style.schema.yml
@@ -0,0 +1,112 @@
+# Schema for the views style plugins.
+
+views.style.*:
+  type: views_style
+  label: 'Default style'
+
+views.style.default:
+  type: views_style
+  label: 'Unformatted list'
+
+views.style.html_list:
+  type: views_style
+  label: 'HTML List'
+  mapping:
+    type:
+      type:  string
+      label: 'List type'
+    wrapper_class:
+      type: string
+      label: 'Wrapper class'
+    class:
+      type: string
+      label: 'List class'
+
+views.style.grid:
+  type: views_style
+  label: 'Grid'
+  mapping:
+    columns:
+      type:  integer
+      label: 'Number of columns'
+    alignment:
+      type: string
+      label: 'Alignment'
+    fill_single_line:
+      type: boolean
+      label: 'Fill up single line'
+    summary:
+      type: string
+      label: 'Table summary'
+
+views.style.table:
+  type: views_style
+  label: 'Table'
+  mapping:
+    columns:
+      type: sequence
+      label: 'Columns'
+      sequence:
+        - type: string
+          label: 'Columns name'
+    default:
+      type: string
+      label: 'Default sort'
+    info:
+      type: sequence
+      label: 'Columns info'
+      sequence:
+        - type: mapping
+          label:  'Column info'
+          mapping:
+            sortable:
+              type: boolean
+              label: 'Sortable'
+            default_sort_order:
+              type: string
+              label: 'Default order'
+            align:
+              type: string
+              label: 'Align'
+            separator:
+              type: string
+              label: 'Seprator'
+            empty_column:
+              type: boolean
+              label: 'Hide empty columns'
+            responsive:
+              type: string
+              label: 'Responsive'
+    override:
+      type: boolean
+      label: 'Override normal sorting if click sorting is used'
+    sticky:
+      type: boolean
+      label: 'Enable Drupal style "sticky" table headers (Javascript)'
+    summary:
+      type: label
+      label: 'Table summary'
+    order:
+      type: string
+      label: 'Default order'
+    empty_table:
+      type: boolean
+      label: 'Show the empty text in the table'
+
+
+views.style.default_summary:
+  type: mapping
+  label: 'Summary options'
+  mapping:
+    base_path:
+      type: string
+      label: 'Base path'
+    count:
+      type: boolean
+      label: 'Display record count with link'
+    override:
+      type: boolean
+      label: 'Override number of items to display'
+    items_per_page:
+      type: integer
+      label: 'Items to display'
