我有一個爲消息傳遞應用程序定義的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樣式表的存在
,我是否正確創建了我的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>
Tricky one ..你有沒有嘗試在你的'xsl:stylesheet'元素中放置html命名空間而不是xmlns =「」? – Flynn1179
這是個好主意,我研究了這一點,但是我找不到HTML的XSD!如果你知道這個URI,我一定會添加它並且給這個鏡頭! –
''我認爲你可以通過在VS中創建一個新的html文檔來實際找到它,它可能會默認置頂。 – Flynn1179