【问题标题】:XSD inheritance and xhtml formXSD继承和xhtml表单
【发布时间】:2011-09-08 09:32:26
【问题描述】:

我正在寻找描述一类实例的 XSD。我将通过一个实例来解释我想要完成的工作。我想要一个 XSD 类型(我们称之为 FormBaseType)来描述这个实例:

<form method="post" action="someaction" name="acme">
    <input name="EXACTLY FOO" value="EXACT ENUMERATION" type="CONST STRING" />
    <input name="SOME RANDOM STRING" value="SOME RANDOM STRING" type="CONST STRING" />
    <input name="SOME RANDOM STRING" value="SOME RANDOM STRING" type="CONST STRING" />
    ... (input element repeats up to 30 times) ...
</form>

我希望 OneKindOfMyFormType 继承和限制 FormBaseType 以便它只匹配这样的实例:

<form method="post" action="someaction" name="acme">
    <input name="EXACTLY FOO" value="EXACT ENUMERATION" type="CONST STRING" />
    <input name="EXACTLY BAR" value="SOME RANDOM STRING RESTRICTION" type="CONST STRING" />
    <input name="EXACTLY BAZ" value="SOME OTHER RANDOM STRING RESTRICTION" type="CONST STRING" />
    ... (input element repeats up to 30 times) ...
</form>

我在尝试定义以不同方式限制的多个输入元素时遇到了问题。我可以有多个相同类型的输入元素,如下所示:

<xs:complexType name="FormBaseType">
    <xs:sequence>
        <xs:element name="input" type="ns0:InputType" minOccurs="1" maxOccurs="33"/>
    </xs:sequence>
</xs:complexType>

但是当我尝试这个时:

<xs:complexType name="RequestType">
    <xs:complexContent>
        <xs:restriction base="RequestTypeBase">
            <xs:sequence>
                <xs:element name="input" type ="ns0:AlphaNumericInputType" minOccurs="1" maxOccurs="1" />
                <xs:element name="input" type ="ns0:NumericInputType" minOccurs="1" maxOccurs="1" />
            </xs:sequence>
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

存在相同名称(“输入”)且在相同范围内的元素必须具有相同类型的问题。 (AlphaNumericInputType 和 NumericInputType 是 InputType 的限制,但除了可能澄清我的意图之外,这对于示例并不重要)。

长话短说,我想对多种表单进行 XSD 描述,其中一些 input 元素在各种表单(基础)以及派生的 XSD 类型中都是相同的 input 元素具有基本属性 type 加上一个确切的 name 属性值,并且对于该确切名称,一个 value 属性类型限制。

这可能吗?怎么样?

TIA

【问题讨论】:

    标签: inheritance xsd


    【解决方案1】:

    根据我的发现,这是无法做到的。如果您有专业知识,请确认这一点。

    namevaluetype 是 XML 属性。 XML 规范明确声明属性没有排序。 XML 解析器应该能够使用单个标记向前解析输入。因此,不可能通过固定另一个属性的值来限制一个属性的类型。问题是,您希望按类型限制值的属性可能位于值应该确定受限制属性类型的属性之前。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2010-09-17
      • 2012-03-08
      • 2011-12-20
      相关资源
      最近更新 更多