xsd 相关问题

XSD通常是指以W3C XML Schema格式编写的文档,其中包含特定类型的XML文档的描述。

如何使用java将语句导入添加到xml(架构/xsd)

我想使用java将导入语句添加到现有的schema/xsd文件中,我们是否可以将它们添加到xsd中?,我确实尝试了如下但收到错误:“org.w3c.dom.DOMException:

回答 1 投票 0

如何修复执行xml验证时未声明属性

如何解决“未声明‘Level’属性。”下一个 xml 文件出错: 如何解决“未声明‘级别’属性。”下一个 xml 文件出错: <Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="Settings.xsd"> <ItemId Level="Guest" xsi:type="xs:string">Tech Support</ItemId> <ItemType Level="Administrator" xsi:type="xs:int">1</ItemType> <ItemShift Level="User" xsi:type="xs:time">07:00:00</ItemShift> </Settings> 和架构文件: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" > <xs:simpleType name="typeLevels"> <xs:restriction base="xs:string"> <xs:enumeration value="Administrator" /> <xs:enumeration value="User" /> <xs:enumeration value="Guest" /> </xs:restriction> </xs:simpleType> <xs:attribute name="Level" type="typeLevels" /> <xs:complexType name="MySettings"> <xs:sequence> <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> <xs:anyAttribute namespace="##targetNamespace" processContents="lax"/> </xs:complexType> <xs:element name="Settings" type="MySettings"/> </xs:schema> 从 xml 文件中删除 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 命名空间修复了 Level 属性的问题,但会创建“根据其架构类型 'QName',属性 'type' 具有无效值 'xs:string' - 'xs' 是未声明的前缀”。错误。 使用下一个代码执行验证: void Validate(string xml, string xsd) { var schemaSet = new XmlSchemaSet() { XmlResolver = new XmlXsdResolver() }; schemaSet.Add(null, xsd); var settings = new XmlReaderSettings { ValidationType = ValidationType.Schema }; settings.Schemas = schemaSet; settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation | XmlSchemaValidationFlags.ProcessInlineSchema; settings.ValidationEventHandler += (sender, e) => { switch (e.Severity){ case XmlSeverityType.Error: Console.WriteLine(e.Message); break; }}; using (XmlReader validator = XmlReader.Create(xml, settings)) { while (validator.Read()) ; } } 我认为这里发生的事情如下: ItemId 元素与 lax 元素通配符匹配 xs:any 该元素没有元素声明,因此使用其 xsi:type 属性进行验证 xsi:type 属性表示元素必须属于 xs:string 类型。但是 xs:string 是一个简单类型,并且简单类型不允许属性。 我需要检查规格来确定这一点,但我认为这就是解释。

回答 1 投票 0

为 XSD 中的元素指定命名空间

我有一个 XML,需要为其生成 XSD。我的 XML 如下: 实例: 我有一个 XML,需要为其生成 XSD。我的 XML 如下: 实例: <mes:GetInboundResponseGetInboundSMS xmlns:mes="http://abcd.com"> <response> <messages> <item> <date>15/04/2014 00:00:00</date> </item> <item> <date>01/07/2014 10:01:32</date> </item> </messages> </response> </mes:GetInboundResponseGetInboundSMS> 请注意,只有最外面的元素 GetInboundResponseGetInboundSMS 属于命名空间 http://abcd.com - 其余元素不属于。如何在 XSD 中指定这一点? 我尝试过以下 XSD,但这给了我错误: XSD: <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="GetInboundResponseGetInboundSMS"> <xs:complexType> <xs:sequence> <xs:element name="response"> <xs:complexType> <xs:sequence> <xs:element name="messages"> <xs:complexType> <xs:sequence> <xs:element name="item" maxOccurs="unbounded" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element type="xs:string" name="date"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 但是当我尝试使用在线验证器通过 XSD 验证实例时,我最终遇到了以下错误: 无效。 错误 - 第 1 行,第 95 行:org.xml.sax.SAXParseException;行号:1;列数:95; cvc-elt.1:找不到元素“mes:GetInboundResponseGetInboundSMS”的声明。 这是合乎逻辑的,因为我没有在 XSD 中提供命名空间。请帮助我理解 如何仅为 XSD 中的最外部元素提供此命名空间。 你有两件事不太符合你的要求。 您希望 GetInboundResponseGetInboundSMS 元素位于命名空间 http://abcd.com。 因此将 targetNamespace="http://abcd.com" 添加到您的架构元素中。 您希望该元素的子元素(全部声明为 GetInboundResponseGetInboundSMS 元素的匿名复杂类型的本地元素)是非限定的。 因此将 schema 元素上的 elementFormDefault="qualified" 更改为 elementFormDefault="unqualified"。 架构文档的开始标签应如下所示: <xs:schema targetNamespace="http://abcd.com" attributeFormDefault="unqualified" elementFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 请将架构元素从默认包含到限定中,它将起作用。如果要在 XML 文档中使用相同的命名空间,请在开始和结束标记的前缀中添加该命名空间。它有效。

