1

这是场景

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

  1. -->

  2. <![CDATA[]]>

  3. ?

使用 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 个默认选择。为什么会这样?

4

2 回答 2

1

我假设在第一种情况下,您已经输入了and标记<之间的内容,因为 for eg 仅在文档​​元素内容中有效。<xs:schema></xs:schema>

由于xs前缀没有绑定到任何命名空间,或者通常是一个 VS 没有 XSD 的命名空间,因此 Intellisense 处理器并不真正知道要提出什么建议,超出任何 XML 的预期;因此,你看到的 3 件事。

当您<在 上方键入时,编辑器<xs:schema>不受上下文约束(如先前<xs:schema>由中foo.xsd全局元素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 作为一种更好的方法,以避免在某种程度上造成这里造成的混乱。

于 2012-09-07T13:59:04.373 回答
0

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

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

xs:schema到文档的根元素 ( )。正如 Petru Gardea 所指出的,只有当编辑器对命名空间有一些内置知识时,这才会产生启用智能感知的效果。但是,即使它没有打开智能感知,如果您想要一个符合标准的 XSD 模式文档,声明命名空间也是必要的。

于 2012-09-09T15:52:28.903 回答