我是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>
答案 0 :(得分:0)
您需要在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>