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가 올바른지 확인하고 예상 값을 반환합니다.