我正在使用XSD,例如:
@H_404_1@<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="algo">
<xs:complexType>
<xs:sequence>
<xs:element name="nota" type="t_algo" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="t_algo">
<xs:restriction base="xs:string">
<xs:pattern value="[1][0]|[0-9]" />
</xs:restriction>
<xs:attribute name="modul" type="t_modul"/>
</xs:complexType>
<xs:simpleType name="t_modul">
<xs:restriction base="xs:string">
<xs:pattern value="[m][0][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
并使用像这样的测试XML:
@H_404_1@<?xml version="1.0" encoding="UTF-8"?> <algo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///D:/DAM/RECUF1/Mispruebas/telf.xsd"> <nota modul="m01">0</nota> <nota modul="m01">7</nota> <nota modul="m01">3</nota> <nota modul="m01">1</nota> </algo>我想让孩子nota的值在0-10之间,并且属性modul的值为m0X,其中x在(0-9)之间.我认为以前的XSD会起作用,但事实并非如此.有人可以解释一下我做错了什么吗?
要在具有受限内容的元素上具有属性,请定义新的xs:simpleType,然后使用xs:extension通过属性扩展它:
@H_404_1@<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="algo">
<xs:complexType>
<xs:sequence>
<xs:element name="nota" type="t_algo" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="t_algo">
<xs:simpleContent>
<xs:extension base="t_algo_content">
<xs:attribute name="modul" type="t_modul"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="t_modul">
<xs:restriction base="xs:string">
<xs:pattern value="m0[0-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="t_algo_content">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
另请注意,我在第一种情况下简化了正则表达式模式,并使用minInclusive / maxInclusive在第二种情况下更自然地表达整数范围.