发布1203
大石头 authored at 2019-12-03 22:57:54
12.04 KiB
X
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ModelSchema"
    targetNamespace="http://www.newlifex.com/ModelSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://www.newlifex.com/ModelSchema.xsd"
    xmlns:mstns="http://www.newlifex.com/ModelSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:annotation>
    <xs:documentation xml:lang="zh-cn">
      新生命模型XML架构说明
    </xs:documentation>
  </xs:annotation>

  <xs:element name="Tables" type="TablesType"></xs:element>

  <xs:complexType name="TablesType">
    <xs:sequence>
      <xs:element name="Table" type="TableType" maxOccurs="unbounded" ></xs:element>
    </xs:sequence>
    <xs:attribute name="Version" type="xs:string"></xs:attribute>
    <xs:attribute name="NameSpace" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          命名空间
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="ChineseFileName" type="BooleanType">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          中文名称
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="ConnName" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          字符串连接名
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Output" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          输出地址,绝对或相对地址,相对的是模型文件所在目录
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="BaseClass" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          基类名称
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <!--Table-start-->
  <xs:complexType name="TableType">
    <xs:annotation>
      <xs:documentation xml:lang="zh-cn">
        一个Table对应一个数据库表
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Columns" type="ColumnsType"></xs:element>
      <xs:element name="Indexes" type="IndexesType" minOccurs="0">
        <xs:annotation>
          <xs:documentation xml:lang="zh-cn">
            索引列表,并根据列名生成拓展查询方法
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <!--<xs:element name="Relations" type="IndexesType" minOccurs="0">
            <xs:annotation>
                <xs:documentation xml:lang="zh-cn">
                    关系
                </xs:documentation>
            </xs:annotation>
        </xs:element>-->
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="required">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          生成的实体类名,TableName对应数据库表名,TableName为空则用此属性作为表名
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="TableName" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          数据库表名,为空则默认为Name
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="BaseType" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          基类
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Owner" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          所有者
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="ConnName" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          连接名
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="DbType" type="DbTypeType">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          数据库类型
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="IsView" type="BooleanType">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          是否视图
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="DisplayName" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          显示名。如果有Description则使用Description,否则使用Name
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Description" type="xs:string">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          表描述
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="InsertOnly" type="BooleanType">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          仅插入数据,比如日志型
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <!--以下是拓展属性-->
    <xs:attribute name="RenderGenEntity" type="BooleanType">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          是否生成泛型,生成泛型自动添加模型检查模式(控制实体类是在初始化连接时还是第一次使用该实体类的数据表时检查模型)
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>

  </xs:complexType>
  <!--Table-end-->

  <xs:simpleType name="DbTypeType">
    <xs:annotation>
      <xs:documentation>
        数据库类型,生成数据库表的是时候会针对数据库类型做处理
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="Access" ></xs:enumeration>
      <xs:enumeration value="MySql" ></xs:enumeration>
      <xs:enumeration value="Oracle" ></xs:enumeration>
      <xs:enumeration value="PostgreSQL" ></xs:enumeration>
      <xs:enumeration value="SqlCe" ></xs:enumeration>
      <xs:enumeration value="SQLite" ></xs:enumeration>
      <xs:enumeration value="SqlServer" ></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="ColumnsType">
    <xs:sequence>
      <xs:element name="Column" type="ColumnType" maxOccurs="unbounded"></xs:element>
    </xs:sequence>
  </xs:complexType>

  <!--Column-start-->
  <xs:complexType name="ColumnType">
    <xs:attribute name="Name" type="xs:string">
      <xs:annotation>
        <xs:documentation>
          名称,对应实体类属性名,ColumnName为空时使用此属性
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="ColumnName" type="xs:string">
      <xs:annotation>
        <xs:documentation>
          列名
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="DataType" type="DataTypeType">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          数据类型,对应C#的类型
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="RawType" type="xs:string">
      <xs:annotation>
        <xs:documentation>
          原始数据类型,当且仅当目标数据库同为该数据库类型时,采用实体属性信息上的RawType作为反向工程的目标字段类型,以期获得开发和生产的最佳兼容。
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Identity" type="BooleanType">
      <xs:annotation>
        <xs:documentation>
          标识
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="PrimaryKey" type="BooleanType">
      <xs:annotation>
        <xs:documentation>
          主键
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Master" type="xs:string">
      <xs:annotation>
        <xs:documentation>
          主字段。主字段作为业务主要字段,代表当前数据行意义
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Length" type="xs:int">
      <xs:annotation>
        <xs:documentation>
          长度,当使用-1时表示文本类型
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Precision" type="xs:int">
      <xs:annotation>
        <xs:documentation>
          精度
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Scale" type="xs:int">
      <xs:annotation>
        <xs:documentation>
          位数
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Nullable" type="BooleanType">
      <xs:annotation>
        <xs:documentation>
          允许空
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="DisplayName" type="xs:string">
      <xs:annotation>
        <xs:documentation>
          显示名。如果有Description则使用Description,否则使用Name
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Description" type="xs:string">
      <xs:annotation>
        <xs:documentation>
          说明
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Type" type="xs:string">
      <xs:annotation>
        <xs:documentation>
          生成自定义类型,比如枚举,值可以是类型名也可以是命名空间+类型名
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <!--Column-end-->

  <!--BooleanType-start-->
  <xs:simpleType name="BooleanType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="True" ></xs:enumeration>
      <xs:enumeration value="False" ></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <!--BooleanType-end-->

  <!--DataType-start-->
  <xs:simpleType name="DataTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Boolean" ></xs:enumeration>
      <xs:enumeration value="SByte" ></xs:enumeration>
      <xs:enumeration value="Byte" ></xs:enumeration>
      <xs:enumeration value="Int16" ></xs:enumeration>
      <xs:enumeration value="UInt16" ></xs:enumeration>
      <xs:enumeration value="UInt16" ></xs:enumeration>
      <xs:enumeration value="Int32" ></xs:enumeration>
      <xs:enumeration value="UInt32" ></xs:enumeration>
      <xs:enumeration value="Int64" ></xs:enumeration>
      <xs:enumeration value="UInt64" ></xs:enumeration>
      <xs:enumeration value="Single" ></xs:enumeration>
      <xs:enumeration value="Double" ></xs:enumeration>
      <xs:enumeration value="Decimal" ></xs:enumeration>
      <xs:enumeration value="DateTime" ></xs:enumeration>
      <xs:enumeration value="String" ></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <!--DataType-end-->

  <xs:complexType name="IndexesType">
    <xs:sequence>
      <xs:element name="Index" type="IndexType" maxOccurs="unbounded"></xs:element>
    </xs:sequence>
  </xs:complexType>


  <!--Index-start-->
  <xs:complexType name="IndexType">
    <xs:annotation>
      <xs:documentation xml:lang="zh-cn">
        索引,同时生成对应的拓展查询方法
      </xs:documentation>
    </xs:annotation>
    <xs:attribute name="Name">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          索引名
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Columns" use="required">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          列名,英文逗号字符相隔,比如:ID,Name
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="Unique" type="BooleanType">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          是否唯一
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="PrimaryKey" type="BooleanType">
      <xs:annotation>
        <xs:documentation xml:lang="zh-cn">
          是否主键
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <!--Index-end-->

</xs:schema>