我正在尝试编写一个xml架构来验证这段xml:
<date isodate="2007-03-14">14 march 2007</date>
属性isodate应将其类型设置为xs:date,内容最长应为50个字符。
我想知道是否可以在一个块中编写xml架构定义,可能是这样的:
<xs:element name="date" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="50"/>
</xs:restriction>
<xs:attribute name="isodate" type="xs:date" use="required"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
上面的代码不起作用,我无法弄清楚原因。我找到的唯一解决方法是将限制部分分解为单独的类型,并链接如下:
<xs:simpleType name="reviewDate">
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="date" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="reviewDate">
<xs:attribute name="isodate" type="xs:date" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
我的问题是如何在一个块中编写定义,以便模式更具可读性,并且不会在模式的其他部分引用类型。
答案 0 :(得分:16)
您不能将限制和扩展合并到一个XSD块中。使用“ReviewDate”简单类型的解决方案是我所知道的最佳解决方案。
马克
答案 1 :(得分:0)
您可以拥有带限制和属性(-s)的元素。 关键是要定义自定义类型及其限制,然后使用它为其添加属性。 请参阅此处:Content restriction and attribute validation on the same element in XSD