xsd/karaf-features-processing-1.0.0.xsd (189 lines of code) (raw):

<?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>