我正在尝试为我传递的一段代码生成的XML创建XML Schema.我将描述我的问题的简化版本.假设这段代码生成的XML文件描述了一个文本文档; 它看起来像这样:
<document>
<r1>A line of text</r1>
<r2 style="bold">Another line which is bold</r2>
<r3>Yet another line</r3>
</document>
Run Code Online (Sandbox Code Playgroud)
等等.我知道不是最好的设计 - 如果行号是属性会更好,但这就是我必须使用的.它代表了行号,这就是问题所在.有没有办法编写一个Schema,让我为元素名称指定一个正则表达式(或类似的)?我希望XSD文件看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/SimpleSchema"
xmlns:tns="http://www.example.org/SimpleSchema"
elementFormDefault="qualified">
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:element name="rX" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="style" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
...其中第9行的"rX"表示需要表达" 以r开头并以X结尾的名称,这是一个整数 ".
我宁愿避免自己修复生成代码,所以我想先看看是否可以编写合适的XML Schema.在此先感谢大家.
XSD要求按字面指定元素名称; 我认为你想到的那种宣言不受支持.
正如您所描述的(名称以r开头并以X结尾,这是一个整数),您要编写的声明将在模式中生成无限数量的元素组件; 我所知道的唯一支持这种事情的语法形式是由Aard van Wijngaarden为Algol 68开发的两级语法.
因此,在短期内,您最好的选择似乎是更改生成代码,或者为您想要的声明创建自己的表示法,并从中生成合法的XSD架构文档.