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

时间:2012-03-30 16:10:26

标签: attributes xsd

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

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

  <event name="Y">
    <output type="D" />
  </event>
</component>

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

非常感谢!

2 个答案:

答案 0 :(得分:42)

这是定义与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>

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

答案 1 :(得分:4)

我在下面给出一个有效的解决方案:     

<xs:simpleType name="inputTypeType">
        <xs:restriction base="xs:string" />
</xs:simpleType>

<xs:complexType name="inputType">
    <xs:attribute name="type" type="inputTypeType"/>            
</xs:complexType>

<xs:simpleType name="operationNameType">
        <xs:restriction base="xs:string" />
</xs:simpleType>

<xs:complexType name="operationType">
  <xs:sequence>
    <xs:element name="input"   type="inputType" />
  </xs:sequence>
    <xs:attribute name="name" type="operationNameType"/>
</xs:complexType>



<xs:simpleType name="outputTypeType">
        <xs:restriction base="xs:string" />
</xs:simpleType>

<xs:complexType name="outputType">
    <xs:attribute name="type" type="outputTypeType"/>           
</xs:complexType>

<xs:simpleType name="eventNameType">
        <xs:restriction base="xs:string" />
</xs:simpleType>

<xs:complexType name="eventType">
  <xs:sequence>
    <xs:element name="output"   type="outputType" />
  </xs:sequence>
    <xs:attribute name="name" type="eventNameType"/>
</xs:complexType>   


<xs:simpleType name="typeType">
        <xs:restriction base="xs:string" />
</xs:simpleType>

<xs:simpleType name="bindingType">
        <xs:restriction base="xs:string" />
</xs:simpleType>




<xs:complexType name="componentType">
    <xs:sequence>        
        <xs:element name="operation"   type="operationType" />
        <xs:element name="event" type="eventType" />
    </xs:sequence>
    <xs:attribute name="type" type="typeType"/>
    <xs:attribute name="binding" type="bindingType"/>       
</xs:complexType>


<xs:element name="component" type="componentType" />