如何在InfoPath中将XSD内指定元素设置为可选?
解决InfoPath中XSD元素强制必填的问题
我明白你的困扰——这些初始值字段在InfoPath里被锁成必填,没法留空,问题根源其实在XSD的默认规则里:元素的minOccurs属性默认值是1,意味着该元素必须出现,所以InfoPath会自动把它们设为必填项。要让senior_initials、senior_initials2、junior_initials、junior_initials2变成可选元素,只需要在它们被引用的位置添加minOccurs="0"即可。
具体修改点
在senior_consultants和junior_consultants这两个复杂类型的<xs:sequence>内部,给目标元素加上minOccurs="0"属性:
- 对
senior_initials和senior_initials2,修改对应的<xs:element ref="..."/>标签 - 对
junior_initials和junior_initials2,做同样的修改
修改后的完整XSD代码
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- definition of simple elements --> <xs:element name="description_short"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="250"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="description_medium"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="520"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="description_long"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="3000"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="post_project"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="1000"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="author" type="xs:string"/> <!-- Author of storycard --> <xs:element name="senior_initials"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([A-Z]{2}|[A-Z]{3})(\s[A-Z]{2}|\s[A-Z]{3})?"/> <!-- Must be UPPERCASE letters and space between each set of initials--> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="senior_initials2"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([A-Z]{2}|[A-Z]{3})(\s[A-Z]{2}|\s[A-Z]{3})"/> <!-- Must be UPPERCASE letters and space between each set of initials--> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="senior_count" type="xs:positiveInteger"/> <xs:element name="junior_initials"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([A-Z]{2}|[A-Z]{3})(\s[A-Z]{2}|\s[A-Z]{3})?"/> <!-- Must be UPPERCASE letters and space between each set of initials --> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="junior_initials2"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="([A-Z]{2}|[A-Z]{3})(\s[A-Z]{2}|\s[A-Z]{3})?"/> <!-- Must be UPPERCASE letters and space between each set of initials --> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="junior_count" type="xs:positiveInteger"/> <xs:element name="orglevel"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Corporate"/> <xs:enumeration value="Division"/> <xs:enumeration value="Business Unit"/> <xs:enumeration value="Team/Product"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="service"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Cascading Strategy"/> <xs:enumeration value="Executing Projects"/> <xs:enumeration value="Managing the Organization"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="startdate"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d{2}[/]\d{2}[/]\d{4}"></xs:pattern> <!-- format DD/MM/YYYY --> <xs:length value="10"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="enddate"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d{2}[/]\d{2}[/]\d{4}"></xs:pattern> <!-- format DD/MM/YYYY --> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="confidential"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Yes"/> <xs:enumeration value="No"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="company" type="xs:string"/> <xs:element name="department" type="xs:string"/> <xs:element name="sector"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Energy"/> <xs:enumeration value="Materials"/> <xs:enumeration value="Industrials"/> <xs:enumeration value="Consumer discretionary"/> <xs:enumeration value="Consumer staples"/> <xs:enumeration value="Life sciences"/> <xs:enumeration value="Financial services"/> <xs:enumeration value="Information technology"/> <xs:enumeration value="Communication services"/> <xs:enumeration value="Utilities"/> <xs:enumeration value="Real estate"/> <xs:enumeration value="Other"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Other_sector_description" type="xs:string"/> <xs:element name="Domain"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Cyber Security"/> <xs:enumeration value="Digitilization"/> <xs:enumeration value="Other"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Other_domain_description" type="xs:string"/> <xs:element name="revenue"> <!-- Millions of DKK --> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="1-50"/> <xs:enumeration value="50-250"/> <xs:enumeration value="250-1000"/> <xs:enumeration value="1000-5000"/> <xs:enumeration value="5000-15000"/> <xs:enumeration value="15000+"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="employees"> <!-- Number of employees --> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="1-50"/> <xs:enumeration value="50-500"/> <xs:enumeration value="500-2000"/> <xs:enumeration value="2000-5000"/> <xs:enumeration value="5000-10000"/> <xs:enumeration value="10000+"/> </xs:restriction> </xs:simpleType> </xs:element> <!-- definition of attributes --> <xs:attribute name="casename" type="xs:string"/> <!-- definition of complex elements --> <xs:element name="descriptions"> <xs:complexType> <xs:sequence> <xs:element ref="description_short"/> <xs:element ref="description_medium"/> <xs:element ref="description_long"/> <xs:element ref="post_project"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="senior_consultants"> <xs:complexType> <xs:sequence> <xs:element ref="senior_initials" minOccurs="0"/> <xs:element ref="senior_initials2" minOccurs="0"/> <xs:element ref="senior_count"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="junior_consultants"> <xs:complexType> <xs:sequence> <xs:element ref="junior_initials" minOccurs="0"/> <xs:element ref="junior_initials2" minOccurs="0"/> <xs:element ref="junior_count"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="project"> <xs:complexType> <xs:sequence> <xs:element ref="orglevel"/> <xs:element ref="service"/> <xs:element ref="Domain"/> <xs:element ref="Other_domain_description"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="date"> <xs:complexType> <xs:sequence> <xs:element ref="startdate"/> <xs:element ref="enddate"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="client"> <xs:complexType> <xs:sequence> <xs:element ref="company"/> <xs:element ref="confidential"/> <xs:element ref="sector"/> <xs:element ref="Other_sector_description"/> <xs:element ref="department"/> <xs:element ref="revenue"/> <xs:element ref="employees"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="storycard"> <xs:complexType> <xs:sequence> <xs:element ref="descriptions"/> <xs:element ref="client"/> <xs:element ref="project"/> <xs:element ref="date"/> <xs:element ref="senior_consultants"/> <xs:element ref="junior_consultants"/> <xs:element ref="author"/> </xs:sequence> <xs:attribute ref="casename" use="required"/> </xs:complexType> </xs:element> </xs:schema>
额外小提示
我顺手帮你删掉了XSD里重复的注释(比如重复出现的<!-- definition of simple elements -->),这些冗余内容不影响功能,但能让代码更整洁。修改后,这四个初始值字段在InfoPath里就会变成可选状态,你可以根据实际需求填写或留空了。
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

