Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 是否使用正则表达式验证属性名称?_Regex_Xml_Xsd - Fatal编程技术网

Regex 是否使用正则表达式验证属性名称?

Regex 是否使用正则表达式验证属性名称?,regex,xml,xsd,Regex,Xml,Xsd,我想知道是否可以使用XMLSchema按模式验证属性名。换句话说,我想使用诸如正则表达式之类的模式为给定类型描述一组可接受的属性名称 假设我有以下要验证的XML数据: <?xml version="1.0" encoding="utf-8"?> <root xmlns="http://mywebsite.com/myns"> <somename data-someattr1="value1" data-someattr2="value2

我想知道是否可以使用XMLSchema按模式验证属性名。换句话说,我想使用诸如正则表达式之类的模式为给定类型描述一组可接受的属性名称

假设我有以下要验证的XML数据:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://mywebsite.com/myns">
  <somename data-someattr1="value1" 
            data-someattr2="value2"/>
</root>

如何描述名为somename的元素的属性只能具有名称以data-开头的属性?这是可能的吗?

尝试以下几点:

<xs:simpleType name="somename">
    <xs:restriction base="xs:string">
        <xs:pattern value="^data-"/>
    </xs:restriction>
</xs:simpleType>
正则表达式^data-表示根据需要以“data-”开头

编辑:

我误解了这个问题,对不起。。。以下是一个更相关的答案:

据我所知,您无法在XSD中对属性名称进行模式匹配-因此,仅使用XSD无法解决您的问题。但是,您可能会发现以下XML模式元素之一有助于构建解决方案:

XML选择-那么您可能会这样做?明确列出所有数据属性名称

XML any—这样您就可以通过其他方法执行任何附加的验证步骤


正如前面所说的,您无法验证属性名称,但您仍然可以采用不同的方式将xml转换为某种类型:

<root>
    <element>
        <data name='data-attr1' value='v1'/>
        <data name='data-attr2' value='v2'/>
        <data name='data-attr3' value='v3'/>
    </element>
</root>

解释一下。它是免费的。与以下内容相关:所给出的暂停该问题的原因不适用;这是一个非常具体的问题,有两个正确答案:在XSD1.0中,OP运气不佳,而在XSD1.1中,OP可以使用断言。哦,是的,正如迈克尔·凯在中指出的,这通常被认为是糟糕的设计。然而,它在HTML 5中的使用保证了它将在其他地方再次出现。诚然,在XSD 1.0、@Jérôme中无法实现,但在XSD 1.1中,通过断言,任务非常简单:向复杂类型添加属性通配符,并沿中的每一个$a添加断言。/@*满足matchesname$n,“^data-| att1$| att2$|…”未测试-将att1、att2替换为“正常”非数据属性的名称。非常感谢您的贡献!我还没有测试它,但这种方法似乎很有前途。但是,我想知道,由于属性通配符,如果我想为某个特定名称空间指定一些属性+以-data开头的属性,那么它是否会成功。嗨,汤姆·洛德!谢谢你花了这么多时间。不幸的是,我对您的答案不满意,因为我要验证的是属性名,而不是它们的值!啊,对不起,我的错!我想我读你的帖子太快了,误解了这个问题。我现在添加了一个更相关的答案:
<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>