【问题标题】:XML Schema: how to have multiple identical elements?XML Schema:如何拥有多个相同的元素?
【发布时间】:2011-04-17 11:26:03
【问题描述】:

我在构建我的第一个 XML 模式时遇到了很大的困难。我需要它来验证构成调查问卷的 XML 文档的正确性。
所以这里是 don't get 中的部分:

我改变了来源。第一个答案是指这段代码:

<root>
    <values>
        <value>Lorem</value>
        <value>ipsum</value>
        <value>dolor</value>
    </values>
</root>

现在我的实际目标是:

<requires>
    <require requires-id="2" type="included">
        <values>  
            <value isRequired="true">Lorem</value>
            <value isRequired="false">Lorem</value>
            <value isRequired="false">Lorem</value>
        </values>
    </require>
    <require requires-id="5" type="excluded">
        <values>  
            <value isRequired="true">Lorem</value>
            <value isRequired="false">Lorem</value>
        </values>
    </require>
</requires>

任何人都可以帮忙制作一个合适的架构吗?我正在使用Sun Multi-Schema XML Validator (MSV) 来根据架构验证文档。

提前致谢,
斯特夫

【问题讨论】:

    标签: xml xsd schema


    【解决方案1】:

    这应该是为第一个 xml 做的:

    <xs:complexType name="Values">
        <xs:sequence>
            <xs:element name="value" minOccurs="0" maxOccurs="200">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="isOnlyOption" type="xs:boolean"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="values" type="Values" minOccurs="0"/>
    

    第二个是这样的:

    <xs:element name="requires" minOccurs="0">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="require" minOccurs="1" maxOccurs="200">
                    <xs:complexType>
                        <xs:attribute name="requires-id" type="xs:IDREF"/>
                        <xs:attribute name="type" type="RequiresType"/>
                        <xs:all>
                            <xs:element name="values" type="Values" minOccurs="0" maxOccurs="1"/>
                        </xs:all>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    

    注意第一个 sn-p 中对自定义数据类型“值”的引用。

    谢谢,
    斯特夫

    【讨论】:

      【解决方案2】:

      我不知道,应该准确验证什么,但以下 xml 架构将验证根标记内的值标记内的三个值标记。值必须是字符串:

      <?xml version="1.0" encoding="UTF-8"?>
      <xsd:schema xmlns:xsd="http://yourSchema">
        <xsd:element name="root">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element ref="values" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="values">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="value" type="xsd:string" minOccurs="3" maxOccurs="3" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:schema>
      

      【讨论】:

      • 这是您在编辑问题之前发布的 xml 的架构。
      • 是的,我知道。我会把它放回去。对不起。但是,谢谢,这确实是一个窍门。我想我忘了指定 ´maxOccurs="X"´ 因为我想允许从 0 到 N...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多