XML NameSpace

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace=http://www.abc.com/schema/list
            xmlns="http://www.abc.com/schema/list" 
            elementFormDefault="unqualified" >
1. targetNamespace
    目标命名空间,指定本xsd命名空间,也可以理解成本xsd给该命名空间定义类型

2. xmlns[:prifix]
    引入命名空间的类型,本例引入xsd及自身
    自身名空间没有前缀限定,作为默认命名空间,因此在该xsd文档中应用自身定义的类型就不用再加上前缀限定了
    (targetNamespace属性值和xmlns属性值如果相等,则文中引用本文的类型不用加前缀限定)
   
3. elementFormDefault
    需要声明为qualified;unqualified时 校验不能通过

java校验xml是否符合xsd时:
        SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
        File schemaFile = new File("./request.xsd");
       
        Schema schema = schemaFactory.newSchema(schemaFile);
        Validator validator = schema.newValidator();
       
        Source source = new StreamSource(new ByteArrayInputStream(content));
        validator.validate(source);

1. xsd包含targetNamespace xmlns;xml没有xmlns xmlns:xsi xsi:schemaLocation声明
    报错cvc-elt.1.a: Cannot find the declaration of element
    解决方法是xml加上xmlns xmlns:xsi xsi:schemaLocation
        xmlns="http://www.abc.com/schema/list "
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.abc.com/schema/list request.xsd"
2. xsd包含targetNamespace xmlns中的一个;xml没有xmlns xmlns:xsi xsi:schemaLocation声明
    报错can not referencable,解决同上
3. xsd不包含targetNamespace xmlns;xml没有声明:能通过校验

你可能感兴趣的:(xml,命名空间,职场,休闲)