gpt4 book ai didi

xml - XSD 中的动态枚举

转载 作者:行者123 更新时间:2023-12-04 05:37:51 27 4
gpt4 key购买 nike

我有这样的xml结构:

<main>
<objects>
<object name="book" />
<object name="table" />
</objects>
<actions>
<action input="book" />
<action input="table" />
<action input="book" />
</actions>
</main>

这是一个简化的例子。

我想创建使此类 xml 无效的 xsd 架构:
<main>
<objects>
<object name="book" />
<object name="table" />
</objects>
<actions>
<action input="book" />
<action input="table" />
<action input="fruit" />
</actions>
</main>

因为在对象列表中没有名称为“fruit”的对象项。

我不能简单地创建 <xsd:enumeration>因为对象名称总是不同的,我不知道所有这些。似乎应该动态创建 Action 名称的可能值列表。

为 IntelliSense 支持动态创建枚举会很棒( <xsd:assert> 无法提供)。

有可能吗?

最佳答案

从生成的 XSD 开始,然后调整它以引入您想要的约束。 Intellisense 部分高度依赖于编辑器。即使推断“智能”智能感知的元数据在那里(通过键/键引用),我怀疑市场上的编辑器会使用它。下面的 XSD 将验证和失败您提供的 XML。

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="main">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="objects">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="object">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="actions">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="action">
<xsd:complexType>
<xsd:attribute name="input" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="Objects">
<xsd:selector xpath="objects/object"/>
<xsd:field xpath="@name"/>
</xsd:key>
<xsd:keyref name="ActionToObjects" refer="Objects">
<xsd:selector xpath="actions/action"/>
<xsd:field xpath="@input"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>

示意图:

QTAssistant showing XSD diagram with key/keyref features

关于xml - XSD 中的动态枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11701535/

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