Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml模式中的全局声明_Xml_Xsd - Fatal编程技术网

Xml模式中的全局声明

Xml模式中的全局声明,xml,xsd,Xml,Xsd,a) 为什么全局元素和属性声明必须始终属于名称空间,因此必须始终在实例文档中限定 b) 本地元素/属性声明(其表单属性设置为非限定)是否仍然是架构目标命名空间的一部分,即使它们与实例文档中的任何命名空间都没有关联 c) 即使类型/组声明是全局的,它仍然是目标命名空间的一部分,因此在引用全局声明时,我们必须包含目标命名空间前缀 无论如何,全局声明是目标命名空间的一部分而本地声明不是,这有什么特别的原因吗?也就是说,即使全局类型/组声明不属于目标名称空间,我们仍然可以在Xml模式中引用它们,因此它们

a) 为什么全局元素和属性声明必须始终属于名称空间,因此必须始终在实例文档中限定

b) 本地元素/属性声明(其
表单
属性设置为
非限定
)是否仍然是架构目标命名空间的一部分,即使它们与实例文档中的任何命名空间都没有关联

c) 即使类型/组声明是全局的,它仍然是目标命名空间的一部分,因此在引用全局声明时,我们必须包含目标命名空间前缀

无论如何,全局声明是目标命名空间的一部分而本地声明不是,这有什么特别的原因吗?也就是说,即使全局类型/组声明不属于目标名称空间,我们仍然可以在Xml模式中引用它们,因此它们成为名称空间的一部分肯定还有其他好处

多谢各位

编辑:


@用户437291:如果您理解 名称空间的概念和 限定名称为什么要使用单词 “本地”和“全球”,这不是 概念的一部分

但为什么本地类型声明必须是Xml模式的目标命名空间的成员呢?它们不是从实例文档或其他Xml模式中引用的,因此它们作为目标命名空间的成员的目的/好处是什么

此外,问题是 元素或属性属于 名称空间实际上独立于 该委员会的“资格”。它是 不同的属性,如颜色和颜色 某物的大小

一个元素/属性如何属于一个名称空间,同时又不必在实例文档中进行限定?在编程语言中,如果类型
T
是命名空间
N1
的成员,这意味着它的完全限定名是
N1.T
,因此其他类型需要使用完全限定名
N1.T
(这里我忽略
使用
指令等)

我希望Xml模式和Xml实例文档也是如此——因此,据我所知,当Xml模式验证器解析
Contacts.Xml
遇到限定元素
contact:firstName
,它会使用名称搜索
Contacts.xsd
以查找匹配的元素声明

在找到匹配项后,验证程序接着处理
Contacts.xml
中的下一个元素,即
lastName
。看到
lastName
元素是
unqualified
,它在
Contacts.xsd
中搜索名为
lastName
的元素声明。现在,如果在
Contacts.xsd中,它的完全限定名是
http://www.someDomain.com.lastName
,则验证程序将无法找到匹配的声明!但它确实找到了一个匹配的声明,所以我假设
lastName
不是名称空间的成员

Contacts.xml

<?xml version="1.0" encoding="UTF-8"?>
<contact:contact      
     xmlns:contact="http://www.someDomain.com"
     xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
     xs:schemaLocation="http://www.someDomain.com contacts1.xsd">
            <contact:firstName></contact:firstName>
            <lastName></lastName>         
</contact:contact>

Contacts.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.someDomain.com"  targetNamespace="http://www.someDomain.com" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="contact">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="firstName" />
                <xs:element name="lastName" form="unqualified"/>        
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

在我看来,你的问题与对特殊名称空间的理解有关:没有名称空间“。在下面的简单XML文档中

<?xml version="1.0" encoding="utf-8"?>
<root>
    <myElement>Bla Bla</myElement>
</root>
因为在模式中没有使用它
targetNamespace
,所以模式定义了“无命名空间”的模式

顺便说一下,“模式”http://www.w3.org/2001/XMLSchema-instance“提供了从XML文档引用架构的简单方法。让我们将上述模式文档保存在文件
NoNamespace.xsd
中,并将XML文档保存在文件
NoNamespace.XML
中。此外,我们将两个文件放在同一个文件夹中。然后我们可以将XML文档修改为以下内容

<?xml version="1.0" encoding="utf-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="NoNamespace.xsd">
    <myElement>Bla Bla</myElement>
</root>
元素
及其子元素具有“http://www.w3.org/1999/xhtml“命名空间,并且应该根据众所周知的XHTML模式进行验证。元素
具有“无名称规范”。元素
具有名称空间“http://www.ok-soft-gmbh.com/xsd/test/123". 元素
元素也有类似
的“无名称规范”。所以一切都很简单

更新:如果我理解您更正了XML模式中定义的所有类型,那么在您的定义中将是“全局的”。不能定义“内部”或“私有”类型

我不确定您对示例中包含的XML文件和XSD模式有什么问题。您可以使用以下相同的模式重写XML文件,这可能会对您有所帮助:

<?xml version="1.0" encoding="UTF-8"?>
<contact xmlns="http://www.someDomain.com"
         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
         xs:schemaLocation="http://www.someDomain.com Contacts.xsd">
    <firstName></firstName>
    <lastName xmlns=""></lastName>
</contact>


因此元素
lastName
是在schema
Contacts.xsd
中定义的,但它被定义为来自“no namespace”的元素。XML模式表示来自
元素http://www.someDomain.com“
必须有两个子元素:
firstName
来自
targetNamespace
”http://www.someDomain.com以及“无命名空间”中的元素
lastName
。我希望它能对您有所帮助。

您好,我感谢您的帮助,但除了告诉我特殊名称空间“无名称空间”之外,您还没有真正回答我的问题。名义上,我已经知道你解释的所有内容。@user437291:如果你理解名称空间和限定名称的概念,为什么要使用“本地”和“全局”这两个词,而这两个词不是概念的一部分?此外,元素或属性是否属于名称空间的问题实际上与它的“限定”无关。它是不同的属性,如颜色和大小的东西。也许如果你用一个例子来描述你的问题,一切都会更清楚。
<?xml version="1.0" encoding="utf-8"?>
<root>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <body>
            <p>Hello!</p>
        </body>
    </html>
    <myElement>
        <myChild xmlns="http://www.ok-soft-gmbh.com/xsd/test/123">
            <mySubChild xmlns="">
                <x></x>
            </mySubChild>
            <mySecondChild>Hello!<mySecondChild>
        </myChild>
    </myElement>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<contact xmlns="http://www.someDomain.com"
         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
         xs:schemaLocation="http://www.someDomain.com Contacts.xsd">
    <firstName></firstName>
    <lastName xmlns=""></lastName>
</contact>