XML技术:上下文处理、行业词汇与设计工具全解析
立即解锁
发布时间: 2025-09-07 00:57:19 阅读量: 15 订阅数: 21 AIGC 


XML系统架构与应用
# XML技术:上下文处理、行业词汇与设计工具全解析
## 1. ebXML上下文处理机制
### 1.1 问题背景
在跨国商业交易中,不同地区和行业的合作伙伴使用的业务文档格式存在差异。例如,美国的印刷公司向德国的制造商订购印刷机备件,美国地址包含“州”元素,而德国地址没有;美国地址的邮政编码位于州元素之后,德国的“Postleitzahl”则位于城镇元素之前。这些差异在人工处理交易时通常不是问题,但计算机处理时就会成为难题。ebXML旨在解决这一问题。
### 1.2 上下文分类
ebXML将上下文细分为多个上下文类别,用于互联网业务的上下文类别包括:
- **Region**:地理政治区域,如国家或州。
- **Industry**:合作伙伴所属的行业领域。
- **Process**:当前的业务流程,不同业务流程可能需要特定格式的业务文档。
- **Product**:产品类别也会影响业务文档的格式。
- **Legislative**:文档使用的立法上下文。
- **Role**:合作伙伴的当前角色,如买方和卖方。
每个上下文类别的值是一个简单的字符串,例如“US”或“Germany”表示地区。可以通过引用已建立的分类法(如ISO3166用于区域上下文)来约束上下文类别的可能值。
### 1.3 核心组件
ebXML不针对每个目的和上下文定义专门的业务文档,而是定义了一组通用的核心组件。业务文档通过组装规则从这些核心组件组装而成,并通过上下文规则进行进一步定制。核心组件的初始目录列出了近100个核心组件,包括邮政地址、街道建筑标识符、邮政信箱标识符、当事人类型、语言、语言使用、日期、时间、出生日期和时间、组织注册日期和时间、账户标识符等。
### 1.4 领域组件
核心组件由用户定义的领域组件补充。领域组件应与核心组件一样详细指定,并包含相关上下文。领域组件和额外的上下文类别应在ebXML存储库中注册,以便重用这些组件和上下文类别。
### 1.5 文档组装
组装规则使用以下操作从核心组件组成文档模式:
- **CreateGroup**:创建由多个元素或其他模型组组成的模型组。
- **CreateElement**:创建新的简单类型或复杂类型元素。
- **UseElement**:导入核心组件。
- **Rename**:更改先前组成元素的名称(甚至路径)。
- **Condition**:指定执行上述操作的上下文条件。
以下是一个文档组装的示例:
```xml
<?xml version="1.0"?>
<!DOCTYPE Assembly SYSTEM "assembly.dtd">
<Assembly version="1.0">
<Assemble name="PurchaseOrder">
<CreateGroup>
<CreateElement
type="PartyType" location="GUID" id="Buyer">
<Name>Buyer</Name>
<CreateGroup>
<UseElement name="Name"/>
<UseElement name="Address">
<CreateGroup id="adr">
<Condition test="Region=’United States’">
<UseElement name="BuildingNumber"/>
<UseElement name="StreetName"/>
</Condition>
<Condition test="Region=’Germany’">
<UseElement name="StreetName"/>
<UseElement name="BuildingNumber"/>
<UseElement name="ZIP"/>
</Condition>
<UseElement name="City"/>
<Condition test="Region=’United States’">
<UseElement name="State"/>
<UseElement name="ZIP"/>
</Condition>
<UseElement name="Country"/>
</CreateGroup>
</UseElement>
</CreateGroup>
<Condition test="Region=’Germany’">
<Rename from="address" to="addressDE"/>
</Condition>
</CreateElement>
<CreateElement
type="PartyType" id="Seller" location="GUID">
<Name>Seller</Name>
</CreateElement>
</CreateGroup>
<CreateElement
minOccurs="1" maxOccurs="unbounded"
type="ItemType" location="GUID" id="Item">
<Name>Item</Name>
</CreateElement>
</Assemble>
</Assembly>
```
### 1.6 上下文规则
上下文规则可以进一步修改文档,每个规则指定一个匹配算法。规则可以精确匹配,即Condition元素中指定的值必须与上下文类别的值完全匹配;也可以根据引用分类法中的定义进行层次匹配。例如,区域上下文的分类法层次结构为:
- **Global**
- **Continent**
- **Economic region**
- **Country (ISO 3166.1)**
- **Region (ISO 3166.2)**
如果在Condition中指定“North America”作为区域上下文,它将匹配“United States”、“Canada”、“Mississippi”、“Ontario”等具体上下文值,因为这些值是“North America”层次结构的成员。
如果Condition中指定的测试成功,可以执行以下操作:
- **Add**:在文档中包含新元素。
- **Occurs**:指定元素出现的次数,用minOccurs和maxOccurs表示。如果未指定,minOccurs和maxOccurs默认为1。
- **Subtract**:从文档中删除元素。
- **Condition**:应用另一个条件,条件可以嵌套。
- **Comment**:注释块。
- **Rename**:重命名元素。
然而,上下文规则可能会冲突,例如“Region”上下文规则可能与“Industry”上下文规则冲突。这些冲突必须解决:
- 上下文规则按上下文规则文档中指定的顺序执行。
- 上下文规则可以配备显式的顺序属性,用于强制一组规则的执行顺序。
以下是一个上下文规则的示例:
```xml
<?xml version="1.0"?>
<!DOCTYPE ContextRules SYSTEM "contextrules.dtd">
<ContextRules>
<Rule apply="hierarchical" order="1">
<Taxonomy context="Region"
ref="http://ebxml.org/classification/ISO3166"/>
<Condition test="Region=’United States’">
```
0
0
复制全文
相关推荐






