的概念,如果我的XSL有以下標題,我沒有得到任何錯誤:XML - 試圖掌握的命名空間的URI
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
但是,如果我改變了xsl的命名空間URI ...:
<xsl:stylesheet version="1.0" xmlns:xsl="https://www.w3schools.com/xml/xml_namespaces.asp"
...我得到一個錯誤:
javax.xml.transform.TransformerConfigurationException
我想我不明白,一個命名空間URI的概念,因爲我雖然它可能是任何URL(不提及URNs),只要它在XML/XSL文檔中是唯一的。很明顯不是。我試圖改變URI來測試這個理論。
在https://www.w3schools.com/xml/xml_namespaces.asp,我們可以看到下面的語句:
的命名空間URI不使用分析器來查找信息。
使用URI的目的是給命名空間一個唯一的名稱。
但是,公司經常使用名稱空間作爲指向包含名稱空間信息的網頁的指針。
第一條語句意味着我們不關心URI指向的網頁是什麼,爲什麼我不能將它設置爲指向我想要的任何頁面,或者甚至不存在不存在的頁面?爲什麼它必須特別是http://www.w3.org/1999/XSL/Transform?
此外,以後在上述鏈路上我們可以看到:
統一資源標識符(URI)是個字符的字符串,其標識互聯網資源。
因爲這一點,因爲「使用URI的目的是給命名空間一個唯一的名字」,這是否意味着一個命名空間URI必須是一個URL所以,(同樣不提這是我絕對無法捉摸的URN),這意味着我不能設置像這樣的命名空間:
xlmns:foo="A_random_but_unique_string"
我會用這句話結束從同一個鏈接:
命名空間「 http://www.w3.org/1999/XSL/Transform「標識HTML文檔中的XSLT元素
因此,現在這意味着解析器必須使用名稱空間URL來查找信息(名稱空間的元素),否?
謝謝你的回覆。 如果它甚至不需要從這個URL中提取任何信息,那麼它爲什麼期望URI http://www.w3.org/1999/XSL/Transform標識的名稱空間中的樣式表元素?我的意思是,Java程序沒有這個URL的樣式表元素的知識!無論URI如何,樣式表都是樣式表。 – Flyout
因爲樣式表不是隨機/自定義格式,而是w3標準。 Java已經有了這個標準的模式定義(XSD),因此在準備轉換時,它會嘗試查看它是否符合期望。 它不知道如何從w3schools中解釋樣式表,但它知道它可以解析/解釋驗證到w3.org樣式表架構(它由唯一確定的URI ...)的XML文件。 – Fabian
較短的回答:根據樣式表的XSD,帶有w3schools URI的樣式表無效。 – Fabian