如果我有以下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 with elements from other namespace
https://www.codeproject.com/articles/18455/xsd-tutorial-part-of-namespaces
哪一个是正确的?
答案 0 :(得分:0)
它也不会“导致”。架构中的SomeType是类型的名称,而不是元素声明的名称。它当然也可以是元素声明的名称,但我们不知道它所在的命名空间。我们也不能看到MySecondNS在模式中出现的位置(如果有的话)。
答案 1 :(得分:0)
您还没有真正提供足够的信息。正如Michael指出的那样,您无法从complexType定义创建XML元素。
但是,如果给出正确的模式,任何一种情况都是有效的。
我还应该指出,在这个示例中,xmlns:ns1 =&#34; MySecondNS&#34;语句什么都不做,它只是声明一个命名空间。宣布后不再使用。
<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>
然后Valid 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>
命名空间的规则在单个文件中相当简单,但在处理已包含或导入的多个模式文件时会变得相当复杂。在尝试理解导入/包含对命名空间的影响之前,我建议您理解适用于单个模式的规则。
如果您将来提供更完整的样本,也会有所帮助。