This is an archive of an inactive wiki and cannot be modified.

asn07 is a language for defining information structures. Each complete asn07 definition, or schema, specifies a class hierachy and a set of typed properties (also called fields or slots) for each class in the hierarchy. An earlier version of this work was called asn06.

asn07 is intended to be used for some of the same purposes as UML, EBNF, OWL, XML Schema, IDL, ER-Diagrams, and SQL Table definitions. It does not attempt to subsume or replace any of them, in all their detail, but rather to encompass a simplified aspect of each of them. Specifically, asn07 is intended to allow programmers to conceptualize a particular pattern of data (a data interface), independent of the technology, methodology, or platform. Tools can be written to convert between asn07 and these other languages, given certain conventions about how somewhat-different concepts are mapped between the languages

An asn07 schema defines which information structures must be present in a conforming information container, such as a network packet, Web document, or database. The schema allows us to talk, for instance, about what is present in a RIF "BLD Ruleset" without committing ourselves to XML or Java or other technology platforms. This is particularly useful for RIF because of its goal of being deeply independent of platform. Although RIF-WG is committed to using XML for public interchange, we do not want to require XML technology to be used deeply within all RIF-conformant systems.

1. Examples

Here are some example asn07 schemas, which may help form an intuitive sense of what the language does, and how it works.

1.1. Purchase Order

This example comes from the XML Schema Primer.

  class PurchaseOrder      property orderDate: string      property shipTo: PersonAtAddress      property billTo: PersonAtAddress      property comment: string      property items: List(item)    class PersonAtAddress      property name: string      property street: string      property city: string      property state: string      property zip: string    class Item       property partNum: string      property productName: string      property quantity: int      property USPrice: decimal      property comment: string 

1.2. First Order Logic

Here's a schema for First Order Logic using fairly conventional terminology:

     class Term               subclass Constant           property name: string         subclass Variable           property name: string          subclass LogicFunction           property functor: string           property arguments: List(Term)      class Formula         subclass AtomicFormula           property predicate: string           property arguments: List(Term)         subclass Conjunction             property left: Formula             property right: Formula         subclass Disjunction             property left: Formula             property right: Formula         subclass Negation             property negated: Formula         subclass Implication             property if: Formula             property then: Formula         subclass Biconditional             property left: Formula             property right: Formula          subclass QuantifiedFormula             property variable: Variable+             property subformula: Formula              subclass ExistentiallyQuantifiedFormula              subclass UniversallyQuantifiedFormula  

2. Syntax

Here's the EBNF for asn07:

File ::= NamespaceDeclaration* Import* ClassDeclaration*  NamespaceDeclaration ::= "default"? "namespace" PREFIX STRING ENDLINE  Import ::= "import" (PREFIX | STRING) ENDLINE  ClassDeclaration ::= "class" ClassDeclarationBody  ClassDeclarationBody ::= QNAME INDENT Entry* DEDENT  Entry ::= "property" QNAME ":" ValueType ENDLINE         | "subclass" ClassDeclarationBody  ValueType ::= QNAME CardinalityType             | "List(" QNAME ")"  CardinalityType ::=  | "?" | "+" | "*"  

The PREFIX and QNAME (Qualified Name) terminals are defines as in Namespaces in XML 1.0. The STRING terminal is a surrounded by double quotes and any double quotes or backslashes in it are escaped by a preceding backslash.

The INDENT and DEDENT terminals are defined as in Python, and function grammatically like traditionally block wrappers "{" ... "}", but use indentation levels to signal blocks.

*** Issue: Should we switch to using {...} or an "end" keyword? ***

3. Semantics

In addition to being probably incomplete, this section is quite informal. It may be formalized at some point in the future.

3.1. Information Structures

The abstract information container that an asn07 schema constrains has the following qualities:

These object semantics are a subset of RDF, but not align perfectly with most other systems, but instead aim for a common ground which is close enough to other systems that the difference are easy to account for. For instance, this model aligns with Java if the Java class and field names are mapped to IRIs and the field values are always Collections.

3.1.1. ASN07 schema for reference object container

Here is an asn07 schema for the abstracted collection of information which each asn07 schema is imagined to contstrain. Here it is called InformationContainer.

class InformationContainer property object: InformationObject*   class InformationObject    property property: Property*  class Property    property valueType: ValueType     subclass OrderedProperty    # List of values     subclass UnorderedProperty  # Set of values  class ValueType        subclass InformationObject     subclass DataValue  class DataValue    property lexicalRepresentation: xs:string    property datatype: xs:anyURI 

3.2. Slots

The primary element in an asn07 schema is the slot definition and its reference from the class definition:

class Class    property classIRI: anyIRI    property subclass: Class*    property slot: Slot*  class Slot    property propertyIRI: anyIRI    property valueType: ValueType     subclass UnorderedSlot       property cardinalityType: CardinalityType     subclass OrderedSlot  class CardinalityType     subclass ExactlyOne    subclass OneOrMore    subclass ZeroOrMore    subclass ZeroOrOne  

What this means is that every instance of the given class has the given property, propertyIRI, and that the values of that property are as detailed here:

OrderedSlot

The value of the property is a list of elements, each element being of the type valueType

UnorderedSlot

The property has CardinalityType values, each of the type valueType

3.3. Subclasses

The subclass relation between two asn07 classes has several effects:

First, a class inherits properties from its superclasses (and the superclasses' superclasses, recursively). Because slots are not ordered, superclass inheritance does not need to be ordered either. If the same slot name is used repeatedly in a class, such as via inheritance, the resulting valueType is the intersection of valueTypes if there is one (or an error, if not.)

Second, subclasses stand in for their superclasses as ValueTypes. When the valueType for a slot is given as class C, and C has a subclass D, then D is a valid value type for the slot.

Finally, only leaf classes (classes with no subclasses) may be present in an information container. Superclasses are an organizational tool only; they do not manifest in the information content.

3.4. Datatypes

To be done.

(The syntax probable needs a 'datatype' declaration.)

3.5. Namespaces and Imports

To be done.