2017-11-28 4 views
1

RequestNo (특성 수준)에 고유성을 갖는 하나의 xsd 파일이 있습니다. 이제는 EmpID (요소 레벨에 있음)에 대한 고유성을 하나 더 추가하고 싶습니다.xml에 대한 고유성 둘 다 XSD의 특성 및 요소 수준 값

참고 : RequestNo 고유성은 정상적으로 작동하지만 요소 수준 (EmpID)에서는 작동하지 않습니다.

아래 코드를 사용해 보았습니다. 하지만 작동하지 않습니다. 아무도 저를 시정 할 수 있습니까?

XSD :

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 
    <xs:element name="ArrayRequests" type="rootNode"> 
     <xs:unique name="uniqueID"> 
      <xs:selector xpath=".//*" /> 
      <xs:field xpath="@RequestNo" /> 
     </xs:unique> 
    </xs:element> 
    <xs:complexType name="rootNode"> 
     <xs:sequence> 
      <xs:element name="Requests"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element maxOccurs="unbounded" name="Request"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element minOccurs="0" name="AddEmp"> 
             <xs:complexType> 
              <xs:sequence> 
               <xs:element name="EmpID" type="xs:string" minOccurs="1" maxOccurs="unbounded" /> 
               <xs:element name="FullName" type="xs:string" minOccurs="1" maxOccurs="unbounded" /> 
               <xs:element name="Sal" type="xs:string" minOccurs="0"/> 
               <xs:element name="Dept" type="xs:string" minOccurs="1" /> 
               <xs:element name="Address" type="xs:string" minOccurs="0"/> 
               <xs:element name="Email" minOccurs="0" xsi:nil="true" type="xs:string" /> 
              </xs:sequence> 
             </xs:complexType> 
             <xs:unique name="uniqueEmpID"> 
              <xs:selector xpath="EmpID"/> 
              <xs:field xpath="."/> 
             </xs:unique> 
            </xs:element> 
           </xs:sequence> 
           <xs:attribute name="RequestNo" type="xs:string" use="required" /> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema>  

내 XML

<?xml version="1.0"?> 
<ArrayRequests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<Requests> 
    <Request RequestNo="Emp001"> 
     <AddEmp> 
       <EmpID>1001</EmpID> 
       <FullName>FullName-1</FullName> 
       <Sal>1000</Sal> 
       <Dept>Dept1</Dept> 
       <Address>Address2</Address> 
       <Email>[email protected]</Email> 
     </AddEmp> 
    </Request> 
    <Request RequestNo="Emp002"> 
     <AddEmp> 
       <EmpID>1001</EmpID> 
       <FullName>FullName2-1</FullName> 
       <Sal>20000</Sal> 
       <Dept>Dep1</Dept> 
       <Address>Address2</Address> 
       <Email>[email protected]</Email> 
     </AddEmp> 
    </Request> 
</Requests> 
</ArrayRequests> 

답변

1

귀하의 거의 자신의,하지만 당신이 말하는 것은 각 'AddEmp'요소 내에서 고유해야합니다 '다는 EmpID'이다, 그러나 각 'AddEmp'내에서만 1 'EmpID'를 허용하기 때문에 이것은 암시 적으로 사실입니다.

규칙을 낮춰 적용해야합니다. 나는 'EmpID'가 'ArrayRequests'의 컨텍스트 내에서 고유해야한다고 말하려고한다고 가정합니다.이 경우 다음 코드가 필요한 유효성 검사를 제공합니다.

<xs:element name="ArrayRequests" type="rootNode"> 
    <xs:unique name="uniqueID"> 
     <xs:selector xpath=".//*" /> 
     <xs:field xpath="@RequestNo" /> 
    </xs:unique> 
    <xs:unique name="uniqueEmpID"> 
     <xs:selector xpath="./Requests/Request/AddEmp" /> 
     <xs:field xpath="EmpID" /> 
    </xs:unique> 
</xs:element> 

참고 :는 '다는 EmpID'에 직접이 규칙을 적용 할 수 좋을 것이지만, 고유 제한 조건에 사용 된 XPath 식을 다시 볼 수 없도록, (즉 ../ accessable 한하지 않습니다) 그것은 나무에서 더 높은쪽으로 적용되어야한다.

+0

soo 고맙습니다 ... 그 작품 :) – Jagadeesh