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

<xsd:schema xmlns="http://shardingsphere.apache.org/schema/shardingsphere/encrypt"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:beans="http://www.springframework.org/schema/beans"
            targetNamespace="http://shardingsphere.apache.org/schema/shardingsphere/encrypt"
            elementFormDefault="qualified">
    <xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="http://www.springframework.org/schema/beans/spring-beans.xsd"/>
    <xsd:element name="data-source">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="encrypt-rule" type="encrypt-rule" />
                <xsd:element ref="props" minOccurs="0" />
            </xsd:sequence>
            <xsd:attribute name="id" type="xsd:string" use="required" />
            <xsd:attribute name="data-source-name" type="xsd:string" use="required" />
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="encrypt-rule">
        <xsd:all>
            <xsd:element ref="encryptors" />
            <xsd:element ref="tables" />
        </xsd:all>
    </xsd:complexType>
    <!--<xsd:element name="encrypt-rule">-->
        <!--<xsd:complexType>-->
            <!--<xsd:all>-->
                <!--<xsd:element ref="encryptors" />-->
                <!--<xsd:element ref="tables" />-->
            <!--</xsd:all>-->
        <!--</xsd:complexType>-->
    <!--</xsd:element>-->
     <xsd:element name="encryptors">
       <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="encryptor" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
     <xsd:element name="encryptor">
        <xsd:complexType>
            <xsd:attribute name="id" type="xsd:string" use="required" />
            <xsd:attribute name="type" type="xsd:string" use="required" />
            <xsd:attribute name="props-ref" type="xsd:string" />
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="tables">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="table" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="table">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="column" maxOccurs="unbounded" />
            </xsd:sequence>
            <xsd:attribute name="name" type="xsd:string" use="required" />
        </xsd:complexType>
    </xsd:element>
     <xsd:element name="column">
        <xsd:complexType>
            <xsd:attribute name="logic-column" type="xsd:string" use="required" />
            <xsd:attribute name="plain-column" type="xsd:string" />
            <xsd:attribute name="cipher-column" type="xsd:string" use="required" />
            <xsd:attribute name="assisted-query-column" type="xsd:string" />
            <xsd:attribute name="encryptor-ref" type="xsd:string" use="required" />
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="props">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="beans:propsType" />
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
