我想准备.xsd来验证我给出的XML文档。
在bespoken文档中定义了两个名称空间:
<?xml version="1.0" encoding="UTF-8"?>
<komunikat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="www.example.com/xml"
xmlns:nfz="www.example.com/xml/nfz"
nfz:version="1.7"
nfz:info-aplik-nad="KS-PPS 2016.00.3.1">
type="someType"
version="4"
</komunikat>
在我的架构中,我尝试过:
targetNamespace="www.example.com/xml"
xmlns:nfz="www.example.com/xml/nfz"
...
<xs:attribute name="nfz:info-aplik-nad" use="optional" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="40" />
</xs:restriction>
</xs:simpleType> ...
但是在我的验证器中我收到错误:
.XMLSchemaParseError: Element '{http://www.w3.org/2001/XMLSchema}attribute', attribute 'name': 'nfz:info-aplik-nad' is not a valid value of the atomic type 'xs:NCName'., line 25
我理解:
attribute
名称属性中不允许使用ArrayAdapter
字符。
是否可以不更改xml文件?
答案 0 :(得分:1)
只有名称空间中的属性可以在其名称中包含冒号(以指定名称空间前缀)。
您的XML和XSD存在许多无关紧要的问题。这是一个完整的,更小的示例,它显示了一个对XSD有效的XML实例,其中属性位于命名空间中:
<?xml version="1.0" encoding="UTF-8"?>
<komunikat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://myNameSpace.com"
xmlns:nfz="http://myNameSpace.com"
nfz:info-aplik-nad="KS-PPS 2016.00.3.1"/>
<xs:schema targetNamespace="http://myNameSpace.com"
xmlns:m="http://myNameSpace.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified" >
<xs:element name="komunikat">
<xs:complexType>
<xs:sequence/>
<xs:attribute name="info-aplik-nad" use="optional" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="18" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
特别注意在XSD中使用attributeFormDefault="qualified"
。
为了使用额外的命名空间,您必须有一个额外的XSD,然后将其导入(使用xs:import
)到主XSD。