2017-02-28 10 views
1

XSD에 어설 션을 추가하고 있지만 어설 션을 별도의 스키마 파일에 보관하고 싶습니다. 이는 XSD가 제 3 자에 의해 제공되고 새 버전이 자주 릴리스되기 때문입니다.별도의 스키마에 XSD 어설 션 유지

타사 XSD (SchoolModule.xsd는) :

<?xml version="1.0" encoding="UTF-8"?> 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1" id="SchoolModule" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> 

    <xs:include schemaLocation="../Includes/Address_Structure.xsd"/> 

    <xs:element name="School" type="SchoolStructure"/> 

    <xs:complexType name="SchoolStructure"> 
     <xs:sequence> 
      <xs:element name="Headteacher" type="xs:String" minOccurs="0"/> 
      <xs:element name="SchoolCharacteristics" type="SchoolCharacteristicsStructure"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="SchoolCharacteristicsStructure"> 
     <xs:sequence> 
      <xs:element name="SchoolName" type="SchoolNameType"/> 
      <xs:element name="SchoolType" type="SchoolTypeType"/> 
      <xs:element name="NumberOfPlaces" minOccurs="0"> 
       <xs:simpleType> 
        <xs:restriction base="xs:integer"> 
         <xs:minInclusive value="0"/> 
         <xs:maxInclusive value="999"/> 
         <xs:totalDigits value="3"/> 
         <xs:fractionDigits value="0"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:element> 
      <xs:element name="IntakeType" type="xs:boolean"/> 
     </xs:sequence> 
    </xs:complexType> 
    ... 
</xs:schema> 

이 내가 별도의 파일에 시도 한 것입니다 : 내가 주장을 만들려고 노력하고있어

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1" id="Assertions" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> 
    <xs:include schemaLocation="SchoolModule.xsd"/> 

    <xs:element name="assertions"> 
     <xs:complexType> 
      <xs:assert test="/Message/School/SchoolCharacteristics/SchoolType ='Secondary' and /Message/School/Headteacher"/> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

그 Headteacher 요소는 SchoolType = Secondary 인 경우에만 존재해야합니다. 그러나 XML 파일에서 SchoolType을 Secondary가 아닌 다른 것으로 설정하고 Headteacher 요소가있는 경우에도 XML 파일의 유효성이 성공적으로 확인되는 것처럼 작동하지 않는 것 같습니다. 누군가 내가 잘못 가고있는 것을 지적 할 수 있습니까?

참고 : 어설 션의 XPath가 올바른지 확인하고 예상 값을 반환합니다.

답변

1

XSD 어설 션은 연관된 요소의 콘텐츠 모델을 통해서만 가능할 수 있습니다. xs:assert에서 전체적으로 마크 업을 제한 할 수 없습니다.

올바른 위치에 어설 션을 포함하는 원본 XSD로 변환 할 수있는 XSLT를 작성할 수도 있습니다. 그러나 자주 변경되는 원래 XSD가 사용자의 주장과 호환되는지 (또는 그에 따라 사용자의 주장을 조정하는지)주의해야합니다.