我使用 OpenAPI 3.0 和额外的 xml 元数据创建 XML API 规范,如Swagger 文档中所述。在开发阶段,我想根据 OpenAPI 3.0 规范自动测试端点的 XML 响应。
根据 OpenAPI 3.0 架构验证端点的 XML 响应的最佳方法是什么?通过验证,我的意思是:
我想这样的测试可以通过以下步骤完成:
在项目构建期间,如果该路径已指定application/xml内容类型并且定义了响应架构,则从架构定义为 OpenAPI 规范中的每个路径生成 XSD 文件。
在测试中,获取特定端点的响应并根据 XSD 文件对其进行验证。
不幸的是,目前似乎没有可以从 OpenAPI 规范生成 XSD 以创建上述管道的工具。
你怎么能实现这个目标?是否可以结合使用 OpenAPI/Swagger 工具?是否有其他可靠的方法来验证 XML 响应而无需手动创建 XSD?
问题不是特定于编程语言的。
假设我正在处理一个xsd:simpleType,它是一个字符串,需要具有特定的字符集和特定的最大长度,类似于下面的代码:
<xsd:simpleType name="MyType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]" />
<xsd:maxLength value="36" />
</xsd:restriction>
</xsd:simpleType>
Run Code Online (Sandbox Code Playgroud)
所以我的xsd类型将是一个只有数字的字符串,最多36个字符.我的问题是xsd:pattern和xsd:maxLength(或任何其他类似的标签,如minLength)是否可以一起工作.我的直觉不是; 基于模式或基于长度的xsd元素仅在xsd:restriction中.因此,我必须将最大长度限制添加到模式中.
请注意,我通过在Java上解组xml并验证失败来测试它.无论如何,我正在寻找的信息是两个如何以及模式和maxLength可以一起工作的信息.
以下是我在为SOAP服务生成客户端时尝试使用的xsd,Eclipse正在抛出错误:元素"xs:schema"的前缀"xs"未绑定.
<xs:schema version="1.0"
targetNamespace="bdo.com.ph/RemitAPI">
<xs:element name="CheckServiceResponse"
nillable="true" type="xs:string"/>
<xs:element name="apiRequest" nillable="true" type="tns:APIRequest"/>
.............................
<xs:element name="referenceNo" type="xs:string" form="qualified"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
我从webservice获得了这个xsd
如何保证url元素以"http://"开头?
<xs:element name="url" type="xs:anyURI"/>
Run Code Online (Sandbox Code Playgroud) 我有这样的XML文件
<listOfA>
<a type="1">
<name></name>
<surname></surname>
</a>
<a type="2">
<name></name>
<id></id>
</a>
</listOfA>
Run Code Online (Sandbox Code Playgroud)
我想创建一个XSD,这样如果属性"type"的值为1,则必须存在name和surname元素,当它为2时,name和id必须在那里.我试图在XSD架构生成器中生成XSD ,但它使surname和id元素minOccurs = 0.我怎么能让它工作?
我正在编写一个 XSD 来验证一个 XML,但是当我验证这个错误时出现了:
输出 - 错误
使用 XML 模式验证当前文件:
错误:元素“{ http://www.w3.org/2001/XMLSchema-instance }Gasto”:不需要此元素。预期是(加斯托)
......我不明白这个错误
这是我的 XML 示例:
<?xml version="1.0" encoding="UTF-8"?>
<Armazem>
<Lista_Gastos xmlns:artGasto="http://www.w3.org/2001/XMLSchema-instance"
artGasto:noNamespaceSchemaLocation="TraXSD.xsd">
<artGasto:Gasto id="50">
<artGasto:nome>Robalo</artGasto:nome>
<artGasto:quantidade>1</artGasto:quantidade>
</artGasto:Gasto>
</Lista_Gastos>
</Armazem>
Run Code Online (Sandbox Code Playgroud)
这是我的 XSD 示例:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:artGasto="http://www.w3.org/2001/XMLSchema-instance">
<xsd:element name="Armazem">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Lista_Gastos"
type="TListGastos" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="TListGastos">
<xsd:sequence >
<xsd:element name="Gasto" type="TGasto"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="TGasto">
<xsd:sequence >
<xsd:element name="nome" type="xsd:string" />
<xsd:element name="quantidade" type="xs:integer" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/> …Run Code Online (Sandbox Code Playgroud) 我在找出如何告诉 XSD 字段数据的最小长度必须为 12 位数字和最大长度为 14 位数字时遇到一些麻烦。有没有人知道如何做到这一点,因为minlength和maxlength只能用于字符串。
<xs:simpleType name="timestamp_vorige_inspectie">
<xs:restriction base="xs:integer">
<xs:minLength value="12"/>
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud) 我发现将复杂类型从一个 XSD 文件导入和引用到另一个 XSD 文件时遇到困难。让我用一个例子来说明我的场景
学生.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="xyz"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="xyz"
xmlns="xyz"
elementFormDefault="qualified">
<xsd:element name="student" type="student" />
<xsd:complexType name="student">
<xsd:sequence>
<xsd:element name="id" type="xsd:string" />
<xsd:element name="birth-date" type="xsd:date" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
这是另一个 XSD,Teacher.xsd,我想在其中引用 Student.xsd 中的复杂类型 Student
老师.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="xyz"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="xyz"
xmlns="xyz"
elementFormDefault="qualified">
<xsd:import schemaLocation="student.xsd"
namespace="xyzzz" />
<xsd:element name="teacher" type="teacher" />
<xsd:complexType name="teacher">
<xsd:sequence>
<xsd:element name="id" type="xsd:string" />
<xsd:element name="name" type="xsd:string" />
// TODO - Refer to student from student.xsd
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
我看过其他 Stack …
我正在为一个没有内容、只有属性的元素编写 XSD,这看起来相当简单:
<xs:complexType name="ViewElement">
<xs:attribute name="Name" type="xs:string" use="required"/>
</xs:complexType>
<xs:element name="VIEW" type="ViewElement" minOccurs="0" maxOccurs="unbounded"/>
Run Code Online (Sandbox Code Playgroud)
如果 XML 包含
<VIEW Name='V_UP'></VIEW>
Run Code Online (Sandbox Code Playgroud)
或者
<VIEW Name='V_UP'/>
Run Code Online (Sandbox Code Playgroud)
效果很好。但如果 XML 包含
<VIEW Name='V_UP'>
</VIEW>
Run Code Online (Sandbox Code Playgroud)
我明白了
该元素不能包含空格。内容模型为空。
我想让 XML 的作者能够灵活地以这种方式编写 XML,但我不知道如何允许内容,而只允许空白内容。有什么建议么?
浏览器 Edge 自行将 XSD 文件从编码“UTF-8”转换为 ISO-8859-1。我的问题是 1. 这是 EDGE 的特性吗,还是 EDGE 这样做是因为 UTF-8 在我没有查看时已被弃用,并被 ISO-8859-1 取代。2. 为什么浏览器之间的处理存在差异,3. 是否存在全局首选的编码结构。已阅读 W3 学校和 Stackoverflow 文章,内容丰富,但没有建议。
我想选择一个标准来处理我的应用程序中的所有 XML 文件(会有很多)。我应该只使用 ISO-8859-1 吗?请直接指导,帮助我真的感觉自己文盲占了上风。
事实是 A. Visual Studio 使用 UTF 创建文件,b我在关联的 Xml 文件中没有特殊字符/符号,将来也不需要它们,c.chrome 浏览器忽略(不显示)以下 XML 标记,该标记显示在边缘 ' 'd。两种浏览器都会处理 file:/// ...file。
用于测试 xsd 参考的代码为 file:///D:\prjClimateControl\prgrms\slnsVsTo\prjV00G00Jun0619\sysdocXml1.xsd
边缘显示中的xml标签是但显示为
没有错误消息文件显示正确但更改了结束编码