回答 2 投票 0

XSLT 使用 xslt 2.0 或更高版本将纯文本文件处理为 XML

我正在与一位使用“Workday”ERP 的客户合作。该 ERP 主要处理 XML、XSLT 和 XSD 脚本,但不处理其他编程语言来将数据传入和传出 ERP。 我有一个...

回答 2 投票 0

无效的 XML 前缀

我正在尝试向 Swift Alliance Access(SAA) 发送 XML 消息。我的示例 xml 消息如下所示。但我收到“无效的 XML 前缀”错误消息。当我根据 XSD 检查 XML 时。它

回答 2 投票 0

JAXB 不会从 XSD 简单类型生成枚举类

我的 JAXB XSD 到 Java 类生成器不知何故没有从包含枚举的简单类型创建类,如下所示: 我的 JAXB XSD 到 Java 类生成器不知何故没有从包含枚举的简单类型创建类,就像这样: <xsd:element name="MyPriorityEnum"> <xsd:simpleType final="restriction"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="NORMAL" /> <xsd:enumeration value="LOW" /> <xsd:enumeration value="HIGH" /> </xsd:restriction> </xsd:simpleType> </xsd:element> 我的build.gradle包含以下生成类的任务: def myXsd = "myxsd-v5.xsd" def myOutput = "$buildDir/generated/jaxb/model/src/main/java" tasks.register('generateSources') { doLast { def jaxbTargetDir = file("$myOutput") if (!jaxbTargetDir.exists()) { jaxbTargetDir.mkdirs() } ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.jaxb.asPath) ant.xjc( destdir: "${jaxbTargetDir}", schema: "${rootDir}/src/main/resources/xsd/${myXsd}", removeOldOutput: 'yes', extension: 'true' ) { arg(line: '-nv -disableXmlSecurity') } } } tasks.compileJava.dependsOn tasks.openApiGenerate, tasks.generateSources 我正在为所有 JAXB 依赖项使用最新版本,2.3.1。这可能是xjc的问题吗? 独立于 jaxb 版本/使用的插件/工具,我可以使用此 xsd 重现问题: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="MyPriorityEnum"> <xsd:simpleType final="restriction"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="NORMAL" /> <xsd:enumeration value="LOW" /> <xsd:enumeration value="HIGH" /> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:schema> ...但不能这样: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="https://my.org.com/foo/blahr" targetNamespace="https://my.org.com/foo/blahr" elementFormDefault="qualified"> <xsd:element name="MyPriorityEnum" type="tns:MyEnumType" /> <xsd:simpleType name="MyEnumType" final="restriction"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="NORMAL" /> <xsd:enumeration value="LOW" /> <xsd:enumeration value="HIGH" /> </xsd:restriction> </xsd:simpleType> </xsd:schema> ...这意味着它可以工作:xjc 生成枚举类型。 最显着的区别是从“嵌套简单类型”到“引用简单类型”......(?)

回答 1 投票 0

XSD 1.0 无法对无序 XML 进行验证

假设我有这个验证xsd: ...

回答 1 投票 0


无法使用架构验证 XML,但可以通过从中读取写入的文件来工作

