xml 调用xml_引用XML模式
随着W3C对XML Schema规范的最新定稿,您可能要开始使用模式。 与使用DTD(文档类型定义)相比,模式在定义约束时具有更大的灵活性和特异性。 本技巧说明了使用模式的一个重要部分:如何在文档中引用它们。 即使其他人正在编写模式,您可能也需要知道如何在XML文档中引用它们。DTD的旧时代首先,让我给您一个快速的比较参考。 在使用XML Schema之前,每个人都使用DTD进行约...
xml 调用xml
随着W3C对XML Schema规范的最新定稿,您可能要开始使用模式。 与使用DTD(文档类型定义)相比,模式在定义约束时具有更大的灵活性和特异性。 本技巧说明了使用模式的一个重要部分:如何在文档中引用它们。 即使其他人正在编写模式,您可能也需要知道如何在XML文档中引用它们。
DTD的旧时代
首先,让我给您一个快速的比较参考。 在使用XML Schema之前,每个人都使用DTD进行约束,而许多人仍然使用。 为此,您可以在XML文档中使用DOCTYPE
声明引用DTD,如清单1所示:
清单1.引用DTD
<?xml version="1.0"?>
<DOCTYPE hockeyTeam SYSTEM "dtd/hockeyTeam.dtd">
<hockeyTeam>
<team name="Dallas Stars">
<!-- More XML Content -->
</team>
</hockeyTeam>
在清单1的文档中,引用的DTD在目录dtd
名为hockeyTeam.xml
。 您可以在XML文档的DOCTYPE
标记中指定约束,而不是在单独的DTD文档中指定约束。 在本示例中,我使用一个具有XML约束的单独的DTD文档,因为它的设计更好,并且与使用XML模式所需的方法并行。
名字...空间是什么?
除了了解XML的基础知识之外,您还需要了解XML命名空间规范(请参阅参考资料 )。 该规范的优点远不止此技巧,但您需要知道的是,名称空间实际上将前缀(如nhl
)绑定到特定的URI(如http://www.nhl.com)。 您可以将前缀添加到元素名称的开头(例如nhl:hockeyTeam
),以将该元素放入关联的URI标识的名称空间中。 如果您指定URI但没有前缀,则该名称空间将成为默认名称空间 ; 没有前缀的元素属于默认名称空间。 将默认名称空间与所有其他名称空间一样,但带有空前缀可能会有所帮助。 名称空间声明及其前缀的使用为您提供了一种在单个模式中使用多个名称空间中的元素定义的方法。
单个XML模式可以在单个名称空间上设置约束。 因此,如果在XML文档中有四个名称空间,并且想要限制所有名称空间中的所有元素,通常将需要四个XML模式。 对于每个名称空间,您需要指定约束该名称空间的架构。 同样,名称空间在内容和功能之间提供了很好的隔离。
深入了解
好的,这已经足够了。 是时候说清楚了。
您需要做的第一件事是在文档中声明XML Schema Instance名称空间,以使您能够访问引用XML模式所需的属性。 当然,您添加了前缀映射( xsi
)和相关的URI,如清单2所示。我还添加了一个默认的命名空间http://www.nhl.com,以为所有未添加前缀的元素提供一个宿主。在文档中(在此示例中,所有元素都是非前缀元素)。
清单2.定义XML模式实例名称空间
<?xml version="1.0"?>
<hockeyTeam xmlns="http://www.nhl.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<team name="Dallas Stars">
<!-- More XML Content -->
</team>
</hockeyTeam>
一旦有了XML Schema Instance命名空间,就可以在其中使用schemaLocation
属性。 该属性的值实际上是两个值。 第一个值或参数是要约束的名称空间。 在示例中,这是默认名称空间http://www.nhl.com
。 第二个值或参数是用于该名称空间约束的XML模式的位置。 要了解这一点,请查看清单3:
清单3.引用一个XML模式
<?xml version="1.0"?>
<hockeyTeam xmlns="http://www.nhl.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nhl.com schemas/hockeyTeam.xsd">
<team name="Dallas Stars">
<!-- More XML Content -->
</team>
</hockeyTeam>
注意名称空间URI和模式之间的空间。 注意插入该空间 ; 遗忘它会给您带来各种麻烦! 另外,请注意,模式位置也可以很容易地成为URI,如清单4所示:
清单4.使用URI作为模式位置
<?xml version="1.0"?>
<hockeyTeam xmlns="http://www.nhl.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nhl.com
http://www.nhl.com/hockeyTeam.xsd">
<team name="Dallas Stars">
<!-- More XML Content -->
</team>
</hockeyTeam>
你去。 添加新的名称空间和架构很简单,只需将第二对 (或第三或第四对)值添加到schemaLocation
属性即可。 清单5向XML文档添加了一个新的名称空间,并提供了另一个模式引用。
清单5.引用多个模式
<?xml version="1.0"?>
<hockeyTeam xmlns="http://www.nhl.com"
xmlns:stars="http://www.dallasstars.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nhl.com
http://www.nhl.com/hockeyTeam.xsd
http://www.dallasstars.com http://www.dallasstars.com/stars.xsd"">
<team name="Dallas Stars" stars:logo="http://www.dallasstars.com/logo.jpg">
<!-- More XML Content -->
</team>
</hockeyTeam>
如果您正在使用模式或打算使用它们,则一定要检查XML Schema规范(从第0部分开始),因为还有更多的选项可用于引用模式,在具有和不具有名称空间的情况下使用它们以及设计文档约束。 无论您使用这些功能的哪种组合,都可以明智地约束XML并从中获得乐趣!
翻译自: https://www.ibm.com/developerworks/xml/library/x-tipsch/index.html
xml 调用xml

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)