2017-01-11 6 views
2

현재 해당 XML 파일에 대한 유효성 검사 등을 제어하는 ​​XSD 파일이 있으며 XLST가 아닌 assert 명령을 사용하여 제어하고 싶습니다. [사전 지식이 없으므로 이])와 ABC의 같은 번호가 확인 할 수 있습니다 : ABC하기 위해 국가 태그 : 하나가 다른XSD 1.1 요소 계산 및 비교를위한 assert

<abc:Account> 
     <abc:Individual> 
     <abc:Country>Germany</abc:Country> 
     <abc:Country>Australia</abc:Country> 
     <abs:AccountNumber issuedBy="DE">123456</abs:AccountNumber> 
     <abs:AccountNumber issuedBy="AU">654321</abs:AccountNumber> 
     </abc:Individual> 
    </abc:Account> 

에 해당한다으로 ACCOUNTNUMBER 태그, 누군가가 어설 명령으로 저를 도울 수 제발 I 이 유효성 검사를 수행 할 수 있습니까?

나는이 XSD 1.1을 사용하여 행할 추정 ... 노 소용이 다음

<xsd:assert test="if (count (abc:Account/abc:Individual/abc:Country) eq (count (abc:Account/abc:Individual/AccountNumber))) then true() else false() "/> 

또는이 ....

<xsd:assert test="count (abc:Account/abc:Individual/abc:Country) eq count (abc:Account/abc:Individual/AccountNumber)"/> 

를 시도?

어떤 도움이 크게 감사합니다 .... 덕분에

답변

1

내가 생각하는 그것이 abc:Individual 요소에 대한 유형 정의에서 어설 가지고 가장 적합한, 다음 어설 단순히 :

count(abc:Country) eq count(abc:AccountNumber) 

전체 스키마는 그렇게 비슷합니다. 단순화를 위해 을 abc 네임 스페이스에 보관했지만, 그렇지 않은 경우 쉽게 참조로 바꿀 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:abc="http://www.example.com/abc" 
    targetNamespace="http://www.example.com/abc" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
    vc:minVersion="1.1"> 
    <xs:element name="Account"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="abc:Individual" maxOccurs="unbounded" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Individual"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="abc:Country" maxOccurs="unbounded" /> 
       <xs:element ref="abc:AccountNumber" maxOccurs="unbounded" /> 
      </xs:sequence> 
      <xs:assert test="count(abc:Country) eq count(abc:AccountNumber)"/> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Country" type="xs:string"/> 
    <xs:element name="AccountNumber"> 
     <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
        <xs:attribute name="issuedBy" type="xs:string"/> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

외에 abc-abs을 변경, 원본 문서는 스키마, 즉 :

<?xml version="1.0" encoding="UTF-8"?> 
<abc:Account 
    xmlns:abc="http://www.example.com/abc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.example.com/abc test.xsd"> 
    <abc:Individual> 
     <abc:Country>Germany</abc:Country> 
     <abc:Country>Australia</abc:Country> 
     <abc:AccountNumber issuedBy="DE">123456</abc:AccountNumber> 
     <abc:AccountNumber issuedBy="AU">654321</abc:AccountNumber> 
    </abc:Individual> 
</abc:Account> 
+0

기슬 랑 Fourny 이제까지 너무 감사에 성공적으로 유효성을 확인! 빠르고 간결한 응답, 원했던대로 작동했습니다! 고맙습니다!!! :) –