引用自定义xsd会导致intellisense仅在模式之上工作

时间:2012-09-07 03:08:58

标签: xml xsd

这是方案

  1. 在C:\ Users \ Win7Guru \ Documents \ Visual Studio 2012 \ Projects \ foo.xsd
  2. 中创建名为foo.xsd的XSD架构
  3. 创建新的xml文件
  4. 在xml文档的顶部添加<?xml version="1.0" encoding="utf-8"?
  5. 添加架构代码<xs:schema xmlns="C:\Users\Win7Guru\Documents\Visual Studio 2012\Projects\foo.xsd"和结束代码</xs:schema>
  6. 输入<并等待intellisense出现,但所有显示的都是默认选择

    1. -->

    2. <![CDATA[]]>

    3. ?

    4. 使用Visual Studio 2012 RTM

        

      当我在架构上方尝试第5步时,例如

           
          

      1. <?xml version="1.0" encoding="utf-8"?>

               

      2. <------

               

      3. <xs:schema xmlns="C:\Users\Win7Guru\Documents\Visual Studio 2012\Projects\foo.xsd">

               

      4. </xs:schema>

        

        

      我获得了自定义选项,而不是3个默认选择。为什么会这样?

2 个答案:

答案 0 :(得分:1)

我认为在第一种情况下,您已在<<xs:schema>代码之间输入了</xs:schema>,因为例如只会在文档元素内容中有效。

由于xs前缀未绑定到任何命名空间,或者通常一个VS没有XSD的命名空间,因此智能感知处理器并不知道除了什么之外建议什么。预期在任何XML中;因此,你看到的3件事。

当您在<上方输入<xs:schema>时,编辑器不受上下文约束(如先前<xs:schema>所示),因此VS将浏览该文档的所有已加载XSD (foo.xsd是其中之一)除了XML默认设置外,还为foo.xsd中的所有全局元素提供了帮助。因此你看到的东西越多。

我认为VS编辑器提供的便利似乎增加了混淆,因为它将XML命名空间URI与实际的XSD位置相关联。这很酷,但不标准。在XML命名空间的设计中,XML命名空间URI的值与以相同XML命名空间为目标的XML Schema位置之间没有关系。换句话说,已经以以下形式声明了(默认)XML命名空间:

xmlns="C:\Users\Win7Guru\Documents\Visual Studio 2012\Projects\foo.xsd"

没有标准规范可以指示处理器使用命名空间值本身一致地查找该命名空间的模式。

虽然许多人认为将名称空间URI作为解析为Internet上实际资源的URL的良好做法,但许多其他人更愿意使用URN作为更好的方法来避免在某种程度上造成这里产生的混淆。

答案 1 :(得分:0)

独立于intellisense问题,您需要将名称空间前缀xs绑定到适当的名称空间名称。所以尝试添加

xmlns:xs="http://www.w3.org/2001/XMLSchema"

到文档的根元素(xs:schema)。正如Petru Gardea指出的那样,只有当编辑器具有一些内置的命名空间知识时,这才会启用intellisense。但即使它没有打开intellisense,如果你想要一个符合XSD模式文档,则声明命名空间是必要的。