我正在嘗試針對 XSD 檔案驗證 XML 檔案,但我添加到 XML 中的額外元素不會被識別為錯誤。
xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://myschema.test.de"
xmlns="https://myschema.test.de"
elementFormDefault="qualified">
<xs:element name="items" type="itemsType">
<xs:complexType >
<xs:sequence>
<xs:element name="item" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="id"/>
<xs:element type="xs:string" name="listrelativepath"/>
<xs:element type="xs:string" name="filename"/>
<xs:element name="fields" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="field"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element type="xs:string" name="localstorage">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--File Backup Generated 05/09/2022 16:53:53
v1.0-->
<items xmlns="http://myschema.test.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="https://myschema.test.de/xml/schema.xsd">
<item>
<ElementNotBelongingHere />
<id>1</id>
<listrelativepath>202010 H3D/Antragsakte/Externe Stellungnahme (ohne EIB,NAM,SAC)</listrelativepath>
<filename />
<fields>
<field FileLeafRef="Placeholder.docx" />
</fields>
<localstorage>C:\Users\prupprecht\Documents\20220110.txt</localstorage>
</item>
</items>
xml 驗證但有一個不屬于架構的額外元素。有任何想法嗎?
uj5u.com熱心網友回復:
請嘗試以下 XSD。
XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://myschema.test.de" xmlns:ns1="http://myschema.test.de">
<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns1:item"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns1:id"/>
<xs:element ref="ns1:listrelativepath"/>
<xs:element ref="ns1:filename"/>
<xs:element ref="ns1:fields"/>
<xs:element ref="ns1:localstorage"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="id" type="xs:integer"/>
<xs:element name="listrelativepath" type="xs:string"/>
<xs:element name="filename">
<xs:complexType/>
</xs:element>
<xs:element name="fields">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns1:field"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="field">
<xs:complexType>
<xs:attribute name="FileLeafRef" use="required" type="xs:NCName"/>
</xs:complexType>
</xs:element>
<xs:element name="localstorage" type="xs:string"/>
</xs:schema>
uj5u.com熱心網友回復:
模式本身是無效的,因此您永遠不應該使用它來驗證實體檔案。Saxon(在 Oxygen 中運行)報告:
Description: A <complexType> element must not appear as a child
of an <xs:element> with a @type attribute
Start location: 7:47
如果我修復它,我會收到一個錯誤,因為源檔案的名稱空間與架構的目標名稱空間不匹配(http 與 https)。
如果我解決這個問題,我會收到三個驗證錯誤:
Description: Attribute @schemaLocation is not allowed on element <items>
Start location: 4:151
Description: In content of element <item>: The content model does not allow element
<Q{.../myschema.test.de}ElementNotBelongingHere> to appear as the first child.
Expected <Q{.../myschema.test.de}id>.
Start location: 6:34
Description: Attribute @FileLeafRef is not allowed on element <field>
Start location: 11:50
因此,如果驗證似乎成功,我不知道您做錯了什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/472807.html
下一篇:如何在機器學習中加入驗證集?
