当前位置: 首页 > 知识库问答 >
问题:

xsd:为元素定义两种可能的属性语法?

长孙明知
2023-03-14

我需要接受元素的2个属性语法:

<fsinfo  line="70" comment="# a comment" />
<fsinfo  line="80" real_dev="/dev/sda2" mount_dev="LABEL=root" mp="/"  fs="ext4" options="defaults" dump="1" pass="1" />

我创建了一个能够验证第80行的xsd:

<xsd:element name="fsinfo">
    <xsd:complexType>
        <xsd:attribute name="line"/>
        <xsd:attribute name="real_dev" use="required"/>
        <xsd:attribute name="mount_dev"/>
        <xsd:attribute name="mp" use="required"/>
        <xsd:attribute name="fs" use="required"/>
        <xsd:attribute name="mkfs_opts"/>
        <xsd:attribute name="options" default="defaults"/>
        <xsd:attribute name="dump" use="required"/>
        <xsd:attribute name="pass" use="required"/>
        <xsd:attribute name="format"/>
        <xsd:attribute name="comment"/>
    </xsd:complexType>
</xsd:element>

要验证第70行,我可以执行以下操作:

<xsd:element name="fsinfo">
    <xsd:complexType>
        <xsd:attribute name="line"/>
        <xsd:attribute name="comment"/>
    </xsd:complexType>
</xsd:element>

1/如何合并这两个语法,以便验证第70行和第80行?

2/如何避免空的fsinfo标记?

3/"fsinfo"属性可以是任何顺序

重要的是,如果存在超过“line”和“注释”属性(例如“mount_dev”,则必须存在所有相关的必需参数。(第80行验证方案)

注意:我不能更改xml文件,因为我必须保持与旧软件的兼容性(我正在添加验证以使其更加健壮)。

注2:用于验证的工具:xmlstarlet--err--xsd myxsdfile。xsd myxmlfile。xml

共有1个答案

劳星晖
2023-03-14

不幸的是,如果您可以使用xsd 1.1,我没有任何信息。使用断言有很大的可能性,可以帮助您管理它。

我无法观察完整的xml示例以及xsd,但我可以创建一个示例xsd如何使用断言。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" vc:minVersion="1.1">
    <xs:element name="root" type="root"/>
    <xs:complexType name="root">
        <xs:sequence>
            <xs:element name="fsinfo">
                <xs:complexType>
                    <xs:attribute name="line"/>
                    <xs:attribute name="real_dev"/>
                    <xs:attribute name="mount_dev"/>
                    <xs:attribute name="mp"/>
                    <xs:attribute name="fs"/>
                    <xs:attribute name="mkfs_opts"/>
                    <xs:attribute name="options"/>
                    <xs:attribute name="dump"/>
                    <xs:attribute name="pass"/>
                    <xs:attribute name="format"/>
                    <xs:attribute name="comment"/>
                    <xs:assert test="(@line and @comment and not(@real_dev) and not(@mount_dev) and not(@mp) and not(@fs) and not(@mkfs_opts) and not(@dump) and not(@pass) and not(@options) and not(@format)) or ((@line and @real_dev and @mp and @fs and @dump and @pass) and ( @mount_dev or @mkfs_opts or @options or @format or @comment))"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
 类似资料:
  • XSD规范https://www.w3.org/TR/xmlschema11-1/#declare-schema没有为属性指定语义学: 其他属性(和)是为了方便用户,本规范没有定义它们的语义。 W3C版本控制指南https://www.w3.org/TR/xmlschema-guide2versioning/. 该属性是否应用于指定XML架构文档的版本(例如,2.3.1)或用于编写架构文档的XSD

  • 本文向大家介绍aurelia 创建具有可绑定属性的自定义元素,包括了aurelia 创建具有可绑定属性的自定义元素的使用技巧和注意事项,需要的朋友参考一下 示例 创建具有可绑定属性的自定义元素非常简单。如果要创建一个接受一个或多个插件可以使用的值的元素,则需要使用@bindable装饰器和语法。 在下面,我们正在创建一个自定义元素,该元素接受一系列水果并显示它们。 示例: my-element.j

  • 我有一个这样的xml结构。我想做一个模式(XSD)验证,使

  • 我需要定义一个XML元素,它没有子元素或任何内容,也没有属性。 这就是我正在做的: 这看起来很好,但我想知道是否有一种方法可以做到这一点,而不必声明复杂类型。另外,如果我的东西有什么问题,请告诉我。 预料到有人可能会好奇我为什么需要这样一个元素:它用于不需要任何参数值的SOAP操作。

  • 本文向大家介绍vue获取DOM元素并设置属性的两种实现方法,包括了vue获取DOM元素并设置属性的两种实现方法的使用技巧和注意事项,需要的朋友参考一下 这里我想到了2个方法: 方法一: 直接给相应的元素加id,然后再document.getElementById("id");获取,然后设置相应属性或样式 方法二: 使用ref,给相应的元素加ref=“name” 然后再this.$refs.name

  • 问题内容: 我正在考虑编写可产生具有重复属性的HTML标签的代码,如下所示: 这是合法的HTML吗?-值之一优先于另一个吗?我可以依靠半现代的浏览器(IE> = 9)来解析它而不会窒息吗? 还是我要在这里做一些真正愚蠢的事情? 问题答案: 在一个元素中两次具有相同的属性名称是无效的。对此的权威性参考有些复杂,因为旧的HTML版本名义上是基于SGML,而对SGML标准的规范性引用暗含了这种限制。在H