如何在XML文档中使用本地机器上的Schema

gro*_*rtn 24 xml validation xsd

我对XML/Schema文件的了解有限.

所以这应该是一个相当简单的问题.如何为schemaLocation指定本地文件?

<?xml version="1.0"?>

<note
  xmlns="http://www.w3schools.com"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.w3schools.com note.xsd">
  ...
</note>
Run Code Online (Sandbox Code Playgroud)

这是来自www.w3.org的示例,指定架构的部分位于schemaLocation中.我试着查看文档,但是如何指定本地文件?

就像是

xsi:schemaLocation="../relativepath/schemafolder not.xsd">
Run Code Online (Sandbox Code Playgroud)

谢谢

biz*_*lop 24

schemaLocation 必须包含由空格分隔的两个值:名称空间URI(这不会更改)和模式URL.

所以在你的情况下

 xsi:schemaLocation="http://www.w3schools.com ../relativepath/schemafolder/note.xsd">
Run Code Online (Sandbox Code Playgroud)

不要被名称空间URI作为一个看似有效的http url所迷惑,这只是XML人发明的小麻烦之一.:)

实际上,您可以在一个命名空间中指定模式schemaLocation:

xsi:schemaLocation="namespace1 schemaurl1 namespace2 schemaurl2 ..."
Run Code Online (Sandbox Code Playgroud)

(我还建议您小心使用相对路径:虽然它们在您移动文件时仍非常有用,但仍然使用相同的代码(或工具)验证它,当您在应用程序中部署验证代码时,"工作目录" "可能不是你所期望的.这并不是说你不应该使用相对路径,只是当你得到一个关于未找到的模式的奇怪外观时才意识到这一点."

  • @grobartn这根本不是一个链接.它看起来像一个链接,但实际上它只是一个名字.它被称为命名空间URI(不是URL!),它与链接无关.schemaLocation的第二个参数是指向模式文件的url(或路径). (2认同)
  • @biziclop - 名称空间URI不仅仅是"名称",它必须是有效的URI.但是,你是对的,因为使用语法上有效的HTTP URL(而URL只是URI的一个子集)往往会让人感到非常困惑.我一直更喜欢使用URN的OASIS/ODF方法. (2认同)