XSD: Namespace not working http://schemas.microsoft.com/2003/10/Serialization/Arrays

10 浏览
0 Comments

XSD: Namespace not working http://schemas.microsoft.com/2003/10/Serialization/Arrays

我看到这个属性的值有多个url,就像在spring中:


为什么需要它,它用于什么?Spring会访问这些url并进行验证吗?

xmlns和xsi:schemaLocation之间有什么区别?

0
0 Comments

问题的原因是,命名空间(Namespace)的URI不起作用。命名空间是XML文档中的唯一标识符,它并不一定是指向模式(Schema)的URI。

解决方法是使用xsi:schemaLocation提供实际模式的位置。xsi:schemaLocation可以在文档中提供模式文档的物理位置的提示信息。

因此,解决这个问题的方法是将xsi:schemaLocation设置为正确的模式位置,以确保命名空间能够正确关联到URI所指向的模式。

0
0 Comments

根据文档定位模式的规范,通过命名空间可能会有一个可以检索到的模式。用户社区和/或消费者/提供者协议可以建立“尝试从命名空间URL检索xsd”作为合理的默认策略的情况。如果文档的作者(无论是人还是其他实体)创建了一个具有特定模式的文档,并保证该文档的某些或全部符合该模式,则提供schemaLocation和noNamespaceSchemaLocation属性。因此,基本上只指定命名空间,您的XML可能会尝试根据该位置的xsd进行验证(即使缺少schemaLocation属性),这取决于您的“社区”。如果指定了特定的schemaLocation,则基本上意味着XML文档“应”符合该xsd,因此“请对其进行验证”(根据我的理解)。我猜测,如果您不使用schemaLocation或noNamespaceSchemaLocation属性,大部分时间它只是“不被验证”(根据其他答案,似乎Java就是这样做的)。

另一个问题是,通常在Java库中使用xsd验证时(例如,Spring配置xml文件),如果您的XML文件在一个XML文件中指定了特定的schemaLocation xsd URL,比如xsi:schemaLocation="http://somewhere http://somewhere/something.xsd",通常在您的依赖jar包中它将包含该xsd文件的副本,在资源部分,Spring具有一个“映射”功能,将该xsd文件视为映射到URL http://somewhere/something.xsd(因此您永远不会去网上下载该文件,它只存在于本地)。有关稍微更多信息,请参见https://stackoverflow.com/a/41225329/32453。

0