-2

以下实例的最简单架构是什么:

<blocks>
  <block id="1" current="true">ecf1923</block>
  <block id="2">acb79e1</block>
  <block id="3">223a431</block>
</blocks>

?

编辑:这是我去过的地方......

<xs:schema>
      <xs:complexType name="BlockType">
        <xs:attribute name="id" type="xs:integer" use="required"/>
        <xs:attribute name="current" type="xs:boolean" use="optional"/>
      </xs:complexType>

      <xs:complexType name="BlockCollection">
        <xs:sequence>
          <xs:element name="block" type="BlockType" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:complexType>

      <xs:element name="blocks" type="BlockCollection"/>
</xs:schema>

我只是好奇是否有更简单的方法可以达到相同的效果。

4

1 回答 1

1

“最简单”的含义是非常相对的。

它可能会跟随

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="blocks">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="block" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:string">
                                <xs:attribute name="id" type="xs:int" use="required"/>
                                <xs:attribute name="current" type="xs:boolean"/>
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

可能您需要以这种方式定义它,以便能够在模式的其他部分重用某些类型。

<?xml version="1.0" encoding="UTF-8"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="blocks" type="blocks_type"/>
    <xs:complexType name="blocks_type">
        <xs:sequence>
            <xs:element name="block" type="block_type" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="block_type">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="id" type="xs:int" use="required"/>
                <xs:attribute name="current" type="xs:boolean"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:schema>

但您也可能需要限制“块”元素的内容,例如

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="blocks" type="blocks_type"/>
    <xs:simpleType name="block_content_type">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9a-f]{7}" />
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="blocks_type">
        <xs:sequence>
            <xs:element name="block" type="block_type" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="block_type">
        <xs:simpleContent>
            <xs:extension base="block_content_type">
                <xs:attribute name="id" type="xs:int" use="required"/>
                <xs:attribute name="current" type="xs:boolean"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:schema>

而且您还可能需要将“id”属性作为键(因此也是唯一的):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="blocks" type="blocks_type">
        <xs:key name="id_key">
            <xs:selector xpath="block" />
            <xs:field xpath="@id" />
        </xs:key>
    </xs:element>
    <xs:simpleType name="block_content_type">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9a-f]{7}" />
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="blocks_type">
        <xs:sequence>
            <xs:element name="block" type="block_type" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="block_type">
        <xs:simpleContent>
            <xs:extension base="block_content_type">
                <xs:attribute name="id" type="xs:int" use="required"/>
                <xs:attribute name="current" type="xs:boolean"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:schema>

等等等等。

您提供的有关您的请求的信息越多,您获得的答案就越具体。

于 2013-08-27T10:06:21.723 回答