2014-01-07 3 views
0

Я новичок в XML/XSD, хотя есть много похожих связанных вопросов, но я все еще не мог заставить его работать. Приносим извинения, если этот вопрос повторяется ранее.уникальные значения атрибутов в XML

Я пытаюсь сделать уникальные значения атрибутов для работы, но не смог заставить его работать.

Ниже представлена ​​моя схема и соответствующий 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> 
+1

Что значит «сделать уникальные значения атрибутов для работы» означает, и каким образом ваша попытка потерпит неудачу? –

ответ

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> 
+0

Большое спасибо за ваш быстрый ответ. Ты прав. Он работает сейчас. – user3170785

Смежные вопросы