‘壹’ 什么叫程序的互操作性
应用程序互操作性:互用性基本原理
发布者:[本站编辑] 来源:[] 浏览:[] 评论:[] 字体:大 中 小
面对互用性的挑战
在最基本的层次上,实现应用程序平台之间的互用性要涉及到数据的交换。 当实现一个 .NET 和 J2EE 互用性项目时,面临三种主要的数据交换挑战。 这三个挑战如下:
• 原始数据类型映射。
• 不存在的数据类型
• 复杂数据类型
注原始数据类型是基于 .NET 或 Java 的基本类型系统的组件,例如:整型、字符串、双精度等。
所有的挑战都涉及到类型兼容性,并有可能阻碍或阻止数据传输。
这三个挑战分解如下:
• 原始数据类型映射 钬_ 您可能知道“String”类型在 CLR 和 Java 中都存在。 然而,这并不意味着 Java 中的 java.lang.String 完全映射为 .NET 中的 System.String。 如果示例公开 java.lang.String,您如何将之映射为 CLR 中的相当成分?
• 不存在的数据类型 钬_ 如何映射一个平台上有而另一个平台上没有的数据类型? 例如,System.Collections.Specialized.HybridDictionary 是一个在 CLR 中被证实存在的数据类型,但在 Java 中却没有相似的数据类型。 Java 中存在类似情况,例如 Java.util.Vector,它在 .NET 中没有相似的数据类型。
• 复杂数据类型钬_ 您的应用程序可能公开复杂数据类型,由数量众多的原始数据类型或者嵌套的原始数据类型组成。 此时需要公开复杂数据类型以便其他平台可以使用它。
考虑如图 3.1 所示的集成一个 ASP.NET 表示层和一个 J2EE 业务层的示例。 在此示例中,J2EE 业务层中的一个 EJB 公开了一个 ASP.NET 表示层随后调用的方法。 在一个生产应用程序中,该返回数据不可能是简单的“Hello World”字符串,它可能包含复杂元素。
图 3.1: ASP.NET 表示层连接到 J2EE 业务层
幸运的是,已经存在许多方法可使应用程序在不同平台之间交换不同类型的数据,并且第 4 章和第 5 章将详细地描述这些选择。 然而,在能够在两个平台间建立连接之前,您必须在它们试图进行交换之前确保双方理解特定的数据类型,除此之外也有一个使双方都可以使用的传递数据的方法。 下一部分讲述如何使用序列化实现该传递。
使用序列化
序列化是使一个对象或类编码成为永久的或可传输状态的过程。 这使您接受一个复杂数据类型,然后编码、保存、传递和解码,并可能使用一个单独的进程处理解码。
有两个主要的序列化类型:
• 二进制序列化 钬_ 接受数据类型并且将其转换为二进制流。
• XML 序列化 钬_ 将数据类型转换为可以随后转换为 XML 文档的 XML 流。
可以从任一种序列化类型中接受输出,并将其存储在内存中、放在文件中,还可以通过网络连接进行传输。 例如,您的应用程序可能有一个已经定义的复杂数据类型 CustomerData,它存储着有关客户的信息(如姓名、地址、电话号码等)。 可以使用序列化将 CustomerData 数据类型转换为一个二进制或 XML 流,这样您可以跨越进程边界进行传输或者将它保存为一个文件稍候使用。 当该对象存在于二进制或 XML 格式中时,就已经被序列化了。
反序列化是一个将已经序列化的对象转换回它原始形式的过程。 通常,将对象反序列化为它们的原始类型。 因此,如果将 CustomerData 数据类型序列化为一个二进制流或一个 XML 文档,能够将其反序列化回数据类型 CustomerData 而不能反序列化为数据类型 OrderData。OrderData.
.NET和 J2EE 在同一平台内应用程序间的数据交换都使用序列化。 通过将序列化对象传递给其他平台以进行反序列化,还可以使用序列化在不同平台上的应用程序间交换数据。 以下部分考查如何在 .NET 和 Java 上实现二进制和 XML 序列化。
理解二进制序列化
二进制序列化是接受一种复杂数据类型(或对象),并将其编码为一个二进制流、更改为永久状态、传输然后解码(反序列化)回原始复杂数据类型的过程。
Java 和 .NET 两者都包含一个能将任何可序列化的数据类型转换为一个字节流的二进制序列化程序。 各个平台上执行该序列化的类是相似的,并且实现起来很简单。
对 .NET 和 Java 两者的二进制序列化而言,首先必须使用一个标签以指示要序列化一个类型。 在 .NET 中,可以使用 [Serializable] 属性或实现 ISerializable 接口。. 在 Java 中,同样的方法是使用类实现 java.io.serializable。
不幸的是,.NET 和 Java 的序列化程序不兼容。 因此,无法将由 Java 序列化程序序列化的 CustomerData 对象直接流式传输到 .NET 版本中去,反之亦然。 即使可以这样做,还是要面对如下挑战:让 .NET 框架应用程序理解 Java 序列化程序产生的 CustomerData 对象。 .NET 一方可能没有一个等同的 CustomerData 数据类型来接受来自 Java 方的 CustomerData 反序列化对象。
只要使用同样的格式化程序执行对象的序列化和反序列化,就可以 使用二进制序列化程序连接 .NET 到 Java。 创建来自数据类型的字节流格式,必须与接收字节流并且重新构造对象的格式完全匹配。
有两种可以用来避免默认的 J2EE 和 .NET 二进制序列化程序不兼容的方法。 它们是:
• 创建一个在 Java 和 .NET 中共享相同格式选项的自定义序列化程序。
• 在 .NET 框架中使用一个处理二进制格式化程序的第三方产品,如 JaNET 或 JNBridgePro。
有关使用 JaNET 和 JNBridgePro 实现二进制序列化的更多信息,请参阅第 4 章“互用性技术: 点对点。”
理解 XML 序列化
XML 序列化是接受一个复杂数据类型(或对象)并将其解码为 XML 流的过程。 然后,可以将 XML 流转变为一个 XML 文档形式的持久化状态,进行传输,再将其解码(反序列化)回其原始复杂数据类型(或对象)。
为了理解 XML 序列化过程,必须对 XML 有一个基本的了解。 XML 是一个基于文本的包含结构化的和可扩展数据的文档标记语言。 因为 XML 是基于文本的,所以可以像一个正常的文本一样读它;并且因为它是可扩展的,所以可以使用它描述几乎所有的信息类型。 因此 XML 文档可以包括:
• 文本
• 图片
• 程序设置
• 数据架构
• 批注
• 插入
XML 文档也可以包括关于如何使用文档自身中的数据的指导。
有关 XML 的更多信息,请参阅 Microsoft XML Web site。
在“理解二进制序列化”一节中,您可以看到 .NET 和 Java 平台的二进制序列化程序是如何互相不兼容的。 然而,XML 是与平台无关的。. 如果在一个平台中可以将一个对象或数据类型序列化为 XML 文档,应该很容易读取、理解和反序列化该文档为另一个平台的对象或数据类型。 不幸的是,并非总是如此,但在大多数情况下 XML 序列化的确提供了一个互用性通道。
分析 XML 文档
在 .NET 和 J2EE 内,有几种不同的方法可以读、写和编辑 XML 文档。 该过程就是 XML 分析,并且两个平台都具有稳定成熟的 XML 分析器。 使用分析器,您可以在人工地从一个 XML 文档中读取数据的应用程序内编写代码,然后将数据插入到一个复杂数据类型对象。 例如,可以使用分析从 J2EE 应用程序产生的 XML 文档中读取数据,然后将数据插入到 .NET 数据类型。 分析允许在 .NET 和 J2EE 之间交换数据。
读写 XML 文档的分析器通常主要分三种类型:
• 双方平台上的文档对象模型 (DOM)
• 仅在 Java 上的用于 XML 的简单 API (SAX)
• 仅在 .NET 上的 Pull model 分析
DOM XML 分析器将整个文档加载到内存,这具有一些优点,也有一些缺点。 整个文档位于内存中,可以简单快速地遍历 XML 层,但大量的文档会因为内存的消耗而影响性能和响应。
SAX 只根据需要读取 XML 文件的一部分。 由于是按需要读文件,则对性能的影响较小,但由于阻止向后分析而降低了灵活性。
Pull model 分析使用一个只进、只读的 XmlReader 游标。XMLReader 提供快速、无缓存的流去访问输入数据,允许提取数据和忽略不感兴趣的记录。 因为 XmlReader 处于 pull model,必要时应用程序可从读取器中提取节点。 Pull model 提供了一些便利,如状态管理、多输入流、避免额外的字符串复制以及有选择性地处理。 有关使用 XmlReader 的更多信息,请参阅 MSDN 上的“Reading XML with the XmlReader”。
System.Xml 命名空间提供 XmlDocument 和 XmlElement 两个类使您能够在 .NET 中分析 XML。 还提供一些方法,能够在 XML 文档内添加和修改元素并且遍历那些文档。
在 Java 中,可以使用 Document 和 Element 类达成相似的结果。
XML 分析的局限性
您需要了解一些 XML 分析的局限性。 当从一个 XML 文档访问和读取不同的数据元素时,分析工作进行正常。 然而,对文档本身操作信息可能很快就会变得很困难。 而且,分析器没有内部方法可用于将 XML 文档中的对象映射为 Java 或 .NET 中的类。 将 XML 文档中的数据映射为应用程序的对象和类中需要将 XML 序列化。
XML 分析被认为是一种实现 XML 序列化的低效方法,并且不建议使用此方法作为在 .NET 和 Java 间交换 XML 数据的方法。 .NET 和 J2EE 都具有包含分析功能的 XML 序列化程序。
当创建 XML 文档时,XML 序列化提供显着的改进。 它使您脱离沉闷的 XML 分析过程,关注开发应用程序本身和相关数据类型。 XML 序列化将 .NET 中的对象收集任务简化,将其转换为 XML 文档并且可以让一个 Java 应用程序去读取,反之亦然。
在 .NET 平台上实现 XML 序列化
.NET 框架为 XML 序列化提供大量的类和 API。 其中一个主要的类就是 System.Xml.Serialization.XmlSerializer 类。 该类将 .NET 框架类型序列化为 XML文档,并且可将 XML 文档序列化回来。 XML 序列化只将一个对象的公共字段和属性转换(或序列化)为一个 XML 流,但是二进制序列化将对象的公共和私有字段连同类名以及包括该类的程序集转换为字节流。
可以使用 [Serializable] 属性指明要序列化的类型,如同二进制序列化一样。 还可以使用该数据类型类实现 ISerializable 接口。
XML 序列化使用与二进制序列化不同的规则。 例如,不必使用 [Serializable] 属性标明 .NET 数据类型,尽管这仍是建议的做法。 然而,.NET 数据类型必须有一个有效的默认公共构造函数。
将 .NET 对象序列化为 XML
以下示例说明在 .NET 下如何使用 XMLSerializer 将一个 CustomerData 类的实例(称为 custData)转换为一个 XML 流。 该示例假设 .NET 框架应用程序已经具有一个被定义为 CustomerData 的标记为可序列化的数据类型类。
XmlSerializer serializer = new XmlSerializer(typeof(CustomerData));
serializer.Serialize(fileStream, custData);
XMLSerializer 类的 Serialize 方法序列化CustomerData 对象的内容 custData,并且产生一个文件流输出。 该流指向一个文件,该文件是一个 XML 文档,它代表 CustomerData 对象的序列化版本 custData。
将 XML 中的对象反序列化到 .NET 中去
下一个示例说明如何使用 .NET 中的 XMLSerializer 从一个存储为文件的 XML 文档返回 CustomerData 对象的实例 custData。
XmlSerializer serializer = new XmlSerializer(typeof(CustomerData));
CustomerData custData =
(CustomerData)serializer.Deserialize(fileStream);
此处使用类 XmlSerializer 的方法 Deserialize 从一个作为流传递到序列化程序中的 XML 文档返回一个 CustomerData 对象 custData。
注Deserialize 方法返回一个具有 System.Object 类型的对象。 在将返回对象分配给目标类型前确保对返回的对象进行了适当的强制转换。
序列化可能因为某些原因而失败:
• 反序列化的 XML 文档包括序列化程序无法处理的字段。
• 对象无法序列化,如实现 IDictionary 接口的任何对象。
• 对象未被声明为公共。
• 对象不包括一个有效的无参数构造函数。
注在试图序列化一个满足上面讲的四种类别之一的对象时,从 XmlSerializer.中生成一个 System.InvalidOperationException。 当调试 XML 序列化时,应该检查并且处理任何满足这种异常的实例。
为 Java 平台实现 XML 序列化
无论对 J2SE 还是 J2EE 而言,对象的 XML 序列化都不是核心规范的一部分。 因此,需要使用一个第三方序列化程序,几个选择如下:
• Electric XML
• Apache Cocoon
• Open XML Framework (OXF)
• Java Architecture for XML Binding (JAXB)
尽管无需使用 Web 服务来使用 XML 序列化特性,许多序列化程序仍旧构成了较大的 Web 服务软件包的一部分。 Java 序列化程序结合使用反射 和映射 将对象数据写为正确的 XML 格式。 反射是一种检查对象结构的技术,而映射类似于一个可扩展样式表语言转换 (XSLT) 文档,将对象中的字段名映射为 XML 文档的元素或属性。
使一个 Java 类可序列化,需要实现 Serializable 接口。 因此 CustomerData 的类声明如下。
public class CustomerData implements java.io.Serializable
可序列化的类也必须具有一个无参数构造函数。 还可以使用 serialPersistentFields 成员去显式声明哪些字段可被序列化,或者使用瞬态关键字指出无法序列化的字段。 不可序列化字段的示例可能是包含敏感数据的字段。
为了控制保存和读信息,在 Java 中标记为序列化的类还可实现 readObject 和 writeObject 方法,以及 writeReplace 和 readResove 方法以指定替换对象。
为对类的序列化进行完全控制,还可实现 Externalizable 而不是 Serializable。 当使用 Externalizable 时,必须实现 writeExternal 和 readExternal 方法写数据内容以及数据格式和相关的元数据。
接下来两个使用 Electric XML 的示例说明如何序列化和反序列化一个 Java 对象。 此处您可以看到 Electric XML 对 .NET 使用相似的方式处理序列化和反序列化过程。
将 Java 对象序列化为 XML
下面的示例假设 Java 应用程序定义一个可序列化的数据类型类 OrderData,该数据类型类实现了 java.io.serializable。 它说明了在 J2EE 中如何使用 Electric XML 序列化程序将该类的命名实例 order 转换为一个 XML 文档。
electric.xml.io.IWriter writer = new LiteralWriter(xmlNameSpace,OrderData);
writer.writeObject(order);
electric.xml.Document document = writer.getDocument();
在该示例中,首先创建了类型 electric.xml.io.IWriter 的一个实例,将要创建的 XML 文档的 XML 命名空间和对象类型 (OrderData) 作为参数传入。 IWriter 对象的 writeObject 方法序列化 OrderData 对象的内容 order。 最后,对象 IWriter 的方法 getDocument 返回包含对象 OrderData 的已序列化内容的 XML 文档。 随后可以将该文档写入到流。
从 XML 反序列化对象到 Java
下一个示例说明在 J2EE 中如何使用 Electric XML 序列化程序从名为 xmlDocument 的 XML 文档中返回 OrderData 对象的一个实例 order。
electric.xml.io.IReader reader = new LiteralReader(xmlDocument);OrderData order = (OrderData)reader.readObject(OrderData.class);
这里使用 IReader 类的 readObject 方法从作为参数传到读取器的 XML 文档中返回 OrderData 对象的一个实例 order。
注readObject 方法返回类型 java.lang.Object 的一般对象。 在给目标类型分配返回对象之前,必须对此返回对象进行适当的强制转换。
有关 Java 平台上的 XML 序列化的其他示例,请参阅第 7 章 “在表示层集成 .NET”。
使用 XML 架构确保类型兼容性
您现在已经了解了在一个平台上如何使用 XML 序列化将一个对象序列化为一个 XML 格式,然后在另一个环境中将其反序列化为原来的对象类型。 然而,仅 XML 序列化还不能解决 .NET 和 Java 间交换数据的问题。
当使用序列化技术时主要考虑的问题是确保在从一个平台产生一个 XML 文档时,这个文档与另一个平台兼容。 不应想当然地认为一定兼容。 XML 架构 提供了为 XML 文档指定格式的互用性协定。 正是该组件为成功进行 .NET 和 Java 互联提供了模板。
XML 文档本身没有在这个文档内定义数据类型。 因此值 4.56 可能是 string、double 或者 float。 这使接收平台很难正确导入该值。 类似地,这两个平台都可以实现类型 OrderData,而 .NET 版本的类型与 Java 中的同名类型完全没有关系。
例如,如果在 .NET 平台上将 OrderData 对象序列化为一个 XML 文档,并且将其传入要使用的 Java 应用程序中,需要回答以下问题:
• Java 应用程序怎样知道如何对 OrderData 对象进行反序列化?
• 在 Java 中有一个数据类型 OrderData 等同于 .NET 中的数据类型 OrderData 吗?
• Java 中的数据类型 OrderData 与 .NET 中的数据类型 OrderData 若不存在相同点又会怎样?
这些问题都指向为使 .NET 与 Java 间可以交换数据而需要解决的数据类型兼容性问题。
理解 XML 架构文档
XML 架构通过定义 XML 文档格式,凭借帮助在 .NET 和 J2EE 间交换数据的 XML 架构文档 (XSD) 提供了一个连接框架。 一个 XSD 文件指定一个 XML 架构,并且 XSD 文件本身就是另一个具有固定结构的 XML 文档。 XSD 内的节点和元素定义相关的 XML 文档中的元素和数据类型。. XSD 也包含 XML 文档中的每个元素的任何约束。
在 XSD 文件内,您可以指定以 XML 格式存储的数据类型的定义。 例如,当在 XSD 中定义数据类型 OrderData 时,可以指定这个对象中字段的名称和个数,如 orderID、itemDescription 和 price。 也可以指定对象 OrderData 中的 price 字段的值 (4.56) 的类型是 double。
XSD 使您可以定义 XML 命名空间。 XML 命名空间允许声明唯一类型并且也允许标识可能有相同名称的不同数据类型。
XSD 中的一个必需组件是公共命名空间。 这使您可以声明元素(如 xs:complexType)在文档中是唯一的。 有关 XSD 命名空间的更多信息,请参阅 the W3Consortium Web site。
Visual Studio .NET 包括一个 XML 设计器工具,使您可容易地设计 XML 架构。 XML 设计器使您可在架构的图形表示和表示 XML 架构的 XSD 文档间切换模式。 XML 设计器创建了独立于平台的 XSD,它符合 W3C 标准。. 有关 Visual Studio.NET 生成架构的更多信息,请参阅 Visual Studio .NET 帮助。
IBM Websphere Studio Application Developer 5.0 也包括一个使您可轻松地设计 XML 架构的工具。 XSD 设计器使您能够在正在设计的架构的图形表示和表示 XML 架构的实际 XSD 文档间切换模式。 在 IBM WebSphere Studio Application Designer 中设计的 XSD 也是与平台无关的,并且符合 W3C 组织的 XSD 标准。
使用 XSD 确保类的兼容性
前一节讲述了如何在一个 XSD 中实现一个 XML 架构以定义一个 XML 文档的格式。 您可以使用该知识解决最后的数据交换的难题。
事实是 .NET 和 Java 平台在数据类型上达成一致的可能性很小。 然而,利用 XSD 这两个平台可以 在 XML 文档格式上统一。 如果说互用性如同国际外交,XSD 将是走向世界和平的一个主要的里程碑。
.NET 和 Java 都具有允许将一个类映射为已经定义的 XML 架构的工具,反之亦然。 当映射一个类到一个 XML 架构时,通过序列化该类的实例而生成的 XML 文档与 XSD 定义的 XML 格式相匹配。 通过将每个平台的类映射为公共 XML 架构,可以确保这些平台间能够交换 XML 数据。
例如,在 .NET 和 Java 平台上将类 CustomerData 映射为一个公共 XML 架构文件 CustomerData.xsd。 然后,将能够将 Java 类 CustomerData 的实例序列化为一个 XML 文档,然后将它反序列化为一个 .NET 类 CustomerData 的实例。
使用 Java 和 .NET 中的 XML 架构映射工具,主要有两种设计交换数据的公共格式的方法:
• 从一个公共的 XML 架构开始,然后在两个平台上产生数据类型类。 该方法确保建立与平台无关的数据类型和架构。
• 从一个现有的数据类型类(从任意的平台)开始,由它生成一个 XML 架构,然后根据生成的 XML 架构产生另一个平台的相应数据类型类。
注如果该类在两个平台上都不存在,第一个技术是最好的。 如果它们在一个或另一个平台上确实存在,则必须使用第二种方法。
对两个方法中的任意一个,技术不同点在于工作在 Java 还是 .NET 平台。
在 .NET 中映射 XSD 和类
.NET 框架提供一个 XML 架构定义工具 Xsd.exe,可以用来映射 .NET 类到 XML 架构并且再将其映射回来。 使用该工具,您可以:
• 从一个 XSD 生成一个 .NET 类。
• 从一个 .NET 类生成一个 XSD。
例如,如果为一个名为 ProctsData 的数据类型定义一个 XML 架构文档 ProctsData.xsd,可以使用 Xsd.exe 产生一个名为 ProctsData 的可序列化的 .NET 类。 序列化一个 .NET ProctData 类实例产生与一个定义在 XML 架构文档内的 XML 格式相匹配的 XML 文档。
如果在 .NET 中定义一个可序列化的类 ProctsData,还可以使用 Xsd.exe 生成一个 XML 架构 ProctsData.xsd,它定义了包含 ProctsData 对象的一个可序列化版本的 XML 文档的格式。
注Xsd.exe 仅允许您遵循 WWW 联盟的 XML 架构定义语言的实施标准对 XML 架构进行操作。
有关 XML 架构定义工具的更多信息,请参阅 MSDN 上的 XML Schema Definition Tool。
有关如何使用 XML 架构定义工具的其他示例,请参阅 Simon Guest 撰写的 Microsoft .NET and J2EE Interoperability Toolkit 一书的第 3 章。
在 Java 中映射 XSD 和类
在 Java 平台上,可使用多个工具将 Java 类映射为 XML 架构,反之亦然。示例如下:
• Electric XML 的 schema2java 和 java2schema
• Java Architecture for XML Binding (JAXB)
注大多数 XML 序列化工具的供应商提供相当于 schema2java 和 java2schema 的实用工具。 然而,本书中的示例使用 Electric XML 版本。
schema2java 和 java2schema 工具提供的功能与 .NET 上的 Xsd.exe 非常相似。 使用 Electric XML 工具可以:
• 使用 schema2java 生成一个来自 XSD 的 Java 类。
• 使用 java2schema 生成来自 Java 类的 XSD。
可以使用带有同一 XML 架构文件 ProctsData.xsd 的 schema2java 工具(ProctsData.xsd 是在 .NET 示例中为名为 ProctsData 的数据类型定义的)生成一个名为 ProctsData 的可序列化 Java 类。
java2schema 工具允许执行相反的过程。 如果在 Java 中定义一个名为 ProctsData 的可序列化类,可以使用 java2schema 生成一个 XML 架构 ProctsData.xsd。该文档 定义包括 Java ProctsData 对象的序列化版本的 XML 文档格式。
注只能从已编译的类产生 XSD,而不是从源代码产生。
有关 schema2java 和 java2schema 的更多信息,请参阅本章结束部分的参考部分中包含的 electric.xml io tool 软件包。
有关如何使用 Electric XML 工具映射 Java 类和 XML 架构的示例,请参阅 Microsoft .NET and J2EE Interoperability Toolkit 的第 3 章 70 至 80 页。
在前面章节的 .NET 和 Java 示例中,因为 Java 类 ProctsData 和 .NET 类 ProctsData 都来源于 ProctsData.xsd,所以两个类都被序列化为同一 XML 格式。 因此可以将某个平台的 ProctsData 类实例序列化为一个 XML 文档,然后将其反序列化为另一个平台的 ProctsData 类的一个实例。
使用 XSD 生成类型是非常有效的,它对提供跨平台的互用性大有帮助。 XSD 也是 WSDL 中的一个基础元素。 当在 XML Web 服务中查看数据类型转换时,理解 XSD 结构非常有益。
映射 XSD 类型
前面的部分描述了如何在 .NET 和 Java 中映射类和 XSD。 但是,当使用该技术创建交换数据的一个公共格式时,具有一些限制性。 在大多数情况下,您使用的在 .NET 和 Java 中存储数据的复杂数据类型由原始类型组成。 不幸的是,不是所有的原始类型在 .NET 和 Java 之间都有一个直接的映射。
XSD 公共命名空间定义了
‘贰’ 什么是GIS互操作
GIS---Geographic Information System,地理信息系统。是一种基于计算机的工具,它可以对在地球上存在的东西和发生的事件进行成图和分析。 GIS 技术把地图这种独特的视觉化效果和地理分析功能与一般的数据库操作(例如查询和统计分析等)集成在一起。这种能力使 GIS与其他信息系统相区别,从而使其在广泛的公众和个人企事业单位中解释事件、预测结果、规划战略等中具有实用价值。
地理信息系统是将计算机硬件、软件、地理数据以及系统管理人员组织而成的对任一形式的地理信息进行高效获取、存储、更新、操作、分析及显示的集成。
我国GIS的发展较晚,经历了四个阶段,即起步(1970-1980)、准备(1980-1985)、发展(1985-1995)、产业化(1996以后)阶段。GIS已在许多部门和领域得到应用,并引起了政府部门的高度重视。从应用方面看,地理信息系统已在资源开发、环境保护、城市规划建设、土地管理、农作物调查与结产、交通、能源、通讯、地图测绘、林业、房地产开发、自然灾害的监测与评估、金融、保险、石油与天然气、军事、犯罪分析、运输与导航、110报警系统公共汽车调度等方面得到了具体应用。
国内外已有城市测绘地理信息系统或测绘数据库正在运行或建设中。一批地理信息系统软件已研制开发成功,一批高等院校已设立了一些与GIS有关的专业或学科,一批专门从事GIS产业活动的高新技术产业相继成立。些外,还成立了“中国GIS协会“和“中国GPS技术应用协会“等。
‘叁’ 互操作性的相关定义
数据交换至少要涉及到两个计算机系统参与方:即发送方计算机系统和接受方计算机系统。数据交换旨在为所有的参与方计算机系统,或者交换双方或其中之一带来有用的结果。不过,这些参与方计算机系统的所有用户事先已经就有关何谓有用结果的规定达成了一致意见。只有当参与方计算机系统之间所交换的数据能够得到对方正确处理和使用的情况下,才能称为实现了语义协同工作能力。
‘肆’ GIS互操作
地理数据互操作
地理数据互操作是指通过规范接口自由处理所有种类地理数据的能力和在GIS 软件平台通过网络处理地理数据的能力。开放的地理数据互操作规范———OpenGIS(Open Geo ndataInteroperability Specification) 是由OGC(Open GIS Consortium) 提出的有关地理信息互操作的框架和相关标准和规范。OGIS 框架主要由三部分组成: 开放的地理数据模型, 开放的服务模型和信息群模型。在OGIS 互操作框架下, OGC 又制定了一系列的抽象规范和实现规范用于指导应用GIS 互操作的构建,从标准的格式、结构和功能等方面介绍了14 个主题,
后者是与抽象规程具体实现相关的11 个主题[7n9] 。通过遵循抽象规程和实现规程, 支持一种公开透明的格式表达, 数据产品才会有更多的应用价值, 有利于数据共享和知识挖掘,最终消除地理信息流通领域中的信息孤岛。
参考资料:地理信息共享与互操作框架研究 张书亮, 陶 陶, 闾国年 (南京师范大学地理信息科学江苏省重点实验室,江苏南京 210097)
‘伍’ 实现互操作性对卫生信息共享有什么意义
互操作性(interoperability)是指两个或多个系统或 组件交换信息,以及使用交换信息的能力。互操作性一般包括两方面的内容,一是语法互操作性;二是语义互操作性。在2010年1月5日召开的全国卫生工作会 议上,卫生部部长陈竺指出,2010年是全面推进医药卫生体制改革承上启下的关键一年,加强信息标准化研究,完善数据标准和通讯标准体系,促进信息互认共 享是2010年医药卫生信息系统建设的中心工作之一。提高卫生信息系统互操作的目的是实现不同系统之间的信息交换和共享。
‘陆’ 互操作性的介绍
互操作性(Interoperability )又称互用性,是指不同的计算机系统、网络、操作系统和应用程序一起工作并共享信息的能力。互操作性有不同的层面,比如语法层面的互操作性和语义层面的互操作性。
‘柒’ 什么是互操作
所谓的互操作是指一种能力,使得分布的控制系统设备通过相关信息的数字交换,能够协调工作,从而达到一个共同的目标。传统上互操作是指“不同平台或编程语言之间交换和共享数据的能力(Interoperability is the ability to communicate and share data across programming languages and platforms)”。为了达到“平台或编程语言之间交换和共享数据”的目的,需要包括硬件、网络、操作系统、数据库系统、应用软件、数据格式、数据语义等不同层次的互操作,问题涉及运行环境、体系结构、应用流程、安全管理、操作控制、实现技术、数据模型等。
个人理解:互就是交互,信息交互、数据交互,形成共享机制;操作指的是本系统之间的控制操作和多系统之间的联动操作,形成一套操作流程或操作规范。通过互操作,使资源配比优化,系统自身之间和多个系统之间达到工作效率和利用率的最大化。
‘捌’ 什么是软件的互操作性
互操作性是指不同厂商的设备,应用通用的数据结构和传输标准设置,使之可以互换数据和执行命令的解决方案。
对软件来讲,就是信息要有能够在技术的体系里,来进行数据的交换,也就是说来彼此交谈。互操作性从信息产业一开始就非常的重要,在电脑当时还没有进行联接的时候,电脑本身就要进行互操作,在内部里,包括CPU,硬盘、软盘之间的互操作,以后一个电脑就必须跟其他的电脑进行互操作,最后形成了全球的联网,随着我们到了网页的服务,我们看到互操作性的重要,因为不只是电脑彼此要谈话,而且是程序要彼此能够对话,数据套件也要进行互相的对话,因此互操作性就变成了一个核心的领域来研发,IT进一步的发展。
‘玖’ 什么是网络互操作性,有那些文献或书籍啊
互操作性,互用性 Interoperability
互操作性分为不同的级别,这是因为两个系统连接并共享信息,不能简单地认为用户也能从自己的应用程序中访问这些信息。例如,一台UNIX工作站能用TCP/IP通信协议与一台Novell NetWare服务器相连。但是,UNIX工作站的用户除非使用兼容的文件协议,否则不能访问服务器上的文件。在这个例子中,加载到NetWare文件服务器上的Novell NetWare NFS将允许UNIX用户和NetWare客户一样以一种集成化无缝的方式访问文件及其它的网络资源。
但是即使是这种级别的互操作性也不能保证UNIx用户有可能打开和编辑他在NetWare服务器上所访问的文件。用户访问非兼容的文件格式,将需要翻译器和转换器。在某些情况下,应用程序自身就能访问操作在其它环境中的应用程序所生成的文件格式。主要的软件供应商如Microsoft,通过生成工作在多个环境中的应用程序,部分地缓解了这种差异性。例如,Microsoft Excel电子表格程序能工作在Windows环境和Macintosh环境。如果一个Windows用户传输一个文件到一个Macintosh用户,则这个Macintosh用户能打开这个文件并使用这个文件所提供的格式化代码。
以上是网络对网络互操作性的定义,具体的书籍的话,可能这只是一个很大的概念,要具体点才能找到。你可以上网搜下。