[英]Why won't my XML schema pick up the errors?
我的架構不會接受數據中的錯誤,有明顯的理由嗎? 請參閱下面的內容,本質上是我創建的限制,在給出其他信息后應該會出現錯誤,但我的情況並非如此。 它看似有效。 在這里,我使用了字符串類型並對其進行了枚舉。 它應該引發驗證錯誤,因為在某些地方拼寫不正確。
Shorten version:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Midterm">
<xs:complexType>
<xs:sequence>
<xs:element name="StudentData" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Gnumber"/>
<xs:element type="xs:string" **name="ResidenceStatus"/>
**<xs:simpletype>
<xs:restriction base="xs:string">
<xs:enumeration value="In-state"/>
<xs:enumeration value="Out-of-state"/>
</xs:restriction>
</xs:simpletype>****
<xs:element type="xs:string" name="FirstName"/>
<xs:element type="xs:string" name="MiddleInitial"/>
<xs:element type="xs:string" name="LastName"/>
<xs:element type="xs:string" name="DOB"/>
<xs:element type="xs:string" name="ProgramName"/>
<xs:element type="xs:string" name="Concentration"/>
<xs:element type="xs:float" name="StartYear"/>
<xs:element name="course">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Department"/>
<xs:element type="xs:float" name="CatalogNumber"/>
<xs:element type="xs:string" name="Semester"/>
<xs:element type="xs:float" name="Year"/>
<xs:element type="xs:string" name="LetterGrade"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML數據
<Midterm>
<StudentData>
<Gnumber> G12654312 </Gnumber>
<ResidenceStatus> In-state </ResidenceStatus>
<FirstName> ALBERTO </FirstName>
<MiddleInitial> L </MiddleInitial>
<LastName> SMITH </LastName>
<DOB> 2/3/1981 </DOB>
<ProgramName> MS Health Informatics </ProgramName>
<Concentration> Data analytics </Concentration>
<StartYear> 2014 </StartYear>
<course>
<Department> HAP </Department>
<CatalogNumber> 463 </CatalogNumber>
<Semester> SPRING </Semester>
<Year> 2014 </Year>
<LetterGrade> B+ </LetterGrade>
</course>
</StudentData>
</Midterm>
嘗試使用XSD驗證示例XML時,它引發了一些錯誤,因此我無法重現您的問題,只能修復XSD的錯誤。 我用了這個命令
xmlstarlet val --err --xsd source.xsd input.xml
驗證您的XSD。 XSD-1.0似乎足以驗證它,因此不需要XSD-1.1處理器。
您的源XML問題之一似乎是ResidenceStatus
價值的主要和尾隨空格。
將XSD應用於XML會導致錯誤,直到我修復了ResidenceStatus
的定義。 到目前為止,我無法確定這是否由於您的XSD處理器而發生。
但您可以嘗試將定義修復為
<xs:element name="ResidenceStatus">
<xs:simpleType>
<xs:restriction base="normalized">
<xs:enumeration value="In-state"/>
<xs:enumeration value="Out-of-state"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
並在xs:schema
的根級別末尾添加normalized
的類型定義:
<xs:simpleType name="normalized">
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
這個名為normalized
simpleType
將刪除元素值的前導和尾隨空格,以便枚舉匹配。
PS:您的XSD有拼寫錯誤:
ResidenceStatus
<xs:simpletype>
應該是<xs:simpleType>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.