如何指定的RELAX NG事件再度发生的数值范围是多少?

我正在开发使用RELAX NG架构。 我是很新的这一点,所以这很可能是我忽视的东西明显,但似乎并没有成为一个方便的方式来指定事件元素的数量一样,你可以在XML Schema语言。

例如,假设我想指定的A元素可以包含2 - 5 B元素。 我不希望使用zeroOrMoreoneOrMore的标签,因为我其实也有一个上限元素的数量。 在XML Schema中,我可以使用minOccursmaxOccurs属性来指定紧凑。 我已经通过官方读取RELAX NG教程,脱脂规范,并做了一些基本的google搜索,但我一直没能找到任何方便的方式来做到这一点与RELAX NG。 我可以找出最好的,你需要做的是这样的:

<element name="A"> <ref name="B"/> <ref name="B"/> <optional><ref name="B"/></optional> <optional><ref name="B"/></optional> <optional><ref name="B"/></optional> </element> <define name="B"> <element name="B"> <text/> </element> </define>

这是可行的,但将开始寻找丑陋的,当你需要出现较大数目。 在我的实际模式,我这有可能会高达256倍,所以手工指定可选元素将笨重的一个元素类型。 我会做,如果我需要,但我想知道是否有表达我的发生限制的更优雅的方式。

--------------解决方案-------------

真的没有做这在RELAX NG我怕的要命非笨重的方式。

我会采取以下两种方法之一。 无论是建立模式或使用Schematron的注解和过程的环境下,你可以用两种语言做的过程:

例如,建立乙元素组:

<define name="B2">
<ref name="B"/>
<optional><ref name="B"/></optional>
</define>

<define name="B4">
<ref name="B2"/>
<ref name="B2"/>
</define>

让你慢慢建立的组(在这种情况下),一种或两种元素,然后2-4元件等。 结合不同的群体就会让你指定适当数量(最终)。

另外,您可以使用Schematron的注释:

<?xml version="1.0" encoding="utf-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:s="http://www.ascc.net/xml/schematron">

<element name="A">
<s:rule context="A">
<!-- note - using XPath 2 here -->
<s:assert test='count(B) lt 6'>A elements may contain no more than 6 B elements</s:assert>
</s:rule>
<ref name="B"/>
<oneOrMore><ref name="B"/></oneOrMore>
</element>

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

</grammar>

我倾向于更喜欢后者,因为它使得更简单的模式,这并不难混合使用这两个,而是它不依赖于您的验证环境。

分类:XML 时间:2012-01-01 人气:4
本文关键词: XML,模式,relaxng
分享到:

相关文章

  • RelaxNG VS XML模式 2013-03-18

    我有我使用RelaxNG(静)验证XML如果一个项目. 我喜欢RelaxNG语法,但大部分我有XML架构工作的工具(实际上,我不认为我有一个工具,做,比京等). 我在制作时由大多数的支持,似乎是围绕XML架构使用RelaxNG设计和未来支持的错误? 如果我只是坚持RelaxNG,让其他人了解它(踢,如有必要,J / K尖叫)? 我应该切换到XML架构,因为工具支持? 谢谢. --------------解决方案------------- 答案是有点陈词滥调:这取决于. 什么,你可能会问? 在工具

  • 我在哪里可以找到一个有效的SVG XML模式(适用于Ecore的一代)? 2012-01-03

    我试图导入SVG XML模式进入EMF,以获得Ecore元的SVG元模型. 但是,导入失败,因为该模式不是有效的:的确,svg.xsd参考XMLSchema.dtd,它本身引用datatypes.dtd,它不存在! 因此,我试图从网站SVG(svg.xsd,XMLSchema.dtd,xlink.xsd,xml.xsd),并且缺少datatypes.dtd下载必要的文件,从另一个位置. 不过,我一直在验证架构时越来越多的错误,如 Error: XSD: An attribute referenc

  • XML模式:儿童元素类型的基础属性值? 2012-05-31

    我试图让其中元素的类型由值的属性家长确定的架构. 特别是,希望我想要做的就是这个 <argument name="foo" type="float">5.6</argument> 其中参数的值应该执行一个浮点值一致. 使该值元素的类型是由的属性定义的类型的argument的元素. 现在,我发现那里有人说,这可能不是XML模式1.0要做的话题的旧帖子. 所以我的问题是, 有没有推荐的替代办法做到这一点 ? 我能想到的最接近的是让像 <ar

  • 什么是使用XML模式的优点和缺点? 2013-01-15

    我们正在利用一个项目在Microsoft SQL Server 2005中的XML数据类型. 团队的一些成员,我觉得我们也应该使用的XSD,而另一阵营的成员认为,我们应该保持XMLS专案,而不是把他们当作"类型". 所述XMLS是努力使结构和中心的若干是一个维护恶梦文本的配置文件. 我们使用的是.NET 3.5 / C#和我们的表都设计有相应的数据类型. 我的观点是,我们已经在我们的思想"类型为本"为什么打破这种方法,因为它是XML. 这是因为缺乏类型与文本文件的原

  • 正向/反向链接可以使用Emacs / XML模式? 2013-03-15

    我问类似的问题关于HTML,但我想知道,如果emacs的XML模式具有以下特征. 有没有在XML模式"文件,浏览的网址-MX"等价? 我的意思是,有没有可以弹出的XML编辑器(XMLEditor或类似)的任意键? 是否有任何XML编辑工具,使Emacs的XML模式的反向链接回? 添加 基于slomojo的评论,我觉得如果Emacs的nXML模式可以做任何我的XML编辑器(XMLEditor与Mac,XML编辑器与PC机)可以做,我不需要这个正向/反向链接. 这些是我发现XMLEdito

  • 如何编写XML模式(XSD) 2013-07-27

    我想要写一个XML架构(XSD),其中有元素多次出现,并有我想要验证,如果借款人的ID属性必须等于1,则其所有的子元素必须有一定的价值值一个属性ID. 这可能与XSD? 请给我建议,如果他们的是一种方式实现这一目标的感谢 --------------解决方案------------- 有条件的像你要求不是XML模式的可能. 你可能想看看RELAX NG(http://relaxng.org/).

  • 限制XML模式的单词列表 2014-07-25

    我正在写一个XML模式,需要防止元素的文本从匹配特定的值. (例如,在VARIABLENAME元素所无法比拟的"INT","字节","字符串"等) 我已经用限制性使用类似的模式元素试图"^(|字节| INT字符串)",但没有成功. 你知道格式化正则表达式,或任何其他方式,使这项工作的方法是什么? --------------解决方案------------- 经过三重检查的XML Schema(XSD)的正则表达式真的不支持任

  • 如何定义XML模式允许多个元素具有相同名称和不同的属性值? 2012-01-10

    我想创建XML模式这一块XML的,我想限制"name"属性的值,这样在输出文档和一天中只允许有一个实例为每个工作日: <a> <day name="monday" /> <day name="tuesday" /> <day name="wednesday" /> </a> 我曾尝试使用这样的: <xs:complexType name="a"

  • JSP定制标记:缺少DTD / XML模式 2012-01-14

    我已经写了有以下TLD我的JSP定制标记: <?xml version="1.0" encoding="UTF-8"?> <taglib xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi=&quo

  • XML模式:使创建的选择,工会(不是序列)的选择:扩展XSD 2012-01-19

    我有以下的XML Schema <xsd:complexType name="SimpleThing"> <xsd:choice maxOccurs="unbounded"> <xsd:group ref="simpleContent" /> </xsd:choice> </xsd:complexType> <xsd:complexType name="ExtendedT

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.503 (s). 10 q(s)