Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在XSD元素名称中使用正则表达式_Regex_Xml_Xsd - Fatal编程技术网

Regex 在XSD元素名称中使用正则表达式

Regex 在XSD元素名称中使用正则表达式,regex,xml,xsd,Regex,Xml,Xsd,我正在尝试为我的XML代码实现一个XSD </transition> <!--The list of automata--> <Machine0/> <Machine1/> <Machine2/> <Machine3/> </automaton> </structure> 首先,请注意: 最重要的是,如果您仍然对机器元素的命名拥有设计控制权,请务必

我正在尝试为我的XML代码实现一个XSD

    </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>