[英]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>
我在
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.