gpt4 book ai didi

xml - 如何添加xs :occurs attribute group to my element declaration?

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:48 34 4
gpt4 key购买 nike

我正在定义一个复杂元素 sequence_T,我想向其添加 minOccurs/maxOccurs 属性,该元素与 https://www.w3.org/2001/XMLSchema.xsd 中定义的发生组具有相同的语义。 , 但我遇到的困难似乎超出了我目前的技能水平。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://versionschema.org/xmlns"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsv="http://www.w3.org/2007/XMLSchema-versioning" xsv:minVersion="1.1"
xmlns:vs="http://versionschema.org/xmlns" elementFormDefault="qualified"
attributeFormDefault="unqualified" xml:lang="en" version="Experimental.0 {VSchemaInDev.0}"
>

<xsd:complexType name="sequence_T" final="#all">

<xsd:annotation>
<xsd:documentation xml:lang="en">
Declares an ordered list of elements.
</xsd:documentation>
</xsd:annotation>

<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="vs:baseelementsGroup"/>
<xsd:group ref="vs:controlGroup"/>
<xsd:group ref="vs:ruleelementsGroup"/>
</xsd:choice>
</xsd:sequence>

<xsd:attributeGroup ref="vs:annotationsAttributeGroup"/>
<xsd:attributeGroup ref="xsd:occurs"/>

</xsd:complexType>
</xsd:schema>

我收到“无法将名称 'xsd:occurs' 解析为 (n) '属性组' 组件”。任何线索如何添加这些属性?

我确实有这个解决方法:

<xsd:attributeGroup name="minmaxAttributesGroup">

<xsd:attribute name="minOccurs" type="xsd:nonNegativeInteger" default="1"/>
<xsd:attribute name="maxOccurs" type="xsd:nonNegativeInteger" default="1"/>
<xsd:attribute name="maxOccursUnbounded" type="xsd:boolean" default="false"/>

</xsd:attributeGroup>

但是 maxOccursUnbounded="true" 在语义上不如 maxOccurs="unbounded" 干净。

最佳答案

关于您最初的问题,我认为您需要 xsd:importhttp://www.w3.org/2001/XMLSchema ” 一旦您引用构造,它就会定义并非在每个模式定义中都隐式可用的构造(参见 https://www.w3.org/TR/xmlschema-1/#simple-ur-type-itself )。

我发现 xmllint如果 XML 文档包含以下附加行,将很乐意使用您的初始模式验证 XML 文档:

<xsd:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>`

关于您的解决方法,为了允许 unbounded作为 maxOccurs 的有效值, 你必须定义一个受 xsd:allNNI 启发的本地类型这不能按原样使用(当尝试在没有 xsd:occurs 的情况下使用它时,您会遇到与使用 xs:import 相同的问题)并将该类型用于(您自己的)maxOccurs :

<xsd:simpleType name="allNNI">
<xsd:annotation>
<xsd:documentation>for maxOccurs</xsd:documentation>
</xsd:annotation>
<xsd:union memberTypes="xsd:nonNegativeInteger">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="unbounded"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>

<xsd:attributeGroup name="minmaxAttributesGroup">
<xsd:attribute name="minOccurs" type="xsd:nonNegativeInteger" default="1"/>
<xsd:attribute name="maxOccurs" type="vs:allNNI" default="1"/>
</xsd:attributeGroup>

关于xml - 如何添加xs :occurs attribute group to my element declaration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51969553/

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