You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/02/28 13:30:28 UTC

[causeway] 03/03: CAUSEWAY-3354 : makes old layout files available also

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit b14291ce184b85f3864ddfb3cb6b41c734614aeb
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Feb 28 13:30:08 2023 +0000

    CAUSEWAY-3354 : makes old layout files available also
---
 .../ROOT/pages/2023/2.0.0-RC1/mignotes.adoc        |  65 +++++-
 .../applib/layout-v1/component/component.xsd       | 218 +++++++++++++++++++++
 .../layout-v1/grid/bootstrap3/bootstrap3.xsd       | 167 ++++++++++++++++
 .../applib/layout-v1/links/links.xsd               |  26 +++
 .../layout-v1/menubars/bootstrap3/menubars.xsd     |  61 ++++++
 5 files changed, 536 insertions(+), 1 deletion(-)

diff --git a/antora/components/relnotes/modules/ROOT/pages/2023/2.0.0-RC1/mignotes.adoc b/antora/components/relnotes/modules/ROOT/pages/2023/2.0.0-RC1/mignotes.adoc
index bc4152a879..d9ebe96071 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2023/2.0.0-RC1/mignotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2023/2.0.0-RC1/mignotes.adoc
@@ -22,9 +22,72 @@ The namespace and location of XSDs has changed:
 
 Note the change from `http` to `https`.
 
+To update your app:
+
+* the `menubars.layout.xml` should now declare the following namespaces and locations:
++
+[source,xml]
+.menubars.layout.xml
+----
+<mb3:menuBars
+        xsi:schemaLocation="https://causeway.apache.org/applib/layout/menubars/bootstrap3 https://causeway.apache.org/applib/layout/menubars/bootstrap3/menubars.xsd https://causeway.apache.org/applib/layout/component https://causeway.apache.org/applib/layout/component/component.xsd"
+        xmlns:mb3="https://causeway.apache.org/applib/layout/menubars/bootstrap3"
+        xmlns:cpt="https://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    ...
+</mb3:menuBars>
+----
+
+* while any `Xxx.layout.xml` files (for `Xxx` domain object) should declare:
++
+[source,xml]
+.Xxx.layout.xml
+----
+<bs3:grid
+        xsi:schemaLocation="https://causeway.apache.org/applib/layout/component https://causeway.apache.org/applib/layout/component/component.xsd https://causeway.apache.org/applib/layout/grid/bootstrap3 https://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="https://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="https://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    ...
+</bs3:grid>
+----
+
+
+If you are still using the "isis" artifacts, then the old schemas are still available, but have moved to the `layout-v1` directory.
+Adjust the locations in your `.layout.xml` files accordingly:
+
+* the `menubars.layout.xml` should now declare the following locations (namespace unchanged):
++
+[source,xml]
+.menubars.layout.xml
+----
+<mb3:menuBars
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/menubars/bootstrap3 https://causeway.apache.org/applib/layout-v1/menubars/bootstrap3/menubars.xsd http://isis.apache.org/applib/layout/component https://causeway.apache.org/applib/layout-v1/component/component.xsd"
+        xmlns:mb3="http://isis.apache.org/applib/layout/menubars/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    ...
+</mb3:menuBars>
+----
+
+* while any `Xxx.layout.xml` files (for `Xxx` domain object) should declare:
++
+[source,xml]
+.Xxx.layout.xml
+----
+<bs3:grid
+        xsi:schemaLocation="http://isis.apache.org/applib/layout/component https://causeway.apache.org/applib/layout-v1/component/component.xsd http://isis.apache.org/applib/layout/grid/bootstrap3 https://causeway.apache.org/applib/layout-v1/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    ...
+</bs3:grid>
+----
+
 == Configuration
 
-The following changed:
+The following configuration properties have been changed:
+
 [cols="2a,3a", options="header"]
 
 |===
