nillable=”true” vs minOccurs=”0″
来源:互联网 发布:激光打标机软件配套 编辑:程序博客网 时间:2024/05/21 15:39
For this post I m taking a simple example of use of nillable="true" and minOccurs="0". Take the following example.
<xs:element name="myelements"> <xs:complexType> <xs:sequence> <xs:element name="nonboth" type="xs:string"/> <xs:element minOccurs="0" name="minzero" type="xs:int"/> <xs:element name="nilint" nillable="true" type="xs:int"/> <xs:element name="nilstring" nillable="true" type="xs:string"/> <xs:element minOccurs="0" name="minzeronil" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType></xs:element>
Just ignore the meaning of what nillable and minOccurs attributes for now. You can safely say the following XML is valid for the above Schema.
<myelements> <nonboth>i can't be either nil nor skipped<nonboth> <minzero>3<minzero> <nilint><nilint> <nilstring>i can have null, but i cant skipeed</nilstring> <minzeronil>i can be skipped and have the nil value<minzeronil></myelements>
Take the first element ‘nonboth’ in the schema, It has not any minOccurs or nillable attribute. By default minOccurs equal to 1 and nillable equal to false. That mean it can’t have nil value nor it can not be removed from the xml.
Is that making an element nil and removing the element from the XML is same? No. Take the second element in the schema ‘minzerostring’. There you have minOccurs ="0" but there are no nillable="true", mean it is non-nillable. The idea is whenever you don’t want that element in your xml, you can’t have the element keeping empty like
<minzero xsi:nil="true"><minzero>
But you can remove the whole element from the XML (since it is minOccurs=0).
The opposite of the above scenario is nillable=”true” but minOccurrs != 0. Check the ‘nilint’ element in the schema. There you can’t skip the element ‘nilint’, you have to have the element <nilint/> but it can hold a nil value.
<nilint xsi:nil="true"></nilint>
or simply
<nilint xsi:nil="true"/>
Note that the correct way to declare the nil element is,
<nilint xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
You can understand why when we look at the third element ‘nilstring’. Say you set message the following element
<nilstring></nilstring>
You can say that this is not nil, this is an empty string. In fact an empty string is nil in some other language, But if we take XML Schema as a language, then for someone to be nil, it have to have the xsi:nil attribute set to “true” or “1″.
So going back to the ‘minzero’ which is non-nillable, by theory you should be able to write the following xml,
<minzero/>
Since you don’t have that xsi:nil=”1″ this is not a nil value, so the condition nillable=”false” condition is preserved. But unlike for string when you set an empty element for an integer, it doesn’t sound correct. So in practice whenever some schema says non-nillable you should set some valid value.
The last one is ‘minzeronil’ element which is both nillable=”true” and minOccurs=”0″. Whenever you don’t need to set a value for this element, you have the choice of either skipping the element or setting the value of the element to nil. It is obvious rather than setting a nil value it is better you just skip the element to make the XML shorter. This is really needed specially in web services where you need the payload to be minimum as much as possible.
Say you have to prepare the XML and you don’t have valid values for any of the element. So this can be the optimum XML you can create.
<myelements xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> <nonboth><nonboth> <nilint xsi:nil="1"/> <nilstring xsi:nil="1"></myelements>
foward from http://www.dimuthu.org/blog/2008/08/18/xml-schema-nillabletrue-vs-minoccurs0/comment-page-1/
- XML Schema nillable=”true” vs minOccurs=”0″
- XML Schema nillable=”true” vs minOccurs=”0″
- XML Schema nillable=”true” vs minOccurs=”0″
- nillable=”true” vs minOccurs=”0″
- nillable与minOccurs
- WebService对象可空的困惑,关于nillable和minOccurs
- WebService对象可空的困惑,关于nillable和minOccurs
- wsdl属性nillable和minOccurs所表示的含义
- WebService对象可空、nillable、minOccurs 、转xml字段丢失
- WebService对象可空的困惑,关于nillable和minOccurs soap java .net wsdl的区别
- javascript: null >= 0 //true
- Spring abstract="true" merge="true"
- auto_now_add=True和auto_now_add=True
- vs bool true(205)
- 关于null>=0为true
- elipse retarget="true"
- Trusted_Connect=true
- inverse=true
- activity的启动
- Jenkins生成图表插件
- sdut-2159 Ivan comes again!(set+线段树)
- Implementing Software Timers
- slidingMenu
- nillable=”true” vs minOccurs=”0″
- 利用宏实现单例(在宏中写实现方法)
- UNIX文件权限详解(尤其是SUID和SGID)
- jsoncpp linux平台编译和 arm移植
- 蓝桥杯习题
- 读书笔记---Linux常用命令解析
- 按层遍历二叉树
- 题目1134:密码翻译
- deal 用来传值的php