【问题标题】:Define an element with attribute and optional value定义具有属性和可选值的元素
【发布时间】:2012-01-14 02:34:02
【问题描述】:

如何创建可以验证以下两个示例的 xsd?

<element attribute="attribute-value" />

<element attribute="attribute-value">element-value</element>

【问题讨论】:

  • 嗨,Louis,寻找类似问题答案的另一种方法是使用一种工具,该工具将接收您的 XML sn-p 并从中推断出 XML Schema 文件。几乎每个合理处理 XML 和 XSD 的工具都应该能够从 XML 中推断出 XSD。我还建议,如果你要处理 XML 和 XSD,你最好使用专门的工具......更像是试图教你如何钓鱼......
  • 嗨,Louis,您可以将我的回答标记为已接受吗?

标签: xml xsd xsd-validation


【解决方案1】:
  <?xml version="1.0" encoding="utf-8"?>
  <xs:schema id="test"
      targetNamespace="http://tempuri.org/test.xsd"
      elementFormDefault="qualified"
      xmlns="http://tempuri.org/test.xsd"
      xmlns:mstns="http://tempuri.org/test.xsd"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
  >
    <xs:complexType name="element_type">
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="attribute" type="xs:string" />
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>

    <xs:element name="root">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="element" type="element_type">
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:schema>

这假定该属性不是必需的。

【讨论】:

  • 如果您不想要根元素,则将后半部分替换为 &lt;xs:element name="element" type="element_type"&gt;&lt;/xs:element&gt;
  • use="required" />
【解决方案2】:

您可以为此使用xsd:simpleContentHere 就是一个例子。

【讨论】:

    【解决方案3】:

    为了完整起见,我添加了一些验证参数如下:

    <xsd:element name="element">
      <xsd:complexType>
        <xsd:simpleContent>
            <xsd:extension base="OptionalString">
                <xsd:attribute name="row" type="xsd:positiveInteger"
                    use="required" />
            </xsd:extension>
        </xsd:simpleContent>
      </xsd:complexType>
    </xsd:element>
    
    <xsd:simpleType name="OptionalString">
    <xsd:restriction base="xsd:string">
        <xsd:minLength value="0" />         
    </xsd:restriction>
    </xsd:simpleType>
    

    这与上面提出的解决方案会有所不同吗?

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 2012-11-30
      • 2012-08-29
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      相关资源
      最近更新 更多