diff --git a/antora/supplemental-ui/applib/layout-v1/component/component.xsd b/antora/supplemental-ui/applib/layout-v1/component/component.xsd
new file mode 100644
index 0000000000..306880d918
--- /dev/null
+++ b/antora/supplemental-ui/applib/layout-v1/component/component.xsd
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           xmlns:lnk="http://isis.apache.org/applib/layout/links"
+           xmlns:tns="http://isis.apache.org/applib/layout/component"
+           elementFormDefault="qualified"
+           targetNamespace="http://isis.apache.org/applib/layout/component"
+           version="1.0">
+
+  <xs:import
+          namespace="http://isis.apache.org/applib/layout/links"
+          schemaLocation="../links/links.xsd"/>
+
+  <xs:element name="action" type="tns:action"/>
+
+  <xs:element name="collection" type="tns:collection"/>
+
+  <xs:element name="domainObject" type="tns:domainObject"/>
+
+  <xs:element name="fieldSet" type="tns:fieldSet"/>
+
+  <xs:element name="serviceAction" type="tns:serviceAction"/>
+
+  <xs:element name="property" type="tns:property"/>
+
+  <xs:complexType name="domainObject">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="named" type="xs:string"/>
+      <xs:element minOccurs="0" name="describedAs" type="xs:string"/>
+      <xs:element minOccurs="0" name="plural" type="xs:string"/>
+      <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+      <xs:element minOccurs="0" name="link" type="lnk:link"/>
+    </xs:sequence>
+    <xs:attribute name="bookmarking" type="tns:bookmarkPolicy"/>
+    <xs:attribute name="cssClass" type="xs:string"/>
+    <xs:attribute name="cssClassFa" type="xs:string"/>
+    <xs:attribute name="cssClassFaPosition" type="tns:cssClassFaPosition"/>
+    <xs:attribute name="namedEscaped" type="xs:boolean"/>
+    <xs:attribute name="tableDecoration" type="tns:tableDecoration"/>
+  </xs:complexType>
+
+  <xs:complexType name="action">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="named" type="xs:string"/>
+      <xs:element minOccurs="0" name="describedAs" type="xs:string"/>
+      <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+      <xs:element minOccurs="0" name="link" type="lnk:link"/>
+    </xs:sequence>
+    <xs:attribute name="bookmarking" type="tns:bookmarkPolicy"/>
+    <xs:attribute name="cssClass" type="xs:string"/>
+    <xs:attribute name="cssClassFa" type="xs:string"/>
+    <xs:attribute name="cssClassFaPosition" type="tns:cssClassFaPosition"/>
+    <xs:attribute name="hidden" type="tns:where"/>
+    <xs:attribute name="id" type="xs:string" use="required"/>
+    <xs:attribute name="namedEscaped" type="xs:boolean"/>
+    <xs:attribute name="position" type="tns:position"/>
+    <xs:attribute name="promptStyle" type="tns:promptStyle"/>
+    <xs:attribute name="redirect" type="tns:redirect"/>
+  </xs:complexType>
+
+  <xs:complexType name="serviceAction">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="named" type="xs:string"/>
+      <xs:element minOccurs="0" name="describedAs" type="xs:string"/>
+      <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+      <xs:element minOccurs="0" name="link" type="lnk:link"/>
+    </xs:sequence>
+    <xs:attribute name="objectType" type="xs:string" use="required"/>
+    <xs:attribute name="id" type="xs:string" use="required"/>
+    <xs:attribute name="namedEscaped" type="xs:boolean"/>
+    <xs:attribute name="bookmarking" type="tns:bookmarkPolicy"/>
+    <xs:attribute name="cssClass" type="xs:string"/>
+    <xs:attribute name="cssClassFa" type="xs:string"/>
+  </xs:complexType>
+
+  <xs:complexType name="fieldSet">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:action"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:property"/>
+      <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+    </xs:sequence>
+    <xs:attribute name="name" type="xs:string"/>
+    <xs:attribute name="id" type="xs:string"/>
+    <xs:attribute name="unreferencedActions" type="xs:boolean"/>
+    <xs:attribute name="unreferencedProperties" type="xs:boolean"/>
+  </xs:complexType>
+
+  <xs:complexType name="property">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="named" type="xs:string"/>
+      <xs:element minOccurs="0" name="describedAs" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:action"/>
+      <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+      <xs:element minOccurs="0" name="link" type="lnk:link"/>
+    </xs:sequence>
+    <xs:attribute name="cssClass" type="xs:string"/>
+    <xs:attribute name="hidden" type="tns:where"/>
+    <xs:attribute name="id" type="xs:string" use="required"/>
+    <xs:attribute name="labelPosition" type="tns:labelPosition"/>
+    <xs:attribute name="multiLine" type="xs:int"/>
+    <xs:attribute name="namedEscaped" type="xs:boolean"/>
+    <xs:attribute name="promptStyle" type="tns:promptStyle"/>
+    <xs:attribute name="renderedAsDayBefore" type="xs:boolean"/>
+    <xs:attribute name="typicalLength" type="xs:int"/>
+    <xs:attribute name="repainting" type="xs:boolean"/>
+  </xs:complexType>
+
+  <xs:complexType name="collection">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="named" type="xs:string"/>
+      <xs:element minOccurs="0" name="describedAs" type="xs:string"/>
+      <xs:element minOccurs="0" name="sortedBy" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:action"/>
+      <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+      <xs:element minOccurs="0" name="link" type="lnk:link"/>
+    </xs:sequence>
+    <xs:attribute name="cssClass" type="xs:string"/>
+    <xs:attribute name="defaultView" type="xs:string"/>
+    <xs:attribute name="hidden" type="tns:where"/>
+    <xs:attribute name="id" type="xs:string" use="required"/>
+    <xs:attribute name="namedEscaped" type="xs:boolean"/>
+    <xs:attribute name="paged" type="xs:int"/>
+    <xs:attribute name="tableDecoration" type="tns:tableDecoration"/>
+  </xs:complexType>
+
+
+  <xs:simpleType name="bookmarkPolicy">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="AS_ROOT"/>
+      <xs:enumeration value="AS_CHILD"/>
+      <xs:enumeration value="NEVER"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="cssClassFaPosition">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="LEFT"/>
+      <xs:enumeration value="RIGHT"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="where">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="EVERYWHERE"/>
+      <xs:enumeration value="ANYWHERE"/>
+      <xs:enumeration value="OBJECT_FORMS"/>
+      <xs:enumeration value="REFERENCES_PARENT"/>
+      <xs:enumeration value="PARENTED_TABLES"/>
+      <xs:enumeration value="STANDALONE_TABLES"/>
+      <xs:enumeration value="ALL_TABLES"/>
+      <xs:enumeration value="ALL_EXCEPT_STANDALONE_TABLES"/>
+      <xs:enumeration value="NOWHERE"/>
+      <xs:enumeration value="NOT_SPECIFIED"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="position">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="BELOW"/>
+      <xs:enumeration value="RIGHT"/>
+      <xs:enumeration value="PANEL"/>
+      <xs:enumeration value="PANEL_DROPDOWN"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="promptStyle">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="AS_CONFIGURED"/>
+      <xs:enumeration value="DIALOG"/>
+      <xs:enumeration value="DIALOG_SIDEBAR"/>
+      <xs:enumeration value="DIALOG_MODAL"/>
+      <xs:enumeration value="INLINE"/>
+      <xs:enumeration value="INLINE_AS_IF_EDIT"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="redirect">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="AS_CONFIGURED"/>
+      <xs:enumeration value="EVEN_IF_SAME"/>
+      <xs:enumeration value="ONLY_IF_DIFFERS"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="labelPosition">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="DEFAULT"/>
+      <xs:enumeration value="LEFT"/>
+      <xs:enumeration value="RIGHT"/>
+      <xs:enumeration value="TOP"/>
+      <xs:enumeration value="NONE"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="tableDecoration">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="NONE"/>
+      <xs:enumeration value="DATATABLES_NET"/>
+    </xs:restriction>
+  </xs:simpleType>
+
+  <xs:simpleType name="repainting">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="REPAINT"/>
+      <xs:enumeration value="NO_REPAINT"/>
+      <xs:enumeration value="NOT_SPECIFIED"/>
+    </xs:restriction>
+  </xs:simpleType>
+</xs:schema>
diff --git a/antora/supplemental-ui/applib/layout-v1/grid/bootstrap3/bootstrap3.xsd b/antora/supplemental-ui/applib/layout-v1/grid/bootstrap3/bootstrap3.xsd
new file mode 100644
index 0000000000..8380f737d0
--- /dev/null
+++ b/antora/supplemental-ui/applib/layout-v1/grid/bootstrap3/bootstrap3.xsd
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<xs:schema
+        xmlns:xs="http://www.w3.org/2001/XMLSchema"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:tns="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        elementFormDefault="qualified"
+        targetNamespace="http://isis.apache.org/applib/layout/grid/bootstrap3"
+        version="1.0">
+
+    <xs:import
+            namespace="http://isis.apache.org/applib/layout/component"
+            schemaLocation="../../component/component.xsd"/>
+
+    <xs:import
+            namespace="http://isis.apache.org/applib/layout/links"
+            schemaLocation="../../links/links.xsd"/>
+
+    <xs:element name="clearFixHidden" type="tns:clearFixHidden"/>
+
+    <xs:element name="clearFixVisible" type="tns:clearFixVisible"/>
+
+    <xs:element name="col" type="tns:col"/>
+
+    <xs:element name="grid" type="tns:grid"/>
+
+    <xs:complexType name="grid">
+        <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="row" type="tns:row"/>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="metadataError" type="xs:string"/>
+        </xs:sequence>
+        <xs:attribute name="cssClass" type="xs:string"/>
+    </xs:complexType>
+
+    <xs:complexType name="row">
+        <xs:complexContent>
+            <xs:extension base="tns:bs3ElementAbstract">
+                <xs:sequence>
+                    <xs:choice maxOccurs="unbounded" minOccurs="0">
+                        <xs:element ref="tns:col"/>
+                        <xs:element ref="tns:clearFixVisible"/>
+                        <xs:element ref="tns:clearFixHidden"/>
+                    </xs:choice>
+                    <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+                </xs:sequence>
+                <xs:attribute name="id" type="xs:string"/>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:complexType abstract="true" name="bs3ElementAbstract">
+        <xs:sequence/>
+        <xs:attribute name="cssClass" type="xs:string"/>
+    </xs:complexType>
+
+    <xs:complexType name="col">
+        <xs:complexContent>
+            <xs:extension base="tns:bs3RowContent">
+                <xs:sequence>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="sizeSpan" type="tns:sizeSpan"/>
+                    <xs:element minOccurs="0" ref="cpt:domainObject"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" ref="cpt:action"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="row" type="tns:row"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="tabGroup" type="tns:tabGroup"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" ref="cpt:fieldSet"/>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" ref="cpt:collection"/>
+                    <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+                </xs:sequence>
+                <xs:attribute name="id" type="xs:string"/>
+                <xs:attribute name="span" type="xs:int" use="required"/>
+                <xs:attribute name="unreferencedActions" type="xs:boolean"/>
+                <xs:attribute name="unreferencedCollections" type="xs:boolean"/>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:complexType abstract="true" name="bs3RowContent">
+        <xs:complexContent>
+            <xs:extension base="tns:bs3ElementAbstract">
+                <xs:sequence/>
+                <xs:attribute name="size" type="tns:size"/>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:complexType name="sizeSpan">
+        <xs:all/>
+        <xs:attribute name="offset" type="xs:boolean"/>
+        <xs:attribute name="size" type="tns:size" use="required"/>
+        <xs:attribute name="span" type="xs:int" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="tabGroup">
+        <xs:complexContent>
+            <xs:extension base="tns:bs3ElementAbstract">
+                <xs:sequence>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="tab" type="tns:tab"/>
+                    <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+                </xs:sequence>
+                <xs:attribute name="collapseIfOne" type="xs:boolean"/>
+                <xs:attribute name="unreferencedCollections" type="xs:boolean"/>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:complexType name="tab">
+        <xs:complexContent>
+            <xs:extension base="tns:bs3ElementAbstract">
+                <xs:sequence>
+                    <xs:element maxOccurs="unbounded" name="row" type="tns:row"/>
+                </xs:sequence>
+                <xs:attribute name="name" type="xs:string" use="required"/>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:complexType name="clearFixVisible">
+        <xs:complexContent>
+            <xs:extension base="tns:bs3ClearFix">
+                <xs:sequence/>
+                <xs:attribute name="cssDisplay" type="tns:cssDisplay" use="required"/>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:complexType abstract="true" name="bs3ClearFix">
+        <xs:complexContent>
+            <xs:extension base="tns:bs3RowContent">
+                <xs:sequence/>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:complexType name="clearFixHidden">
+        <xs:complexContent>
+            <xs:extension base="tns:bs3ClearFix">
+                <xs:sequence/>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+
+    <xs:simpleType name="size">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="XS"/>
+            <xs:enumeration value="SM"/>
+            <xs:enumeration value="MD"/>
+            <xs:enumeration value="LG"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="cssDisplay">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="BLOCK"/>
+            <xs:enumeration value="INLINE"/>
+            <xs:enumeration value="INLINE_BLOCK"/>
+        </xs:restriction>
+    </xs:simpleType>
+</xs:schema>
diff --git a/antora/supplemental-ui/applib/layout-v1/links/links.xsd b/antora/supplemental-ui/applib/layout-v1/links/links.xsd
new file mode 100644
index 0000000000..fe5d1f1ab9
--- /dev/null
+++ b/antora/supplemental-ui/applib/layout-v1/links/links.xsd
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<xs:schema
+        xmlns:xs="http://www.w3.org/2001/XMLSchema"
+        elementFormDefault="qualified"
+        targetNamespace="http://isis.apache.org/applib/layout/links"
+        version="1.0">
+
+    <xs:complexType name="link">
+        <xs:sequence>
+            <xs:element name="rel" type="xs:string"/>
+            <xs:element name="method" type="xs:string"/>
+            <xs:element name="href" type="xs:string"/>
+            <xs:element name="type" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+</xs:schema>
diff --git a/antora/supplemental-ui/applib/layout-v1/menubars/bootstrap3/menubars.xsd b/antora/supplemental-ui/applib/layout-v1/menubars/bootstrap3/menubars.xsd
new file mode 100644
index 0000000000..a9f52ecee1
--- /dev/null
+++ b/antora/supplemental-ui/applib/layout-v1/menubars/bootstrap3/menubars.xsd
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<xs:schema
+        xmlns:xs="http://www.w3.org/2001/XMLSchema"
+        xmlns:mb3="http://isis.apache.org/applib/layout/menubars/bootstrap3"
+        xmlns:cpt="http://isis.apache.org/applib/layout/component"
+        xmlns:lnk="http://isis.apache.org/applib/layout/links"
+        xmlns:tns="http://isis.apache.org/applib/layout/menubars/bootstrap3"
+        elementFormDefault="qualified"
+        targetNamespace="http://isis.apache.org/applib/layout/menubars/bootstrap3" version="1.0">
+
+    <xs:import
+            namespace="http://isis.apache.org/applib/layout/component"
+            schemaLocation="../../component/component.xsd"/>
+
+    <xs:import
+            namespace="http://isis.apache.org/applib/layout/links"
+            schemaLocation="../../links/links.xsd"/>
+
+    <xs:element name="menuBars" type="tns:menuBars"/>
+
+    <xs:complexType name="menuBars">
+        <xs:sequence>
+            <xs:element minOccurs="0" name="primary" type="tns:menuBar"/>
+            <xs:element minOccurs="0" name="secondary" type="tns:menuBar"/>
+            <xs:element minOccurs="0" name="tertiary" type="tns:menuBar"/>
+            <xs:element minOccurs="0" name="metadataError" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="menuBar">
+        <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="menu" type="tns:menu"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="menu">
+        <xs:sequence>
+            <xs:element name="named" type="xs:string"/>
+            <xs:element minOccurs="0" maxOccurs="unbounded" name="section" type="tns:section"/>
+        </xs:sequence>
+        <xs:attribute name="cssClassFa" type="xs:string"/>
+        <xs:attribute name="unreferencedActions" type="xs:boolean"/>
+    </xs:complexType>
+
+    <xs:complexType name="section">
+        <xs:sequence>
+			<xs:element minOccurs="0" maxOccurs="1" name="named" type="xs:string"/>
+            <xs:element maxOccurs="unbounded" name="serviceAction" type="cpt:serviceAction"/>
+        </xs:sequence>
+    </xs:complexType>
+</xs:schema>