我想创建一个遵循XML模式http://www.oid-info.com/oid.xsd的XML。应该以某种方式在XML文件中引用此XSD,以便像https://validator.w3.org/这样的工具可以检查它以查找数据语义中的错误,例如:当电子邮件地址无效时。
首先,我尝试了这种方式:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<oid-database xmlns="http://www.oid-info.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oid-info.com/oid.xsd">
<submitter>
....
</submitter>
<oid>
....
</oid>
</oid-database>
W3C Markup Validation Service说:
找不到DOCTYPE!仅检查XML语法。 DOCTYPE宣言 没有被认出或遗失。这可能意味着正式 公共标识符包含拼写错误,或者声明 没有使用正确的语法,或者您的XML文档没有使用 DOCTYPE声明。已跳过对文档的验证,并且 简单检查XML语法的格式是否正确 相反。
好的,所以我尝试使用DOCTYPE
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE oid-database>
<oid-database xmlns="http://www.oid-info.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oid-info.com/oid.xsd">
<submitter>
....
</submitter>
<oid>
....
</oid>
</oid-database>
现在W3C Validator说:
第2行,第23列:没有内部或外部文档类型声明 子集;将在没有验证的情况下解析
我确实知道DTD是什么,我过去曾使用过DTD。我知道这里缺少DTD。但我想检查XSD,而不是DTD。
我需要做些什么才能让它发挥作用?
答案 0 :(得分:2)
W3C Validator将检查格式良好并将验证DTD;它不会对XSD进行验证。您将不得不使用另一个在线或离线验证器。
此外,以下是您的XML文件应该如何暗示它应该针对OID XSD进行验证有效:
<?xml version="1.0" encoding="UTF-8" ?>
<oid-database xmlns="http://oid-info.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://oid-info.com
http://www.oid-info.com/oid.xsd">
<submitter>
....
</submitter>
<oid>
....
</oid>
</oid-database>
另请参阅:How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
请注意,这些XSD似乎有自己的问题,包括:
[警告] xhtml-light.xsd:8:36:schema_reference.4:无法读取 架构文档'xml.xsd',因为1)找不到文档; 2) 该文件无法阅读; 3)文档的根元素是 没有。
[错误] oid.xsd:91:46:InvalidRegex:模式值 ?“{\ S *(((([AZ] [A-ZA-Z0-9 - ] \ S ((\ S *(0 | [1-9] [0-9] )\ S ))|φ(0 | [1-9] [0-9]的))){2,} \ S )|((0 | [ 1-9] [0-9]的)((0 |。[1-9] [0-9] )?)的))\ S }” 不是有效的正则表达式。