Regex 在XSD元素名称中使用正则表达式
我正在尝试为我的XML代码实现一个XSDRegex 在XSD元素名称中使用正则表达式,regex,xml,xsd,Regex,Xml,Xsd,我正在尝试为我的XML代码实现一个XSD </transition> <!--The list of automata--> <Machine0/> <Machine1/> <Machine2/> <Machine3/> </automaton> </structure> 首先,请注意: 最重要的是,如果您仍然对机器元素的命名拥有设计控制权,请务必
</transition>
<!--The list of automata-->
<Machine0/>
<Machine1/>
<Machine2/>
<Machine3/>
</automaton>
</structure>
首先,请注意:
机器
元素的命名拥有设计控制权,请务必意识到,您应该有很好的理由偏离高级设计模式,在这种模式中,元素位置是隐含的,而不是在元素名称中明确表示的。我喜欢xs:assert
,所以我不喜欢任何人给XSD工作组成员<强>;-)强>xs:assert
,而不是xs:assert
(常见打字错误)xs:pattern
不同,fn:matches()
不会自动锚定其模式的开始和结束MachineN
元素,否则需要processContents=“lax”
或=“skip”
XSD 1.1
然后,这个XML
有效案例#0
<?xml version="1.0" encoding="UTF-8"?>
<r>
<Machine0/>
<Machine1/>
</r>
根据XSD将有效,但是这些XML文档
无效案例#1
<?xml version="1.0" encoding="UTF-8"?>
<r>
<xMachine0/>
<Machine1/>
</r>
无效案例#2
<?xml version="1.0" encoding="UTF-8"?>
<r>
<Machine0x/>
<Machine1/>
</r>
无效案例#3
<?xml version="1.0" encoding="UTF-8"?>
<r>
<Machine/>
<Machine1/>
</r>
将根据请求无效。谢谢您的回答,但我对xsd和xml的使用还很陌生,您的代码给了我一个错误:无效。错误-第35行,第40行:org.xml.sax.SAXParseException;行号:35;列号:40;src resolve:无法将名称“rType”解析为a(n)“类型定义”组件。错误-第36行,第34行:org.xml.sax.saxpasseeption;行号:36;列号:34;s4s elt必须匹配。1:“序列”的内容必须匹配(注释?,(元素|组|选择|序列|任意)*)。从:complexType开始发现了一个问题。我提供的XML和XSD是正确的,并且已经过验证。您提到的错误显然与我提供的XSD不一致,因为它们列在第35行和第36行,我的答案XSD有一半行。您在根据缩短的示例I'v更新实际XSD时出错e提供。首先检查
@targetNamespace
并相应地更新@ref
。如果您仍然有问题,请发布一个新问题,因为在注释中跟踪此问题不会很好。同时确保您使用的是支持XSD 1.1的处理器。我希望我已经帮助您了解有关ASE的问题的实质通过正则表达式对元素名称进行断言。这是对一个错误问题的令人印象深刻的回答。(这正是为什么一些工作组成员不愿意接受XSD 1.1中的断言——这使得许多糟糕的设计更容易构建。)添加注释1,以解决@C.M.Sperberg-McQueen的基本设计考虑,我本来没有提到。谢谢!可怕的设计。为什么要将机器的位置编码为其名称的一部分?消费代码是否太弱,无法保持运行计数?你应该做的不是解决问题,而是再次推回我知道这是一个糟糕的设计,我展示的代码是xml代码的一部分,不是我的设计,我需要为xml代码创建xsd,但我解决了它!
<?xml version="1.0" encoding="UTF-8"?>
<r>
<Machine0x/>
<Machine1/>
</r>
<?xml version="1.0" encoding="UTF-8"?>
<r>
<Machine/>
<Machine1/>
</r>