blob: 5e1d45e3c708a98f41bb5e022c5599e84f2d0929 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0, which is available at
http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary
Licenses when the conditions for such availability set forth in the
Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
version 2 with the GNU Classpath Exception, which is available at
https://www.gnu.org/software/classpath/license.html.
SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-->
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<!-- allow 0 occurrences in many contexts to accommodate placeholders -->
<xsd:element name="stringsubs-definition" type="StringsubsDefinition">
<!-- the id attributes must be unique -->
<xsd:key name="componentKey">
<xsd:selector xpath="component"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:key name="groupKey">
<xsd:selector xpath="group"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:key name="changePairKey">
<xsd:selector xpath="change-pair"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:keyref name="group-ref" refer="groupKey">
<xsd:selector xpath="component/group-ref"/>
<xsd:field xpath="@name"/>
</xsd:keyref>
<xsd:keyref name="change-pair-ref" refer="changePairKey">
<xsd:selector xpath="group/change-pair-ref"/>
<xsd:field xpath="@name"/>
</xsd:keyref>
</xsd:element>
<xsd:complexType name="StringsubsDefinition">
<xsd:sequence>
<xsd:element ref="component" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="group" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="change-pair" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="defaults" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="version" use="required" type="xsd:string"/>
</xsd:complexType>
<xsd:element name="component">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="group-ref" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="id" use="required" type="non-empty-string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="group-ref">
<xsd:complexType>
<xsd:attribute name="name" use="required" type="non-empty-string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="group">
<xsd:complexType>
<xsd:sequence>
<!-- allow 0 occurrences to accommodate existing xxx_subs.properties -->
<xsd:element ref="file-entry" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="archive" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="change-pair-ref" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="id" use="required" type="non-empty-string"/>
<xsd:attribute name="mode" type="modeType"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="defaults">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="file-entry">
<xsd:complexType>
<xsd:attribute name="name" use="required" type="non-empty-string"/>
<xsd:attribute name="regex" use="optional" type="non-empty-string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="archive">
<xsd:complexType>
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:element ref="archive"/>
<xsd:element ref="member-entry"/>
</xsd:choice>
<xsd:attribute name="name" use="required" type="non-empty-string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="member-entry">
<xsd:complexType>
<xsd:attribute name="name" use="required" type="non-empty-string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="change-pair-ref">
<xsd:complexType>
<xsd:attribute name="name" use="required" type="non-empty-string"/>
<xsd:attribute name="mode" type="non-empty-string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="change-pair">
<xsd:complexType>
<xsd:attribute name="id" use="required" type="non-empty-string"/>
<xsd:attribute name="before" use="required" type="non-empty-string"/>
<xsd:attribute name="after" use="required" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="property">
<xsd:complexType>
<xsd:attribute name="key" use="required"/>
<xsd:attribute name="value" use="required"/>
<xsd:attribute name="type" type="propertyType"/>
</xsd:complexType>
<xsd:unique name="uniquepropertyname">
<xsd:selector xpath="property"/>
<xsd:field xpath="@key"/>
</xsd:unique>
</xsd:element>
<xsd:simpleType name="non-empty-string">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="propertyType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="port"/>
<xsd:enumeration value="string"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="modeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="forward"/>
<xsd:enumeration value="double"/>
<xsd:enumeration value="policy"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>