我有以下xml:
<MyField>
<FieldName>Blah</FieldName>
<ValueFormatting xsi:type="DateFormatter">
<Format>dd/MM/yy</Format>
</ValueFormatting>
</MyField>
在这个XSD中,我如何限制或限制为ValueFormatting元素的xsi:type
属性提供的值,因为我有一个有效的四种或五种类型的列表(即TextFormatter,NumberFormatter, DateFormatter等)?
另外,在我的XSD中,如何强制属性名称为“xsi:type”?相反,我可能会因为“类型”的属性名称而逃脱,但如果在其他名称空间中声明“type”,我可能会冒险发生冲突吗?
谢谢!
答案 0 :(得分:3)
要限制“type”属性的允许值,请在“type”属性的XSD定义中使用标记。
对于属性名称本身,XML需要定义使用给定前缀的命名空间(默认或其他),然后XSD需要在“type”属性的“targetNamespace”属性中指定相同的命名空间定义。你不能强制XML专门使用“xsi”前缀(事实上,无论如何都保留了“xsi”前缀),但你可以强制它指向哪个命名空间以确保XML使用你的“type”属性而不是别人的。
例如:
<xsd:element name="ValueFormatting">
<xsd:complexType>
<xsd:attribute name="type" minOccurs="1" maxOccurs="1" targetNamespace="http://...">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="TextFormatter" />
<xsd:enumeration value="NumberFormatter" />
<xsd:enumeration value="DateFormatter" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
...
</xsd:complexType>
</xsd:element>
<MyField>
<FieldName>Blah</FieldName>
<ValueFormatting xmlns:myns="http://..." myns:type="DateFormatter">
<Format>dd/MM/yy</Format>
</ValueFormatting>
</MyField>