具有属性和子元素的XSD元素

Ste*_*e83 41 attributes xsd

我想知道定义包含属性和子元素的元素的正确语法(如果可能).例如:

<component type="A" binding="B">
  <operation name="X">
    <input type="C" />
  </operation>

  <event name="Y">
    <output type="D" />
  </event>
</component>
Run Code Online (Sandbox Code Playgroud)

如您所见,元素组件,操作和事件都具有属性和子元素.是否可以在XSD中定义它?怎么样?

非常感谢你!

Pet*_*dea 46

这是定义与XML匹配的XSD的一种可能方式; 在学习XSD时,您可以从一个或多个XML示例文件开始注册为您推断XSD的工具的帮助.

<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="component">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="operation">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="input">
                <xsd:complexType>
                  <xsd:attribute name="type" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="name" type="xsd:string" use="required" />
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="event">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="output">
                <xsd:complexType>
                  <xsd:attribute name="type" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="name" type="xsd:string" use="required" />
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="type" type="xsd:string" use="required" />
      <xsd:attribute name="binding" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

当你演练这个时,你可以开始调整min/maxOccurs,使用(必需/可选),重用定义等.生成的XSD是一个很好的起点,但通常最终会以某种方式进行编辑......

  • 我认为它要求`xsd:sequence`出现在`xsd:attribute`s之前. (30认同)
  • 是的,恰恰与您期望的完全相反,因为在实际的xml中,属性位于元素之前. (6认同)
  • 来自XML Schema设计师的糟糕设计决定,使得XSD更难以阅读,除了反直觉.应该允许在complexType中以任何顺序放置属性和序列等 (6认同)