鑑於以下代表性片段:XML沒有驗證對XSD
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:j="http://foo" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://foo" elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.2">
<xs:element name="Event">
<xs:annotation>
<xs:documentation>The Incident beginning and end date and time</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="j:EventType"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="EventType">
<xs:sequence>
<xs:element ref="j:EventDate" minOccurs="0"/>
<xs:element ref="j:EventTime" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="j:EventType" use="required"/>
</xs:complexType>
<xs:attribute name="EventType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Beginning"/>
<xs:enumeration value="Ending"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
下面的XML不驗證。具體來說,它不會驗證EventType屬性。
<?xml version="1.0" encoding="utf-8"?>
<SomeDoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://hostedbykarpel.com/Schemas/ReferralDocument_2">
<Event EventType="TypeOne">
<EventDate>2013-12-18</EventDate>
<EventTime>00:15:28</EventTime>
</Event>
</SomDoc>
但是,如果我明確添加元素中的命名空間它的工作原理:
<Event a:EventType="TypeOne" xmlns:a="http://foo">
<EventDate>2013-12-18</EventDate>
<EventTime>00:15:28</EventTime>
</Event>
命名空間在文檔的根已聲明。爲什麼我需要再次指定它才能讓屬性顯示出來? Event元素本身驗證就好,只是EventType屬性不會。
請發佈一個「代表性片段」,它可以自己站立以便於複製您的問題。您的XSD引用不存在的元素「j:EventDate」和「j:EventTime」。 – kjhughes
@kjhuges這會爲樣本增加50行。這些可以很容易地用字符串類型替換。問題與此無關。它也證明這不是一個問題,更多的是與XML規範相沖突。見Michael Gunter的回答。 – kettch
我沒有聲稱這是你的問題 - 只是想幫助你提高花時間幫助你的人的機率。您應該發佈展示您的問題的最小完整示例。期待我們將事情剔除出來,修正錯別字('')等等,這使我們不太可能仔細觀察。謝謝。 – kjhughes