此问题询问有关以XML表示NULL的正确方法: What is the correct way to represent null XML elements?
可接受的答案似乎是提供属性xsi:nil =“ true”是显式提供空内容的最佳方法。
另一个问题是关于本教程的,有关如何在XSD中声明一个nilable元素并提供一个元素:
http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html
鉴于该信息,我相信我正在遵循准则,但是我的XSD验证失败。这是一个非常简单的XML,第二个子元素为nil >
<?xml version="1.0"?>
<plant xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<genus>GenusValue</genus>
<species xsi:nil="true" />
</plant>
这是我认为应该验证的XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="plant">
<xs:complexType>
<xs:sequence>
<xs:element name="genus">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="60"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="species" nillable="true">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="60"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ColdFusion2016(XmlValidate())中的验证功能失败(并没有非常有用的错误消息)。 Notepad ++(具有已安装的XML验证工具)也将通过验证失败,并显示错误消息:
Validation of current file using XML schema:
ERROR: Element 'species', attribute '{https://www.w3.org/2001/XMLSchema-instance}nil': The attribute '{https://www.w3.org/2001/XMLSchema-instance}nil' is not allowed.
生成XML的代码不在我的控制之下。我已经弄清楚了如何验证:
<species></species>
但这是一个不同的问题-这不是当前提供XML的方式。 (因此,除非使用如上所述的验证标签,否则有关具有空字符串,minOccurs等的并集的解决方案将无济于事。)
也许我只是缺少或误解了有关XSD的某些信息? (这似乎也遵循此处给出的文档:https://www.w3schools.com/xml/el_element.asp,尽管它们实际上并未显示提供xsi:nil =“ true”值的XML。)
zvon示例正在将一个具有子对象的标签设置为nillable,而我尝试设置为nillable的标签是其他东西的孩子,并且本身没有子元素,但是似乎我仍在关注的功能部分zvon示例演示了什么?
帮助?!? ;)
谢谢。
答案 0 :(得分:1)
至少有三种常见的方式来表示XML中的缺失值:
(a)完全省略元素 (b)包含元素,但将其内容留空 (c)包含元素,将其内容留空,并添加属性xsi:nil =“ true”
这些都不是普遍优于其他。就个人而言,我通常会发现(a)最方便,但其他人可能会不同意。有人会认为您需要区分不同类型的空值:(a)已知一个人没有中间名,而(b)一个人的中间名是未知的。
您的示例中的错误与这些设计注意事项无关。您只是弄错了名称空间。 https://www.w3.org/2001/XMLSchema-instance
应该是http://www.w3.org/2001/XMLSchema-instance
。