【问题标题】:What is the difference between xsd and xsi?xsd 和 xsi 有什么区别?
【发布时间】:2016-12-08 08:43:10
【问题描述】:

XML Schema DocumentXML Schema Instance 之间到底有什么区别?

  • xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

请详细说明。

【问题讨论】:

标签: xml xsd xml-namespaces xsd-validation xml-validation


【解决方案1】:

xsdxsi 相似之处

  • 两者都是XML namespace prefixes,是an的缩写 XML namespace
  • 和所有命名空间前缀一样,两者都是任意命名的;其他命名空间前缀缩写 同样可以使用。但是,两个前缀都是conventional,因此 推荐的。 (xsd 的另一种常规替代方法是 xs。)

xsdxsi 区别

另见

【讨论】:

  • .NET 的 XmlSerializer 似乎引入了这些命名空间前缀,尽管 (1) 它们没有在它生成的文档中使用,并且 (2) 没有模式来验证它生成的文档。我的结论是,这一切都是按照惯例,我认为这很有意义,如果不是很有意义的话。
  • 包含任何类型的未使用的命名空间前缀声明是不必要的,但没有错。任何包含未使用的命名空间前缀声明的序列化程序都不会像它应该的那样简洁。
  • 实际上,XmlSerializer 通过 xsi:type 属性使用 XMLSchemaInstance 命名空间来处理抽象类。也可以使用 XSD.exe 生成架构。我从未见过直接嵌入在序列化 XML 文件中的模式,但如果这也是可能的,我也不会感到惊讶。
  • 有Schema Namespace,有Instance Namespace,那么Default Namespace有什么用呢?
  • @MinhNghĩa:通过xmlns=" 在元素上指定默认命名空间 default namespace URI " 并放置该元素及其后代默认情况下,在给定的命名空间中。默认命名空间可以在任何 XML 文档中声明,甚至包括 XSD,它可以用来避免必须在整个 XSD 的元素上指定 xsdxs 命名空间前缀。另见Namespace related attributes in XML and XML Schema (XSD)
【解决方案2】:

http://www.w3.org/2001/XMLSchema

简单版本:这是在 XML 模式 (XSD) 中使用的命名空间。 XML 模式用于描述 XML 实例文档中的有效内容。

不太简单的版本:这是描述 XML Schema 结构的 XML Schema 的命名空间。换句话说,一个描述自身的模式。

必须使用此架构中定义的类型编写 XML 架构 (XSD)。

例如。

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="MyElement" type="xs:string" />
</xs:schema>

http://www.w3.org/2001/XMLSchema-instance

这是在 XML 实例文档中使用的命名空间,用于向正在处理它的 XML 解析器提供附加数据。它描述了 XML 解析器可以用来协助其验证的属性 xsi:schemalocation、xsi:noSchemalocation、xsi:type 和 xsi:nil。

例如。

<MyElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xsi:noNamespaceSchemaLocation="MySchema.xsd">
    string
</MyElement>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2012-01-05
    • 1970-01-01
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    相关资源
    最近更新 更多