繁体   English   中英

XML命名空间

[英]Namespace in XML

如果我有以下xsd片段(使用MyRootNs但没关系)

<xs:complexType name="SomeType">
    <xs:sequence>
        <xs:element name="SomeElement" type="ns1:SomeType" />
        ...

这会导致

<SomeType xmlns="MyRootNs" xmlns:ns1="MySecondNS">
    <SomeElement>
        ...
    </SomeElement>
</SomeType>

或在

<SomeType xmlns="MyRootNs" xmlns:ns1="MySecondNS">
    <ns1:SomeElement>
        ...
    </ns1:SomeElement>
</SomeType>

我在

具有来自其他命名空间的元素的XSD

https://www.codeproject.com/articles/18455/xsd-tutorial-part-of-namespaces

哪一个是正确的?

它也不“导致”。 模式中的SomeType是类型的名称,而不是元素声明的名称。 当然,它也可能是元素声明的名称,但是我们不知道它在哪个命名空间中。也看不到MySecondNS在模式中出现的位置(如果有的话)。

您尚未真正提供足够的信息。 正如Michael指出的那样,您不能通过complexType定义创建XML元素。

但是,只要有正确的架构,任何一种情况都是有效的。

我还应该指出,在此示例中,xmlns:ns1 =“ MySecondNS”语句不执行任何操作,仅声明一个名称空间。 声明后不使用。

<SomeType xmlns="MyRootNs" xmlns:ns1="MySecondNS">
    <SomeElement>
        ...
    </SomeElement>
</SomeType>

如果您的架构如下所示

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2017 Developer Bundle Edition (Trial) 15.0.0.6978 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" targetNamespace="http://MyNamespce1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:q1="http://MyNamespce1">
    <xs:complexType name="SomeType">
        <xs:sequence>
            <xs:element  name="SomeElement" type="q1:SomeType" minOccurs="0" />
        </xs:sequence>
    </xs:complexType>
    <xs:element name="MyRoot" type="q1:SomeType" />
</xs:schema>

在此处输入图片说明

然后有效的XML看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid XML 2017 Developer Bundle Edition (Trial) 15.0.0.6978 (https://www.liquid-technologies.com) -->
<MyRoot xmlns="http://MyNamespce1" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://MyNamespce1 Schema.xsd">
    <SomeElement>
        <SomeElement>
            <SomeElement></SomeElement>
        </SomeElement>
    </SomeElement>
</MyRoot>

要么

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid XML 2017 Developer Bundle Edition (Trial) 15.0.0.6978 (https://www.liquid-technologies.com) -->
<ns:MyRoot xmlns:ns="http://MyNamespce1" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://MyNamespce1 Schema.xsd">
    <ns:SomeElement>
        <ns:SomeElement>
            <ns:SomeElement></ns:SomeElement>
        </ns:SomeElement>
    </ns:SomeElement>
</ns:MyRoot>

名称空间的规则在单个文件中非常简单,但是在处理包含或导入的多个架构文件时却变得相当复杂。 我建议您在尝试了解导入/包含对名称空间的影响之前,先将规则应用于单个架构,然后再进行理解。

如果将来您提供更完整的样本,也会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM