XSD 1.1如何限制connected_condition下子元素总属性数不超过2且不影响其他元素?
实现方案
该校验逻辑完全可以通过assert实现,核心思路是仅统计<connected_condition>下所有子<properties>的配置属性总和,不涉及卡牌本身的<properties>校验。
核心校验规则
- 仅作用于
<connected_condition>节点的子<properties>元素,不限制卡牌根节点下的<properties>属性数量 - 对每个子
<properties>,统计type/color/number三类属性中已配置(非空)的数量 - 所有子
<properties>的属性数累加总和≤2
代码示例(Python为例)
针对JSON格式卡牌数据
def validate_connected_condition(card: dict): # 无connected_condition节点无需校验 if "connected_condition" not in card: return total_attr = 0 # 遍历所有子properties for prop in card["connected_condition"].get("properties", []): # 统计当前properties的有效配置属性数 total_attr += sum(1 for k in ["type", "color", "number"] if k in prop and prop[k] is not None) # 断言校验 assert total_attr <= 2, f"<connected_condition>子属性总数超限:当前{total_attr}个,最多允许2个"
针对XML格式卡牌数据
import xml.etree.ElementTree as ET def validate_connected_condition_xml(card_root: ET.Element): cond_node = card_root.find("connected_condition") if not cond_node: return total_attr = 0 for prop_node in cond_node.findall("properties"): total_attr += sum(1 for k in ["type", "color", "number"] if prop_node.get(k) is not None) assert total_attr <= 2, f"<connected_condition>子属性总数超限:当前{total_attr}个,最多允许2个"
补充说明
- 断言默认仅在调试模式生效,生产环境如需强制拦截,可将assert替换为显式的异常抛出逻辑
- 若使用其他技术栈(JS/Java/C#等),仅需调整遍历、属性读取的语法,核心的计数+判断规则无需修改
内容的提问来源于stack exchange,提问作者Daniel Janz
相关产品推荐
相关产品推荐

