我有一个为消息传递应用程序定义的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