以下实例的最简单架构是什么:
<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>
我很好奇是否有更简单的方法可以达到同样的效果。
答案 0 :(得分: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>
但您也可能需要限制“block”元素的内容,例如
<?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>
等。等
有关您的请求的更多信息,您可以获得更具体的答案。