2011-08-05 33 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

只是为了更新这个:我最后只是处理警告。