gpt4 book ai didi

xml - 如何在另一个 XSD 中使用命名空间定义的类型? (通过命名空间引用它)

转载 作者:行者123 更新时间:2023-12-04 17:02:40 25 4
gpt4 key购买 nike

免责声明:我不太精通 XSD,可能会错误地表达自己。

我有一个需要验证和处理的 XML 文件。我可以更改 XSD 但不能更改 XML。

XML 文件的类型为 a.xsd,而 a.xsd 包含来自 b.xsd 的类型。在引用命名空间的 XML 中调用此类型,如下所示:

<StuffDtl>
<elem1>test string</elem1>
<elem2>9</elem2>
<supertype:uuuh_special>test string</supertype:uuuh_special>
</StuffDtl>

XSD 定义如下:

一个.xsd
<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:supertype="http://www.b.com">
<xs:import namespace="http://www.b.com"
schemaLocation="b.xsd" />
<xs:element name="StuffDtl">
<xs:complexType>
<xs:sequence>
<xs:element name="elem1" type="xs:decimal" />
<xs:element name="elem2" type="xs:int" />
<xs:element name="uuuh_special" type="supertype:SuperType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

b.xsd
<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.b.com"
elementFormDefault="qualified">
<xs:complexType name="SuperType">
<xs:sequence>
<xs:choice>
<xs:group ref="one_thing" />
<xs:group ref="another_thing" />
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:group name="one_thing">
<xs:sequence>
<xs:element name="year" type="xs:decimal" />
<xs:sequence minOccurs="0">
<xs:element name="hour" type="xs:decimal" />
</xs:sequence>
</xs:sequence>
</xs:group>
<xs:group name="another_thing">
<xs:sequence>
<xs:element name="date-value" type="xs:string" />
<xs:element name="date-format" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:group>
</xs:schema>

最佳答案

如果您真的无法更改 XML,请停止;它的格式不正确,因为命名空间前缀 ( supertype ) 不能在未定义的情况下使用。

Well-formed vs Valid XML了解更多详情。

假设您可以将 XML 更改为格式正确,您可能会保留 uuuh_special在单独的命名空间中,

<StuffDtl xmlns:supertype="http://www.b.com">
<elem1>test string</elem1>
<elem2>9</elem2>
<supertype:uuuh_special>test string</supertype:uuuh_special>
</StuffDtl>

或者,您可以将其取出:
<StuffDtl>
<elem1>test string</elem1>
<elem2>9</elem2>
<uuuh_special>test string</uuuh_special>
</StuffDtl>

另外,请注意您的 b.xsd 的大部分内容与您的 uuh_special 的内容不一致。 XML 中的元素。因此,要么大部分 b.xsd 已失效,并且 uuh_special必须重新定义,或者再次修改您的 XML。

在这一点上,需求中有很多松散的结局和矛盾,以至于无需过度猜测就可以提供尽可能多的帮助。

关于xml - 如何在另一个 XSD 中使用命名空间定义的类型? (通过命名空间引用它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35625625/

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