首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xmllint进行RelaxNG验证

使用xmllint进行RelaxNG验证
EN

Stack Overflow用户
提问于 2014-02-25 14:29:55
回答 1查看 2K关注 0票数 1

我正在尝试制作xmllint来验证这个架构。不幸的是,我遇到了一些奇怪的问题。看起来,xmllint错误的可选参数没有包含交织标记。下面是一些带有拼写错误的标记person的测试模式,应该由xmllint发出信号。不幸的是,xmllint正在攻击其他一些不存在的bug。请看一看也许我做错了什么:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">

<define name="testproject">
    <element name="testproject">
        <ref name="overview"/>
        <ref name="tests"/>
    </element>
</define>

<define name="overview">
    <element name="overview">
        <ref name="title"/>
        <oneOrMore>
            <ref name="person"/>
        </oneOrMore>
    </element>
</define>

<define name="tests">
    <element name="tests">

        <choice>
            <attribute name="file"/>

            <group>
                <ref name="title"/>
                <optional>
                    <ref name="field"/>
                </optional>
                <optional>
                    <ref name="field2"/>
                </optional>
                <optional>
                    <ref name="field3"/>
                </optional>

                <choice>
                    <zeroOrMore>
                        <ref name="test"/>
                    </zeroOrMore>
                    <zeroOrMore>
                        <ref name="tests"/>
                    </zeroOrMore>
                </choice>
            </group>
        </choice>
    </element>
</define>

<define name="test">
    <element name="test">
        <attribute name="name"/>

        <interleave>
            <optional>
                <ref name="title"/>
            </optional>
            <ref name="field"/>
            <zeroOrMore>
                <ref name="person"/>
            </zeroOrMore>
        </interleave>
    </element>
</define>

<define name="title">
    <element name="title">
        <text/>
    </element>
</define>

<define name="field">
    <element name="field">
        <text/>
    </element>
</define>

<define name="field2">
    <element name="field2">
        <text/>
    </element>
</define>

<define name="field3">
    <element name="field3">
        <text/>
    </element>
</define>

<define name="person">
    <element name="person">
        <text/>
    </element>
</define>

<start>
    <ref name="testproject"/>
</start>
</grammar>

和xml文件内容:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>

<testproject>
<overview>
    <title>
        some title
    </title>
    <person>J33nn</person>
</overview>

<tests>
    <title>
        Some title test
    </title>
    <field>as</field> 
    <test name="TestName">
        <title>Some title</title>

        <field>
            dasdasd
        </field>

        <peron>J33nn</peron>
    </test>
</tests>
</testproject>

它没有报告拼写错误的标签,而是报告了如下内容:

元素字段:Relax有效性错误:元素测试有额外的内容:字段

EN

回答 1

Stack Overflow用户

发布于 2014-02-25 16:14:25

当我使用模式在您的XML文件上运行xmllint时,我会得到您报告的相同错误。但是,请注意,<field>as</field>报告了错误,这完全没有意义,因为该元素在该位置上应该是可接受的。

如果我使用jing来执行验证,我会得到:

代码语言:javascript
复制
test.xml:23:16: error: element "peron" not allowed anywhere; expected the element end-tag or element "person"

这是一个更明智的结果。我确信jing是对的,xmllint是错的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22017164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档