我目前正在使用 lxml 并想要验证 XML 内容。 我从 tei = etree.Element("TEI", nsmap={None: 'http://www.tei-c.org/ns/1.0'} 完全用 Python 编写,有很多子元素...

回答 1 投票 0

解决 XPath 评估产生过多目标节点的错误

我正在尝试将 xjc 生成的全大写类名更改为 CamelCase。为了实现这一点,我编写了一个 Python 脚本来生成绑定文件。这是脚本的一部分: 定义

回答 1 投票 0

将 XSD 导入目标命名空间中的 WSDL 错误

使用 Apache CXF 4.0.3 中的 wsdl2java 在尝试将 XSD 导入我的 WSDL 文件时遇到错误。这些文件来自第 3 方,对于早期版本的 CXF,导入工作正常...

回答 2 投票 0

无法通过 jaxws:wsimport 实用程序 [binding.xsd] 创建 Web 服务客户端

我正在尝试使用网络服务,但我什至无法启动。一旦包含 Web 服务,我就会收到错误消息。我研究并发现了类似的错误,但没有发现这个错误。我希望你们知道...

回答 1 投票 0

Symfony Serializer xml,按顺序包含复杂的 xsd 类型

我收到以下 XSD: 我收到以下 XSD: <xsd:complexType name="typeADDRESS"> <xsd:sequence> <xsd:element ref="NAME" minOccurs="0" maxOccurs="unbounded"/> <!-- # ... just to show that these aren't the only ones --> <xsd:sequence minOccurs="0" maxOccurs="unbounded"> <xsd:element ref="EMAIL"/> <xsd:element ref="PUBLIC_KEY" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <!-- # ... and also some attributes later --> </xsd:sequence> </xsd:complexType> 如果电子邮件元素的 XML 数据如下所示: <EMAIL>A</EMAIL> <PUBLIC_KEY>A1</PUBLIC_KEY> <PUBLIC_KEY>A2</PUBLIC_KEY> <EMAIL>B</EMAIL> <PUBLIC_KEY>B1</PUBLIC_KEY> <PUBLIC_KEY>B2</PUBLIC_KEY> 如何将其放入有意义的 PHP 结构中? 当正常化回来时,我如何保持订单? 我需要使用NormalizedInterface、DenormalizedInterface吗? 其他属性又如何,我是否也需要手动(去)规范化它们? 在大多数 API 中处理此类结构是很棘手的。我首先使用 XSLT 将数据转换为更规则的结构: <xsl:for-each-group select="*" group-starting-with="EMAIL"> <ENTRY email="{EMAIL}"> <xsl:copy-of select="PUBLIC_KEY"/> </ENTRY> </xsl:for-each-group> 这会将其变成: <ENTRY email="A"> <PUBLIC_KEY>A1</PUBLIC_KEY> <PUBLIC_KEY>A2</PUBLIC_KEY> </ENTRY> <ENTRY email="B"> <PUBLIC_KEY>B1</PUBLIC_KEY> <PUBLIC_KEY>B2</PUBLIC_KEY> </ENTRY> 作为一般原则,如果您的 XML 格式难以处理,最好在处理的第一阶段将其清理,以避免使实际应用程序的逻辑复杂化。

回答 1 投票 0

生成.xsd文件的C#类

我试图从 XML 模式生成一个 C# 类,但没有成功。 这是 VS 2017 的开发人员命令提示符中的命令: xsd 发票Api.xsd /类 输出: c: emp est>xsd invo...

回答 1 投票 0

XSD - 只有少数属性是强制性的

下面是 xml 示例。 下面是 xml 示例。 <Custom> <Entry Key="ClientApp.DataContext.JobId" Type="String" Value="105161"></Entry> <Entry Key="ClientApp.DataContext.JobNumber" Type="String" Value="PCSQ test"></Entry> <Entry Key="Abstract" Type="String" Value="Emsur"></Entry> <Entry Key="TempID" Type="String" Value="12345"></Entry> <Entry Key="Lot" Type="String" Value="6789"></Entry> </Custom> 以下是 Visual Studio 2019 自动生成的 XSD。 <xs:element name="Custom"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Entry"> <xs:complexType> <xs:attribute name="Key" type="xs:string" use="required" /> <xs:attribute name="Type" type="xs:string" use="required" /> <xs:attribute name="Value" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> 上下文: 生成的 XSD 表示所有属性(键、值、类型)都是必需的。我们强制需要 Key="Abstract" 及其 Value="Emsur" & Key="TempID" 及其 Value="12345"。其他属性(如 ClintApp.JobId 和 ClientApp.JobNumber)是可选的。 问题: 如何验证摘要是否具有价值且批次是否具有价值,同时保留其他属性为可选? 谢谢。 XSD 1.1 断言: <xs:element name="Custom"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Entry"> <xs:complexType> <xs:attribute name="Key" type="xs:string" use="required" /> <xs:attribute name="Type" type="xs:string" use="required" /> <xs:attribute name="Value" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> <xs:assert test="some $entry in Entry satisfies $entry/@Key = 'Abstract' and $entry/@Value = 'Emsur'"/> <xs:assert test="some $entry in Entry satisfies $entry/@Key = 'TempID' and $entry/@Value = '12345'"/> </xs:complexType> </xs:element>

回答 1 投票 0

将 XSD 转换为数据集再转换为 XML 时保留元素顺序

我将 XSD 文件加载到空数据集中,将数据加载到数据集中,然后使用该数据集编写 XML 文件。 问题是 XSD 的序列类型是否包含

回答 1 投票 0

JAXB xjc:解决从 AUTOSAR XSD 生成类时的非法类继承循环

我正在使用 JAXB 的 xjc 工具从 AUTOSAR XSD 文件生成 Java 类,并遇到了 IllegalArgumentException,指示非法的类继承循环。这是我的错误消息

回答 1 投票 0

如何防止 XSD.EXE 在生成的 C# 中将嵌套类型折叠为交错数组?

考虑以下 XSD: 考虑以下 XSD: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="ContainingClass" type="ContainingClass" /> <xs:complexType name="ContainingClass"> <xs:sequence> <xs:element name="OuterArrayContainer" type="OuterArrayContainer" /> </xs:sequence> </xs:complexType> <xs:complexType name="OuterArrayContainer"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="10" name="OuterArray" type="InnerArrayContainer" /> </xs:sequence> </xs:complexType> <xs:complexType name="InnerArrayContainer"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="10" name="InnerArray" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:schema> 假设上面的 XSD 位于名为“test.xsd”的文件中,我可以运行以下命令为其创建 C# 包装器: xsd test.xsd /c C# 输出如下所示(为简洁起见,删除 XML 属性后): public partial class ContainingClass { private int[][] outerArrayContainerField; public int[][] OuterArrayContainer { get { return this.outerArrayContainerField; } set { this.outerArrayContainerField = value; } } } 如您所见,它完全丢失了内部类型,并用单个锯齿状 int 数组替换了它们。我想保留内部类型。 如果我像这样向 XSD 添加虚拟元素: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="ContainingClass" type="ContainingClass" /> <xs:complexType name="ContainingClass"> <xs:sequence> <xs:element name="OuterArrayContainer" type="OuterArrayContainer" /> </xs:sequence> </xs:complexType> <xs:complexType name="OuterArrayContainer"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="10" name="OuterArray" type="InnerArrayContainer" /> <xs:element name="Dummy" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:complexType name="InnerArrayContainer"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="10" name="InnerArray" type="xs:int" /> <xs:element name="Dummy" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:schema> 那么输出是: public partial class ContainingClass { private OuterArrayContainer outerArrayContainerField; public OuterArrayContainer OuterArrayContainer { get { return this.outerArrayContainerField; } set { this.outerArrayContainerField = value; } } } public partial class OuterArrayContainer { private InnerArrayContainer[] outerArrayField; private int dummyField; public InnerArrayContainer[] OuterArray { get { return this.outerArrayField; } set { this.outerArrayField = value; } } public int Dummy { get { return this.dummyField; } set { this.dummyField = value; } } } public partial class InnerArrayContainer { private int[] innerArrayField; private int dummyField; public int[] InnerArray { get { return this.innerArrayField; } set { this.innerArrayField = value; } } public int Dummy { get { return this.dummyField; } set { this.dummyField = value; } } } 这保留了内部类型,但代价是拥有未使用的虚拟属性。 我的问题是:有没有办法在不引入虚拟元素的情况下执行此操作(并且无需手动编辑输出 C# 代码)? (完全有可能我正在以完全错误的方式处理这件事......) 我的问题是:有没有办法在不引入虚拟元素的情况下执行此操作(并且无需手动编辑输出 C# 代码)? 简短的回答是否定的。在这个特定的实例中,这似乎是 XSD.exe 的一个错误,但即便如此,它通常对复杂类型的支持仍然很差,因为它生成的代码很大程度上是面向序列化/反序列化的,而不是面向模式的,因此它只付出了最小的努力来建模模式语义。 我建议使用另一个名为 'dotnet-xscgen' 的工具,来自 https://github.com/mganss/XmlSchemaClassGenerator(查看有关如何安装/使用它的说明此处) 它生成的代码仍然与 XSD.exe 非常相似(即 XmlSerializer 兼容),但有很大改进。运行原始架构(没有虚拟元素)时,它会生成以下代码(为了简洁起见,我删除了所有属性): // This code was generated by XmlSchemaClassGenerator version 2.1.1057.0 using the following command: // xscgen schema.xsd --namespace=Default public partial class ContainingClass { private System.Collections.ObjectModel.Collection<InnerArrayContainer> _outerArrayContainer; public System.Collections.ObjectModel.Collection<InnerArrayContainer> OuterArrayContainer { get { return _outerArrayContainer; } private set { _outerArrayContainer = value; } } /// <summary> /// <para xml:lang="en">Initializes a new instance of the <see cref="ContainingClass" /> class.</para> /// </summary> public ContainingClass() { this._outerArrayContainer = new System.Collections.ObjectModel.Collection<InnerArrayContainer>(); } } public partial class OuterArrayContainer { private System.Collections.ObjectModel.Collection<InnerArrayContainer> _outerArray; public System.Collections.ObjectModel.Collection<InnerArrayContainer> OuterArray { get { return _outerArray; } private set { _outerArray = value; } } /// <summary> /// <para xml:lang="en">Initializes a new instance of the <see cref="OuterArrayContainer" /> class.</para> /// </summary> public OuterArrayContainer() { this._outerArray = new System.Collections.ObjectModel.Collection<InnerArrayContainer>(); } } public partial class InnerArrayContainer { private System.Collections.ObjectModel.Collection<int> _innerArray; public System.Collections.ObjectModel.Collection<int> InnerArray { get { return _innerArray; } private set { _innerArray = value; } } /// <summary> /// <para xml:lang="en">Initializes a new instance of the <see cref="InnerArrayContainer" /> class.</para> /// </summary> public InnerArrayContainer() { this._innerArray = new System.Collections.ObjectModel.Collection<int>(); } } 微软似乎对改进 XML 工具不感兴趣,因此其他人已经填补了这个空缺。

回答 1 投票 0

如何通过添加新属性来扩展属性组?

我有一个 XSD 文件(我无法修改),它定义了如下所示的 attributeGroup 我有一个 XSD 文件(我无法修改),它定义了如下所示的 attributeGroup <xs:attributeGroup name="myAttributes"> <xs:attribute name="name" type="name_t" use="required"/> <xs:attribute name="age" type="age_t" use="required"/> </xs:attributeGroup> 比如说,我希望这个 attributeGroup 有另一个名为“性别”的属性。由于我无法修改此 xsd,因此我定义了一个新的 XSD 并将此 XSD 包含在那里。 但是如何将这个新属性添加到 myAttributes 组中? 所以有2个选择。 选项 A 是最简单的方法,即将第一个 XSD 包含或导入到第二个 XSD 中,然后将第一个属性组包含在您定义的新属性组中。 对于选项 A,以下是 XSD 的完整 XML 和示例 XML: 第一个.xsd: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:attributeGroup name="myAttributes"> <xs:attribute name="name" type="name_t" use="required"/> <xs:attribute name="age" type="age_t" use="required"/> </xs:attributeGroup> <xs:simpleType name="name_t"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:simpleType name="age_t"> <xs:restriction base="xs:int"/> </xs:simpleType> </xs:schema> 第二个.xsd: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:include schemaLocation="First.xsd"/> <xs:attributeGroup name="extendedMyAttributes"> <xs:attributeGroup ref="myAttributes"/> <!-- New attribute --> <xs:attribute name="gender" type="xs:string"/> </xs:attributeGroup> </xs:schema> 现在您可以在元素定义中使用新的扩展属性组: <xs:element name="person"> <xs:complexType> <xs:attributeGroup ref="extendedMyAttributes"/> </xs:complexType> </xs:element> 示例 XML 将如下所示: <?xml version="1.0" encoding="UTF-8"?> <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Second.xsd" gender="male" name="Adam" age="20"> </person> 这样就可以验证了。 选项 B 将覆盖 myAttributes 属性组的现有定义,而不使用 <xs:override> 元素创建具有新名称的新属性组。这允许您继续将属性组引用为 myAttributes,而不是新名称。 这是覆盖 myAttributes 的架构。 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:override schemaLocation="First.xsd"> <xs:attributeGroup name="myAttributes"> <xs:attribute name="name" type="name_t"/> <xs:attribute name="age" type="age_t"/> <!-- New gender attribute --> <xs:attribute name="gender" type="xs:string"/> </xs:attributeGroup> </xs:override> <xs:element name="person"> <xs:complexType> <xs:attributeGroup ref="myAttributes"/> </xs:complexType> </xs:element> </xs:schema> 因为您只是向现有组添加新属性(并保留第一个组的属性),所以只需创建一个包含第一个属性组的新属性组就足够了。 比较这两个选项,选项 A 也“更安全”,从某种意义上说,如果第一个架构的新版本更新,您可以参考更新的 XSD 并保留原始属性组中的任何新的或更新的属性。使用选项 B,除了新的 name 属性之外,您还必须复制覆盖的属性组定义中的 age 和 gender 属性。 当您想要执行完全重命名、删除属性等操作时,您可能会想要覆盖某些内容。唯一基本保持不变的是属性组的名称。 您可以阅读有关覆盖的更多信息:https://www.w3.org/TR/xmlschema11-1/#override-schema

xsd
回答 1 投票 0

XSD 使用断言进行验证

只是想知道是否可以使用 XSD 来针对其他元素/属性验证属性。示例如下: <...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.