簡體   English   中英

為什么我的XML模式無法提取錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM