我想知道是否可以使用XML Schema按模式验证属性名称。换句话说,我想使用模式(例如正则表达式)描述给定类型的一组可接受的属性名称。
假设我有以下要验证的XML数据:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://mywebsite.com/myns">
<somename data-someattr1="value1"
data-someattr2="value2"/>
</root>
如何描述名称为“somename”的元素的属性只能包含名称以“data - ”开头的属性? 这可能吗?
答案 0 :(得分:3)
尝试以下方面的内容:
<xs:simpleType name="somename">
<xs:restriction base="xs:string">
<xs:pattern value="^data-"/>
</xs:restriction>
</xs:simpleType>
正则表达式^data-
表示“以'data-'开头”,视需要而定。
修改强>
我误解了这个问题,对不起......这是一个更相关的答案:
据我了解,您无法在XSD中模式匹配属性名称 - 因此单独使用XSD无法解决您的问题。但是,您可能会发现以下XML架构元素之一有助于构建解决方案:
XML选择(http://www.w3schools.com/schema/el_choice.asp) - 所以您可以(可能?)明确列出所有“数据 - ”属性名称。
XML any(http://www.w3schools.com/schema/schema_complex_any.asp) - 这样您就可以通过其他方法执行任何其他验证步骤。
答案 1 :(得分:1)
好吧,因为据说你无法验证属性名称,但你仍然可以采用不同的方式将xml转换为某种形式:
<root>
<element>
<data name='data-attr1' value='v1'/>
<data name='data-attr2' value='v2'/>
<data name='data-attr3' value='v3'/>
</element>
</root>
现在您可以验证假属性名称 - data name='data-attr1'
以及值。您的架构可能如下所示:
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' elementFormDefault='qualified' attributeFormDefault='unqualified'>
<xs:element name='root'>
<xs:complexType>
<xs:sequence>
<xs:element name='element'>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs='10' name='data'>
<xs:complexType>
<xs:attribute name='name' use='required'>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:pattern value='data-.*' />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='value' use='required' />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>