You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2020/03/26 13:44:51 UTC

svn commit: r1875709 - in /karaf/site/production: xmlns/features-processing/ xmlns/features-processing/v1.0.0 xsd/karaf-features-processing-1.0.0.xsd

Author: jbonofre
Date: Thu Mar 26 13:44:50 2020
New Revision: 1875709

URL: http://svn.apache.org/viewvc?rev=1875709&view=rev
Log:
[scm-publish] Updating main website contents

Added:
    karaf/site/production/xmlns/features-processing/
    karaf/site/production/xmlns/features-processing/v1.0.0
    karaf/site/production/xsd/karaf-features-processing-1.0.0.xsd

Added: karaf/site/production/xmlns/features-processing/v1.0.0
URL: http://svn.apache.org/viewvc/karaf/site/production/xmlns/features-processing/v1.0.0?rev=1875709&view=auto
==============================================================================
--- karaf/site/production/xmlns/features-processing/v1.0.0 (added)
+++ karaf/site/production/xmlns/features-processing/v1.0.0 Thu Mar 26 13:44:50 2020
@@ -0,0 +1,232 @@
+<?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 elementFormDefault="qualified"
+        targetNamespace="http://karaf.apache.org/xmlns/features-processing/v1.0.0"
+        xmlns:tns="http://karaf.apache.org/xmlns/features-processing/v1.0.0"
+        xmlns:features="http://karaf.apache.org/xmlns/features/v1.6.0"
+        xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+    <xs:import namespace="http://karaf.apache.org/xmlns/features/v1.6.0" />
+
+    <xs:element name="featuresProcessing" type="tns:featuresProcessing" />
+
+    <xs:complexType name="featuresProcessing">
+        <xs:annotation>
+            <xs:documentation><![CDATA[Configuration of FeaturesProcessor that may modify feature definitions
+after reading them from features XML file and before using them by FeaturesService.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="blacklistedRepositories" type="tns:blacklistedRepositories" />
+            <xs:element name="blacklistedFeatures" type="tns:blacklistedFeatures" />
+            <xs:element name="blacklistedBundles" type="tns:blacklistedBundles" />
+            <xs:element name="overrideBundleDependency" type="tns:overrideBundleDependency" />
+            <xs:element name="bundleReplacements" type="tns:bundleReplacements" />
+            <xs:element name="featureReplacements" type="tns:featureReplacements" />
+        </xs:choice>
+    </xs:complexType>
+
+    <xs:complexType name="blacklistedRepositories">
+        <xs:annotation>
+            <xs:documentation><![CDATA[A list of feature repository URIs (e.g., mvn:group/artifact/version/xml/features)
+that should be blacklisted - they can't be added to FeaturesService and can't be searched for features to install.
+
+Repository URI should use 'mvn:' scheme, may use '*' glob (not RegExp) for all components except versions and
+version ranges as maven versions, e.g., "mvn:group/artifact/[3,5)/xml/*features*". At least groupId and artifactId
+should be specified. In most abstract case, "mvn:*/*" describes all maven URIs.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="repository" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="blacklistedFeatures">
+        <xs:annotation>
+            <xs:documentation><![CDATA[A list of feature identifiers that should be blacklisted.
+
+Attempt to install such feature will be prohibited, but such feature is still available in `feature:list`
+output and marked as blacklisted. When custom Karaf distribution is assembled, blacklisted features' bundles are not
+taken into account (are not declared in "etc/startup.properties" and "etc/org.apache.karaf.features.cfg" and are not
+copied to "system/" directory).
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="feature" type="tns:blacklistedFeature" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="blacklistedFeature">
+        <xs:annotation>
+            <xs:documentation><![CDATA[Blacklisted feature name may use '*' character as glob. "version" attribute
+MAY specify a version (or range) of features to blacklist, e.g.,:
+ * version="[1,2)" - feature with versions 1, 1.1, 1.4.3, 1.9.99, ... will be blacklisted
+ * version="[2,*)" - features with all versions above and including 2.0.0 will be blacklisted
+ * version="3.0" - feature with version 3.0 only will be blacklisted
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:simpleContent>
+            <xs:extension base="xs:string">
+                <xs:attribute name="version" type="xs:string" />
+            </xs:extension>
+        </xs:simpleContent>
+    </xs:complexType>
+
+    <xs:complexType name="blacklistedBundles">
+        <xs:annotation>
+            <xs:documentation><![CDATA[A list of bundle URIs that should be blacklisted.
+When feature is installed, all blacklisted bundles are skipped.
+
+When custom Karaf distribution is assembled, blacklisted bundles are not taken into account (are not declared in
+"etc/startup.properties" and are not copied to "system/" directory).
+
+Bundle URIs should use 'mvn:' scheme, may use '*' glob (not RegExp) for all components except versions and
+version ranges may be specified as maven versions, e.g., "mvn:group/artifact/[3,5)/type/classifier". At least
+groupId and artifactId should be specified. In most abstract case, "mvn:*/*" describes all maven URIs.
+
+This element may be used instead of "etc/blacklisted.properties" file for bundle blacklisting.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="bundle" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideBundleDependency">
+        <xs:annotation>
+            <xs:documentation><![CDATA[FeaturesService configuration uses "dependency" flags for bundles and features
+declared in features XML file. This flag instructs the service to consider such "dependency" item only if current
+state of system doesn't provide required capabilities. When such flag is chosen wisely it greatly improves consistency
+of installed features and bundles. However many external features XML files (which are out of control, or simply are no
+longer maintained) do not use this flag. With "overrideBundleDependency" element it's possible to externally
+override this flag for any repository, feature or particular bundles.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="repository" type="tns:overrideDependency" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="feature" type="tns:overrideFeatureDependency" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="bundle" type="tns:overrideDependency" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideDependency">
+        <xs:annotation>
+            <xs:documentation><![CDATA[An URI of depedency (bundle or repository) should use 'mvn:' scheme.
+Maven schemes allow parsing version/version ranges. "dependency" flag will overwrite dependency attribute of related
+features (in repository) and bundles.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="uri" type="xs:anyURI" />
+        <xs:attribute name="dependency" type="xs:boolean" default="false" />
+    </xs:complexType>
+
+    <xs:complexType name="overrideFeatureDependency">
+        <xs:annotation>
+            <xs:documentation><![CDATA[After matching feature by name (may use "*" glob) and version (or range), we
+can overwrite "dependency" attribute on given feature
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="name" type="xs:string" />
+        <xs:attribute name="version" type="xs:string" />
+        <xs:attribute name="dependency" type="xs:boolean" default="false" />
+    </xs:complexType>
+
+    <xs:complexType name="bundleReplacements">
+        <xs:annotation>
+            <xs:documentation><![CDATA[When feature is loaded from features XML file, "etc/overrides.properties" may
+be used to change the version of one/more of the bundles from given feature. Override is used only when symbolic
+names match. With bundleReplacements element, its possible to do the same and more. It's possible to replace a bundle
+with totally different bundle (in terms of OSGi's Symbolic-Name and Maven groupId/artifactId/version). That's useful
+especially with JavaEE API bundles, where single API may be provided by different bundles (ServiceMix, Geronimo,
+JBoss, javax.*, ...).
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="bundle" type="tns:overrideBundle" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideBundle">
+        <xs:annotation>
+            <xs:documentation><![CDATA[For each bundle of any feature we can point bundle's URI to different location.
+
+URIs should use 'mvn:' scheme, to allow version/version ranges parsing. Replacement URI should use concrete version
+- no range. Original URI may use version ranges to indicate which version is eligible for replacement. E.g,:
+ * mvn:groupId/artifactId/[1,2) - bundle location will be overriden for versions 1, 1.1, 1.4.3, 1.9.99, ...
+ * mvn:groupId/artifactId/[2,*) - bundle location will be overriden for version 2.0, 3.1, 4.2, ...
+ * mvn:groupId/artifactId/3 - bundle location will be overriden for version 3 (3.0, 3.0.0) only (i.e., [3.0.0,3.0.0]
+URIs can't use globs for Maven components (groupId, artifactId, ...).
+
+mode="osgi" is used for etc/overrides.properties compatibility - symbolic name should be equal (requires
+resource's/bundle's manifest parsing) and target/replacement bundle's version shold be lower to perform replacement.
+When reading etc/overrides.properties, groupId and artifactId will match anyway, but if configured in XML, they do
+not have to match.
+
+with mode="maven", only location matching is done and target version is not compared - this is useful
+to replace bundle using different groupId/artifactId. The most common case is e.g.,
+"org.eclipse.jetty.orbit/javax.servlet/[3,4)" -> "org.apache.geronimo.specs/geronimo-servlet_3.0_spec/1.0" replacement.
+This is new mode (comparing to etc/overrides.properties).
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="originalUri" type="xs:anyURI" />
+        <xs:attribute name="replacement" type="xs:anyURI" />
+        <xs:attribute name="mode" type="tns:bundleOverrideMode" default="osgi" />
+    </xs:complexType>
+
+    <xs:simpleType name="bundleOverrideMode">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="osgi" />
+            <xs:enumeration value="maven" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:complexType name="featureReplacements">
+        <xs:annotation>
+            <xs:documentation><![CDATA[This element may be used to completely "rewrite" any feature (by name and
+version). Depending on mode of modification (replace, merge) it's possible to replace any feature definition, or just
+add/remove some items (usually bundles) to/from original feature.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="replacement" type="tns:overrideFeature" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideFeature">
+        <xs:annotation>
+            <xs:documentation><![CDATA[Any feature may be "overriden" simply by including its changed definition
+according to http://karaf.apache.org/xmlns/features/v1.6.0 XML schema.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="feature" type="features:feature" />
+        </xs:sequence>
+        <xs:attribute name="mode" type="tns:featureOverrideMode" default="replace" />
+    </xs:complexType>
+
+    <xs:simpleType name="featureOverrideMode">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="replace" />
+            <xs:enumeration value="merge" />
+            <xs:enumeration value="remove" />
+        </xs:restriction>
+    </xs:simpleType>
+
+</xs:schema>

Added: karaf/site/production/xsd/karaf-features-processing-1.0.0.xsd
URL: http://svn.apache.org/viewvc/karaf/site/production/xsd/karaf-features-processing-1.0.0.xsd?rev=1875709&view=auto
==============================================================================
--- karaf/site/production/xsd/karaf-features-processing-1.0.0.xsd (added)
+++ karaf/site/production/xsd/karaf-features-processing-1.0.0.xsd Thu Mar 26 13:44:50 2020
@@ -0,0 +1,232 @@
+<?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 elementFormDefault="qualified"
+        targetNamespace="http://karaf.apache.org/xmlns/features-processing/v1.0.0"
+        xmlns:tns="http://karaf.apache.org/xmlns/features-processing/v1.0.0"
+        xmlns:features="http://karaf.apache.org/xmlns/features/v1.6.0"
+        xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+    <xs:import namespace="http://karaf.apache.org/xmlns/features/v1.6.0" />
+
+    <xs:element name="featuresProcessing" type="tns:featuresProcessing" />
+
+    <xs:complexType name="featuresProcessing">
+        <xs:annotation>
+            <xs:documentation><![CDATA[Configuration of FeaturesProcessor that may modify feature definitions
+after reading them from features XML file and before using them by FeaturesService.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="blacklistedRepositories" type="tns:blacklistedRepositories" />
+            <xs:element name="blacklistedFeatures" type="tns:blacklistedFeatures" />
+            <xs:element name="blacklistedBundles" type="tns:blacklistedBundles" />
+            <xs:element name="overrideBundleDependency" type="tns:overrideBundleDependency" />
+            <xs:element name="bundleReplacements" type="tns:bundleReplacements" />
+            <xs:element name="featureReplacements" type="tns:featureReplacements" />
+        </xs:choice>
+    </xs:complexType>
+
+    <xs:complexType name="blacklistedRepositories">
+        <xs:annotation>
+            <xs:documentation><![CDATA[A list of feature repository URIs (e.g., mvn:group/artifact/version/xml/features)
+that should be blacklisted - they can't be added to FeaturesService and can't be searched for features to install.
+
+Repository URI should use 'mvn:' scheme, may use '*' glob (not RegExp) for all components except versions and
+version ranges as maven versions, e.g., "mvn:group/artifact/[3,5)/xml/*features*". At least groupId and artifactId
+should be specified. In most abstract case, "mvn:*/*" describes all maven URIs.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="repository" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="blacklistedFeatures">
+        <xs:annotation>
+            <xs:documentation><![CDATA[A list of feature identifiers that should be blacklisted.
+
+Attempt to install such feature will be prohibited, but such feature is still available in `feature:list`
+output and marked as blacklisted. When custom Karaf distribution is assembled, blacklisted features' bundles are not
+taken into account (are not declared in "etc/startup.properties" and "etc/org.apache.karaf.features.cfg" and are not
+copied to "system/" directory).
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="feature" type="tns:blacklistedFeature" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="blacklistedFeature">
+        <xs:annotation>
+            <xs:documentation><![CDATA[Blacklisted feature name may use '*' character as glob. "version" attribute
+MAY specify a version (or range) of features to blacklist, e.g.,:
+ * version="[1,2)" - feature with versions 1, 1.1, 1.4.3, 1.9.99, ... will be blacklisted
+ * version="[2,*)" - features with all versions above and including 2.0.0 will be blacklisted
+ * version="3.0" - feature with version 3.0 only will be blacklisted
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:simpleContent>
+            <xs:extension base="xs:string">
+                <xs:attribute name="version" type="xs:string" />
+            </xs:extension>
+        </xs:simpleContent>
+    </xs:complexType>
+
+    <xs:complexType name="blacklistedBundles">
+        <xs:annotation>
+            <xs:documentation><![CDATA[A list of bundle URIs that should be blacklisted.
+When feature is installed, all blacklisted bundles are skipped.
+
+When custom Karaf distribution is assembled, blacklisted bundles are not taken into account (are not declared in
+"etc/startup.properties" and are not copied to "system/" directory).
+
+Bundle URIs should use 'mvn:' scheme, may use '*' glob (not RegExp) for all components except versions and
+version ranges may be specified as maven versions, e.g., "mvn:group/artifact/[3,5)/type/classifier". At least
+groupId and artifactId should be specified. In most abstract case, "mvn:*/*" describes all maven URIs.
+
+This element may be used instead of "etc/blacklisted.properties" file for bundle blacklisting.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="bundle" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideBundleDependency">
+        <xs:annotation>
+            <xs:documentation><![CDATA[FeaturesService configuration uses "dependency" flags for bundles and features
+declared in features XML file. This flag instructs the service to consider such "dependency" item only if current
+state of system doesn't provide required capabilities. When such flag is chosen wisely it greatly improves consistency
+of installed features and bundles. However many external features XML files (which are out of control, or simply are no
+longer maintained) do not use this flag. With "overrideBundleDependency" element it's possible to externally
+override this flag for any repository, feature or particular bundles.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="repository" type="tns:overrideDependency" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="feature" type="tns:overrideFeatureDependency" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="bundle" type="tns:overrideDependency" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideDependency">
+        <xs:annotation>
+            <xs:documentation><![CDATA[An URI of depedency (bundle or repository) should use 'mvn:' scheme.
+Maven schemes allow parsing version/version ranges. "dependency" flag will overwrite dependency attribute of related
+features (in repository) and bundles.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="uri" type="xs:anyURI" />
+        <xs:attribute name="dependency" type="xs:boolean" default="false" />
+    </xs:complexType>
+
+    <xs:complexType name="overrideFeatureDependency">
+        <xs:annotation>
+            <xs:documentation><![CDATA[After matching feature by name (may use "*" glob) and version (or range), we
+can overwrite "dependency" attribute on given feature
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="name" type="xs:string" />
+        <xs:attribute name="version" type="xs:string" />
+        <xs:attribute name="dependency" type="xs:boolean" default="false" />
+    </xs:complexType>
+
+    <xs:complexType name="bundleReplacements">
+        <xs:annotation>
+            <xs:documentation><![CDATA[When feature is loaded from features XML file, "etc/overrides.properties" may
+be used to change the version of one/more of the bundles from given feature. Override is used only when symbolic
+names match. With bundleReplacements element, its possible to do the same and more. It's possible to replace a bundle
+with totally different bundle (in terms of OSGi's Symbolic-Name and Maven groupId/artifactId/version). That's useful
+especially with JavaEE API bundles, where single API may be provided by different bundles (ServiceMix, Geronimo,
+JBoss, javax.*, ...).
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="bundle" type="tns:overrideBundle" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideBundle">
+        <xs:annotation>
+            <xs:documentation><![CDATA[For each bundle of any feature we can point bundle's URI to different location.
+
+URIs should use 'mvn:' scheme, to allow version/version ranges parsing. Replacement URI should use concrete version
+- no range. Original URI may use version ranges to indicate which version is eligible for replacement. E.g,:
+ * mvn:groupId/artifactId/[1,2) - bundle location will be overriden for versions 1, 1.1, 1.4.3, 1.9.99, ...
+ * mvn:groupId/artifactId/[2,*) - bundle location will be overriden for version 2.0, 3.1, 4.2, ...
+ * mvn:groupId/artifactId/3 - bundle location will be overriden for version 3 (3.0, 3.0.0) only (i.e., [3.0.0,3.0.0]
+URIs can't use globs for Maven components (groupId, artifactId, ...).
+
+mode="osgi" is used for etc/overrides.properties compatibility - symbolic name should be equal (requires
+resource's/bundle's manifest parsing) and target/replacement bundle's version shold be lower to perform replacement.
+When reading etc/overrides.properties, groupId and artifactId will match anyway, but if configured in XML, they do
+not have to match.
+
+with mode="maven", only location matching is done and target version is not compared - this is useful
+to replace bundle using different groupId/artifactId. The most common case is e.g.,
+"org.eclipse.jetty.orbit/javax.servlet/[3,4)" -> "org.apache.geronimo.specs/geronimo-servlet_3.0_spec/1.0" replacement.
+This is new mode (comparing to etc/overrides.properties).
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:attribute name="originalUri" type="xs:anyURI" />
+        <xs:attribute name="replacement" type="xs:anyURI" />
+        <xs:attribute name="mode" type="tns:bundleOverrideMode" default="osgi" />
+    </xs:complexType>
+
+    <xs:simpleType name="bundleOverrideMode">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="osgi" />
+            <xs:enumeration value="maven" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:complexType name="featureReplacements">
+        <xs:annotation>
+            <xs:documentation><![CDATA[This element may be used to completely "rewrite" any feature (by name and
+version). Depending on mode of modification (replace, merge) it's possible to replace any feature definition, or just
+add/remove some items (usually bundles) to/from original feature.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="replacement" type="tns:overrideFeature" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="overrideFeature">
+        <xs:annotation>
+            <xs:documentation><![CDATA[Any feature may be "overriden" simply by including its changed definition
+according to http://karaf.apache.org/xmlns/features/v1.6.0 XML schema.
+]]></xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="feature" type="features:feature" />
+        </xs:sequence>
+        <xs:attribute name="mode" type="tns:featureOverrideMode" default="replace" />
+    </xs:complexType>
+
+    <xs:simpleType name="featureOverrideMode">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="replace" />
+            <xs:enumeration value="merge" />
+            <xs:enumeration value="remove" />
+        </xs:restriction>
+    </xs:simpleType>
+
+</xs:schema>