好的,所以我的任务是从供应商提供给我们的XML文档中编写XSD。这个供应商没有他们可以提供的XSD,所以我是逆向工程的。以下是此xml形成方式的示例:
<field name="id">1</field>
<field name="Sport">Football</field>
<field name="Position">Quarterback</field>
<field name="Touchdowns">7</field>
<field name="Interceptions">2</field>
<field name="Yardage">2000</field>
因此,由于所有元素都被命名为“field”,因此我无法为此创建架构。这就是我到目前为止所做的:
<xs:element name="field" type="xs:int">
<xs:simpletype>
<xs:attribute name="name" type="xs:string" default="id"/>
</xs:string>
</xs:element>
我遇到的问题是所有元素都具有相同的名称。我用来编写xsd的软件遇到了问题。我在这里有正确的方法吗?
感谢您的帮助。
答案 0 :(得分:5)
maxOccurs
元素的field
的默认值为1(因此请尝试将其设置为无限制),simpleType
可能不包含属性或子元素。
我相信以下示例正在发挥作用:
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="fields">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="field"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="field">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
XML:
<?xml version="1.0" ?>
<fields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="fields.xsd">
<field name="id">1</field>
<field name="Sport">Football</field>
<field name="Position">Quarterback</field>
<field name="Touchdowns">7</field>
<field name="Interceptions">2</field>
<field name="Yardage">2000</field>
</fields>
我在name
类型中使用了xs:string,但我想你可以定义一个新的数据类型来强制只使用某些关键字......
答案 1 :(得分:2)
你基本上有一个类型,它是以不同方式扩展的基本元素。如果代码有点偏差,请原谅我,我没有尝试验证模式,我是从内存中编写的,不是编写Schema的好方法,但你应该明白这一点。
<xsd:complexType name="field">
<xsd:simpleContent>
<xsd:extension>
<xsd:attribute name="name" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
使用属性名称定义基本元素(对属性类型没有约束)。这将验证原始帖子中的所有示例。
然后你可以尝试扩展它:
<xsd:complexType name="idField">
<xsd:complexContent>
<xsd:extension base="field">
...restrict it in here
</xsd:extension>
<xsd:complexContent>
</xsd:complexType>
为每个变体做类似的事情,基本上使它们成为主要定义的子类型。
我意识到这个“答案”并没有真正给出明确的答案,但希望它会把你推向正确的方向。
如果做不到这一点,除了让供应商重写XML之外,我不会看到你能做些什么。