2014-04-25 44 views
0

我正在爲一個工作項目首次使用XML。我覺得我已經掌握了基礎知識,但還有一件事我仍然在撓頭。如果你是using an schema to designate a namespace,XML解析器如何知道在哪裏找到模式文件,以便它可以驗證饋送到它的內容?我從一個層面得到了這一點,唯一重要的是具有全局非唯一名稱的元素與它們唯一的名稱空間相關聯,但解析器不必知道元素標記是否實際上是名稱空間會員?考慮到名稱空間的命名約定通常是一個URL(可能)與所討論的模式沒有任何關係,而不是作爲一個唯一的字符串,那麼到底發生了什麼呢?換句話說,需要驗證XML文件的解析器如何找到與該文件關聯的模式?XML解析器如何知道在哪裏可以找到模式文件?

回答

1

有許多可能的機制,它取決於您正在使用哪種模式處理器。模式處理有時與XML解析集成,但概念上它是一個獨立的操作,可以獨立完成。

許多人使用但我不太喜歡的一種方法是xsi:schemaLocation屬性,其中XML實例文檔本身定義了從命名空間URI到模式位置的映射。我不喜歡它,因爲如果你正在驗證一個文檔,你不應該相信它足以告訴你什麼模式用於驗證。

大多數架構處理器可能有某種API或命令行界面,允許您提供架構位置。例如,如果你使用撒克遜那麼它的

...Validate -s:source.xml -xsd:schema.xsd 

其中schema.xsd是包括/進口所需的任何其他模式文檔的頂層模式文檔。這裏沒有明確的命名空間綁定:Saxon將讀取提供的模式文檔並找出哪些定義適用於哪些命名空間。

+0

neato-burrito!好吧,據我瞭解,XML文件本身可能指向一個模式文件,但這是不可取的。首選的方法是將解析器指向文件位置,以便當它讀取XML文件中的名稱空間標記時,可以將它們與模式文件中的'targetNamespace'標記匹配並驗證。謝謝你爲我清理那個!教程文檔在闡明這種情況的過程中並不是那麼有幫助:-p –

相關問題