我面临的问题是为我的XML构建正确的XSD架构
我有以下XML:
<VanToRoute>
<VanId>1111</VanId>
<RouteNo>1459</RouteNo>
<RouteNo>1458</RouteNo>
<RouteNo>2459</RouteNo>
<RouteNo>1THU</RouteNo>
</VanToRoute>
<VanToRoute>
<RouteNo>2458</RouteNo>
<VanId>2222</VanId>
<RouteNo>1457</RouteNo>
<RouteNo>1NEW</RouteNo>
<RouteNo>2NEW</RouteNo>
</VanToRoute>
<VanToRoute>
<RouteNo>1215</RouteNo>
<RouteNo>2457</RouteNo>
<VanId>2222</VanId>
</VanToRoute>
<VanToRoute>
<VanId>4444</VanId>
<RouteNo>2456</RouteNo>
<RouteNo>1100</RouteNo>
<RouteNo>2465</RouteNo>
</VanToRoute>
因此,关键是要具有VanId的必填字段和RouteNo的无限制数量。
主要挑战是使用允许的XML元素放置来设置必填字段。
到目前为止我所做的:
<xs:element minOccurs="1" maxOccurs="unbounded" name="VanToRoute">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element minOccurs="1" name="VanId" type="xs:unsignedshort" />
<xs:element minOccurs="1" name="RouteNo" type="xs:string" />
</xs:choice>
<xs:choice>
<xs:element minOccurs="1" name="RouteNo" type="xs:string" />
<xs:element minOccurs="1" name="VanId" type="xs:unsignedshort" />
</xs:choice>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="RouteNo" type="xs:string" />
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
但是由于以下几个原因,此解决方案不正确:
我的问题是-是否甚至可能以某种方式模仿我想加入的逻辑?
答案 0 :(得分:1)
您可以在XSD 1.1中使用xs:all
和minOccurs
/ maxOccurs
对所包含的元素粒子进行此操作。
在XSD 1.0中,您可以将内容模型定义为
sequence
RouteNo occurs 0 to many
VanId
RouteNo occurs 0 to many
但是这允许零RouteNo。您可以使用内容模型解决这个问题
choice
sequence
RouteNo occurs 1 to many
VanId
RouteNo occurs 0 to many
or
sequence
RouteNo occurs 0 to many
VanId
RouteNo occurs 1 to many