XSD文件无法验证包含dt:dt
属性的XML文件。dt:dt
属性在XSD文件中不被接受。
例如。
<xs:attribute name="dt:dt" type="xs:nonNegativeInteger" use="optional"/>
在上面的xs:attribute中,不接受dt:dt
名称。因此,无法验证包含属性dt:dt="10"
的XML文件。
是否有解决方案可以修改XSD,以便验证dt:dt
属性?
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<OperationalTopology xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xsi:noNamespaceSchemaLocation="xsd.xsd">
<Element1>
<Element1_In ID="xx" dt:dt="string"/>
</Element1>
</OperationalTopology>
XSD文件:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="OperationalTopology">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="Element1" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Element1_In" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="ID" use="optional"/>
<xs:attribute name="dt" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
在上面的代码中,xsd在验证XML时给出了错误。错误发生在dt:dt属性中。
发布于 2017-01-16 23:25:41
xs:attribute
元素的name
属性的值必须仅为本地名称(dt
)。应该在它自己的模式(比如xsd2.xsd
)中声明它,因为它有一个不同的名称空间(当然,除非这个模式已经存在于某个地方):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:schemas-microsoft-com:datatypes">
<xs:attribute name="dt"/>
</xs:schema>
然后,原始模式可以导入上述模式,将名称空间绑定到dt
前缀,并使用对dt:dt
的属性引用,而不是声明它:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="urn:schemas-microsoft-com:datatypes" schemaLocation="xsd2.xsd"/>
<xs:element name="OperationalTopology">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="Element1" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Element1_In" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="ID" use="optional"/>
<xs:attribute ref="dt:dt" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
https://stackoverflow.com/questions/41669938
复制相似问题