关于xsi:type的作用机制及同命名空间声明有效性的技术咨询
关于XML中xsi:type的作用与合法性问题
核心疑问
xsi:type(原文误写为xst:type)是会改变被处理的元素本身,还是仅更改元素数据的类型值?另外,能否在元素所在的同一命名空间内声明xsi:type的值?
以Dublin Core元素为例,基础写法:
<dcterms:dateCopyrighted>2022</dcterms:dateCopyrighted>
合法性判断
以下代码是否合法?
<dcterms:dateCopyrighted xsi:type="dcterms:W3CDTF">2012-11-11</dcterms:dateCopyrighted>
(注:原代码中xsi:type:是笔误,正确写法应为xsi:type="...")
这个写法合法,只要满足两个前提:
- 已正确声明
xsi命名空间(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"); dcterms:W3CDTF是Dublin Core的XSD中定义的、且为dateCopyrighted元素默认类型的派生类型(比如从默认字符串类型扩展或限制而来)。
xsi:type的实际作用
xsi:type的核心作用是覆盖元素的默认类型约束,而非替换元素本身:
- 元素名称(
dcterms:dateCopyrighted)保持不变,它依然是该元素,只是处理时会按照dcterms:W3CDTF的类型规则校验和解析内容; - 元素的身份不会被替换,仅数据的校验规则、解析方式被修改。
举个假设性例子(实际Dublin Core规则并非如此):如果dcterms:dateCopyrighted默认要求值为普通字面量字符串,而dcterms:W3CDTF是要求符合W3C日期格式的非字面量类型,添加xsi:type="dcterms:W3CDTF"后:
- 元素还是
<dcterms:dateCopyrighted>,不会变为其他元素; - 内容
2012-11-11会按照W3CDTF的类型规则被校验,必须符合该类型的格式要求,不再遵循默认的字面量规则。
对于涉及不同complexType的场景,逻辑一致:xsi:type只是让元素使用指定的complexType约束自身结构,元素本身的名称和身份不会改变。
内容的提问来源于stack exchange,提问作者Hugh
相关产品推荐
相关产品推荐

