我是XML/XSD的新手,虽然有很多类似的相关问题,但我仍然不能让它工作。如果这个问题是先前问题的重复,我很抱歉。
我正在尝试使属性的唯一值起作用,但无法使其起作用。
下面是我的模式和相应的XML文件。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.dolby.com/MY" targetNamespace="http://www.dolby.com/MY" xmlns="http://www.dolby.com/MY">
<xs:element name="MYCfg">
<xs:complexType>
<xs:sequence>
<xs:element name="Section" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="SubSection" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Param" type="ParamType" maxOccurs="unbounded" minOccurs="0">
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="ParamId">
<xs:selector xpath="xs:Section/SubSection/Param"/>
<xs:field xpath="@ID"/>
</xs:key>
<xs:unique name="ParamIdUnique">
<xs:selector xpath="xs:Section/SubSection/Param"/>
<xs:field xpath="@ID"/>
</xs:unique>
</xs:element>
<xs:complexType name="ParamType">
<xs:sequence>
<xs:element type="xs:string" name="Value"/>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="required"/>
<xs:attribute type="xs:int" name="ID" use="required"/>
</xs:complexType>
</xs:schema>
<?xml version="1.0"?>
<tns:MYCfg xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.dolby.com/MY">
<tns:Section name="Network">
<tns:SubSection name="DHCP">
<tns:Param name="ip_address" ID="12345">
<tns:Value>10.10.10.1</tns:Value>
</tns:Param>
<tns:Param name="subnet" ID="12345">
<tns:Value>10.10.10.1</tns:Value>
</tns:Param>
</tns:SubSection>
<tns:SubSection name="Provisioning">
<tns:Param name="ip_address" ID="12345">
<tns:Value>10.10.10.1</tns:Value>
</tns:Param>
</tns:SubSection>
</tns:Section>
<tns:Section name="PBX">
<tns:SubSection name="SIP">
<tns:Param name="username" ID="12345">
<tns:Value>user</tns:Value>
</tns:Param>
</tns:SubSection>
</tns:Section>
</tns:MYCfg>发布于 2014-01-08 05:20:25
您需要在XPath表达式中一致地使用前缀,即
<xs:unique name="ParamIdUnique">
<xs:selector xpath="xs:Section/SubSection/Param"/>
<xs:field xpath="@ID"/>
</xs:unique>你需要
<xs:unique name="ParamIdUnique">
<xs:selector xpath="tns:Section/tns:SubSection/tns:Param"/>
<xs:field xpath="@ID"/>
</xs:unique>https://stackoverflow.com/questions/20982047
复制相似问题