是否可以创建一个XSD来验证这两个:
<ImageS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.com/schemas/myschema.xsd">
<Image>
<Url>http://www.nowhere.com/nothing.gif</Url>
</Image>
<Image>
<Url>http://www.somewhere.com/somewhere.gif</Url>
</Image>
</ImageS>
而且:
<Image xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.com/schemas/myschema.xsd">
<Url>http://www.yetanotheraddress.com/something.gif</Url>
</Image>
我一直在尝试使用选择元素:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="myImages"
targetNamespace="http://example.com/schemas/myschema.xsd"
elementFormDefault="qualified"
xmlns="http://example.com/schemas/myschema.xsd"
xmlns:mstns="http://example.com/schemas/myschema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:choice minOccurs="0">
<xs:element name="ImageS" type="xs:ImageList" />
<xs:element name="Image" type="xs:Image" />
</xs:choice>
<xs:complexType name="ImageList">
<xs:sequence>
<xs:element name="Image" type="Image" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Image">
<xs:sequence>
<xs:element name="Url" type="someString"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="someString">
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
当我尝试使用它时它似乎不起作用。尝试将xsd添加到C#XmlSchemaSet
:
XmlSchemaException:'http://www.w3.org/2001/XMLSchema:choice' 在此上下文中不支持元素。
这让我相信我正在做的事情不能以那种方式完成。
是否可以创建一个XSD来定义列表中的项目或只是单个项目?
答案 0 :(得分:2)
验证基于根元素开始。每个模式可以有多个根,只需删除<xsd:choice
元素。
更正了XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="myImages"
targetNamespace="http://example.com/schemas/myschema.xsd"
elementFormDefault="qualified"
xmlns="http://example.com/schemas/myschema.xsd"
xmlns:mstns="http://example.com/schemas/myschema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ImageS" type="ImageList" />
<xs:element name="Image" type="Image" />
<xs:complexType name="ImageList">
<xs:sequence>
<xs:element name="Image" type="Image" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Image">
<xs:sequence>
<xs:element name="Url" type="someString"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="someString">
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
您还遇到错误,因为为ImageS
和Image
元素指定的类型分别为xs:ImageList
和xs:Image
。这意味着这些类型生活在http://www.w3.org/2001/XMLSchema
而不是您的架构中。删除要修复的xs:
。
答案 1 :(得分:0)
架构未定义文档的根元素。每个全局元素声明都定义了潜在的验证根。换句话说,架构定义了有效的元素,而不是有效的文档。所以你不需要说root可以是Image或ImageS,这是真的,你不需要说什么。