我可以让xml模式定义数据类型选择吗



我有一个简单的XML文件:

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<SearchSettings>
    <ChangeHistory>
        <Changed By="Joe Schmoe" On="2013-07-17">Initial creation of this file.</Changed>
    </ChangeHistory>
    <Logicals>
        <Logical Name="Exact Match"  ShortName="EM" Operator="== {0}" />
        <Logical Name="Contains"     ShortName="Co" Operator="%{0}%" />
        <Logical Name="Starts With"  ShortName="SW" Operator="{0}%" />
        <Logical Name="Ends With"    ShortName="EW" Operator="%{0}" />
        <Logical Name="Between"      ShortName="Be" Operator="gt= {0} AND lt= {0}" />
        <Logical Name="Less Than"    ShortName="LT" Operator="lt {0}" />
        <Logical Name="Greater Than" ShortName="GT" Operator="gt {0}" />
    </Logicals>
    <LogicalGroupings>
        <Group DisplayType="Text"    Allowed="EM|Co|SW|EW" />
        <Group DisplayType="Decimal" Allowed="EM|Be|LT|GT" />
        <Group DisplayType="Integer" Allowed="EM|Be|LT|GT" />
        <Group DisplayType="Date"    Allowed="EM|Be|LT|GT" />
        <Group DisplayType="List"    Allowed="EM" />
    </LogicalGroupings>
    <SearchFields>
        <SearchField DisplayName="Complaint Type"   DisplayType="List"    ColumnName="Complaint.ComplaintTypeID" GetMethod="GetComplaintTypes" ToolTipTitle="" ToolTipContent="" ToolTipKey="" Transform="" />
        <SearchField DisplayName="Complaint Number" DisplayType="Text"    ColumnName="Complaint.Number" />
        <SearchField DisplayName="Tax Year"         DisplayType="Integer" ColumnName="Complaint.TaxYear" />
        <SearchField DisplayName="Category"         DisplayType="List"    ColumnName="Complaint.Category"        GetMethod="GetExistingCategories" />
        <SearchField DisplayName="Building Value"   DisplayType="Integer" ColumnName="Complaint.BuildingValue" />
        <SearchField DisplayName="Land Value"       DisplayType="Integer" ColumnName="Complaint.LandValue" />
        <SearchField DisplayName="Owner Opinion"    DisplayType="Integer" ColumnName="Complaint.OwnerOpinion" />
        <SearchField DisplayName="Notes"            DisplayType="Text"    ColumnName="Complaint.Notes"           AllowedLogicals="Co" />
    </SearchFields>
</SearchSettings>

我希望SearchFields.SearchField.DisplayType只允许LogicalGroupings列表中的DisplayType值。

这可能吗?我一直试图添加一个只有外键的关系,但后来我的模式智能停止了工作,所以我认为我错了。

编辑

这是我现有的.xsd文件(正在工作,但还没有我想要的)。为了节省空间,我删除了我不关心的部分。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="SearchSettings" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="SearchSettings" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="LogicalGroupings">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Group" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="DisplayType" type="xs:string" />
                  <xs:attribute name="Allowed" type="xs:string" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="SearchFields">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="SearchField" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="DisplayName" type="xs:string" />
                  <xs:attribute name="DisplayType" type="xs:string" />
                  <xs:attribute name="ColumnName" type="xs:string" />
                  <xs:attribute name="GetMethod" type="xs:string" />
                  <xs:attribute name="ToolTipTitle" type="xs:string" />
                  <xs:attribute name="ToolTipContent" type="xs:string" />
                  <xs:attribute name="ToolTipKey" type="xs:string" />
                  <xs:attribute name="Transform" type="xs:string" />
                  <xs:attribute name="AllowedLogicals" type="xs:string" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

在SearchSettings级别,定义一个xs:key,其selection="LogicalGrouping/Group",field="@DisplayType",以及相应的xs:keyref,其selection\="SearchFields/Searchfield",field="@DisplayType"。

(如果你尝试了一些东西,最好告诉我们你尝试了什么以及它是如何失败的,这样我们就可以解释你哪里错了…)

最新更新