gpt4 book ai didi

python - xml 验证 : validating a URI type

转载 作者:行者123 更新时间:2023-12-04 06:49:07 24 4
gpt4 key购买 nike

我正在使用 python 的 lxml 根据模式验证 xml。我有一个带有元素的架构:

<xs:element name="link-url" type="xs:anyURL"/>

我测试,例如,这个(部分)xml:
<a link-url="server/path"/>

我希望这个测试失败,因为 link-url不以 http:// 开头.我试过切换 anyURIanyURL但这会导致异常 - 它不是有效标签。

这可以用lxml吗?模式验证完全可能吗?

最佳答案

(我很确定 xs:anyURL 无效。XML Schema standard 称它为 anyURI 。而且由于 link-url 是一个属性,您不应该使用 xs:attribute 而不是 xs:element 吗?)

您可以通过创建新的 simpleType 来限制 URI。 base d 上,并放一个 restrictionpattern .例如,

#!/usr/bin/env python2.6

from lxml import etree
from StringIO import StringIO

schema_doc = etree.parse(StringIO('''
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="httpURL">
<xs:restriction base="xs:anyURI">
<xs:pattern value='https?://.+'/>
<!-- accepts only http:// or https:// URIs. -->
</xs:restriction>
</xs:simpleType>

<xs:element name="a">
<xs:complexType>
<xs:attribute name="link-url" type="httpURL"/>
</xs:complexType>
</xs:element>
</xs:schema>
''')) #/
schema = etree.XMLSchema(schema_doc)

schema.assertValid(etree.parse(StringIO('<a link-url="http://sd" />')))
assert not schema(etree.parse(StringIO('<a link-url="server/path" />')))

关于python - xml 验证 : validating a URI type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3381507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com