2011-08-05 35 views
0

我有一個爲消息傳遞應用程序定義的XSD。作爲消息有效載荷的一部分,我需要爲我的一個元素要求內容是XSL樣式表。這稍後用於應用​​XSL轉換來生成最終的格式化輸出。請注意,XSL樣式表的有效載荷是最終用戶的決定,因此我不能簡單地使XSD驗證其內容。理想情況下,如果存在HTML的XSD,那將是非常好的,因爲我只是將它用作樣式表中非XSL內容的命名空間!XSD:Visual Studio 2010中的XSL樣式表子元素警告

因此,我這樣做(這只是XSD的一部分,但你的想法):

<?xml version="1.0" encoding="Windows-1252"?> 
<xs:schema targetNamespace="http://schemas.mycorpname.com/notification" 
      attributeFormDefault="unqualified" elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns="http://schemas.mycorpname.com/notification"> 

     <xs:import namespace="http://www.w3.org/1999/XSL/Transform" /> 
     <xs:complexType name="renderinginstructions"> 
      <xs:sequence> 
       <xs:element ref="xsl:stylesheet"></xs:element> 
      </xs:sequence> 
     </xs:complexType> 
</xs:schema> 

這個偉大的工程,並迫使消費者包括<renderinginstructions>元素內的XSL樣式表。

大多數情況下,XSL樣式表應包含標籤以輸出有效的HTML文檔。然而,當我把孩子元素融入到樣式表的定義,我從Visual Studio此錯誤:(!而不是任何其他內容)。如果我想需要嵌入式XSL樣式表的存在

enter image description here

,我是否正確創建了我的XSD?我還可以做些什麼?我不喜歡這個警告。

以下是引發此警告的文檔類型示例。

注意:在樣式表中,如果我使用xmlns =「」,則只會收到警告。如果我不指定一個默認的命名空間,我沒有得到警告,但我得到一個「消息」從Visual Studio聲明:

「找不到架構信息元素 ‘http://schemas.mycorpname.com/notification:html’」 。

因此,與xmlns="",我得到一個警告。沒有它,我會得到大量的「消息」,所有這些都與xsl:template的子元素有關。 XSLT的目的不是能夠在文檔中添加大量各種元素嗎? XSLT獨立時不受模式驗證嗎?

<?xml version="1.0"?> 
<notification xmlns="http://schemas.mycorpname.com/notification"> 
    <renderinginstructions> 
     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns=""> 
        <xsl:template match="/"> 
         <html> 
          <head>This is the head</head> 
          <body>This is the body.</body> 
         </html> 
        </xsl:template> 
       </xsl:stylesheet> 
    </renderinginstructions> 
</notification> 
+0

Tricky one ..你有沒有嘗試在你的'xsl:stylesheet'元素中放置html命名空間而不是xmlns =「」? – Flynn1179

+0

這是個好主意,我研究了這一點,但是我找不到HTML的XSD!如果你知道這個URI,我一定會添加它並且給這個鏡頭! –

+0

''我認爲你可以通過在VS中創建一個新的html文檔來實際找到它,它可能會默認置頂。 – Flynn1179

回答

0

只是爲了更新這個:我最後只是處理警告。