mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
WIP update to support current IDS v0.6
This commit is contained in:
@@ -206,7 +206,7 @@ class ids:
|
||||
if comply:
|
||||
self.ifc_passed += 1
|
||||
if self.ifc_applicable == 0:
|
||||
if spec.use == "required":
|
||||
if spec.minOccurs != "0":
|
||||
logger.error("No applicable elements found. Minimum 1 applicable element required.")
|
||||
else:
|
||||
logger.debug("No applicable elements found. None required.")
|
||||
@@ -235,7 +235,8 @@ class specification:
|
||||
def __init__(
|
||||
self,
|
||||
name="Unnamed",
|
||||
use="required",
|
||||
minOccurs=None,
|
||||
maxOccurs=None,
|
||||
ifcVersion=["IFC2X3", "IFC4"],
|
||||
identifier=None,
|
||||
description=None,
|
||||
@@ -245,13 +246,16 @@ class specification:
|
||||
|
||||
:param name: Name describing the specification to a contract reader
|
||||
:type name: str
|
||||
:param use: 'required'|'optional', defaults to "required"
|
||||
:type use: str, optional
|
||||
:param minOccurs: The minimum total entities that should pass as an integer >= 0
|
||||
:type minOccurs: str, optional
|
||||
:param maxOccurs: The maximum total entities that should pass as an integer >= 0 or "unbounded"
|
||||
:type maxOccurs: str, optional
|
||||
"""
|
||||
self.name = name or "Unnamed"
|
||||
self.applicability = None
|
||||
self.requirements = None
|
||||
self.use = use
|
||||
self.minOccurs = minOccurs
|
||||
self.maxOccurs = maxOccurs
|
||||
self.ifcVersion = ifcVersion
|
||||
self.identifier = identifier
|
||||
self.description = description
|
||||
@@ -270,12 +274,11 @@ class specification:
|
||||
# if older python collections.OrderedDict()
|
||||
results = {
|
||||
"@name": self.name,
|
||||
"@use": self.use,
|
||||
"@ifcVersion": self.ifcVersion,
|
||||
"applicability": {},
|
||||
"requirements": {},
|
||||
}
|
||||
for attribute in ["identifier", "description", "instructions"]:
|
||||
for attribute in ["identifier", "description", "instructions", "minOccurs", "maxOccurs"]:
|
||||
value = getattr(self, attribute)
|
||||
if value:
|
||||
results[f"@{attribute}"] = value
|
||||
@@ -311,7 +314,8 @@ class specification:
|
||||
spec.name = ids_dict["@name"]
|
||||
except KeyError:
|
||||
spec.name = ""
|
||||
spec.use = ids_dict["@use"]
|
||||
spec.minOccurs = ids_dict["@minOccurs"]
|
||||
spec.maxOccurs = ids_dict["@maxOccurs"]
|
||||
spec.ifcVersion = ids_dict["@ifcVersion"]
|
||||
spec.applicability = boolean_and(parse_rules(ids_dict["applicability"]))
|
||||
spec.requirements = boolean_and(parse_rules(ids_dict["requirements"]))
|
||||
@@ -447,19 +451,9 @@ class facet(metaclass=meta_facet):
|
||||
Use child classes instead: entity, classification, property and material.
|
||||
"""
|
||||
|
||||
def __init__(self, node=None, location=None):
|
||||
|
||||
def __init__(self, node=None):
|
||||
if node:
|
||||
self.node = node
|
||||
if "@location" in self:
|
||||
self.location = self.node["@location"]
|
||||
else:
|
||||
self.location = "any"
|
||||
|
||||
if location:
|
||||
self.location = location
|
||||
else:
|
||||
self.location = "any"
|
||||
|
||||
def __getattr__(self, attr):
|
||||
|
||||
@@ -561,20 +555,20 @@ class entity(facet):
|
||||
class attribute(facet):
|
||||
"""The IDS attribute facet"""
|
||||
|
||||
parameters = ["name", "value", "location", "use", "instructions"]
|
||||
parameters = ["name", "value", "minOccurs", "maxOccurs", "instructions"]
|
||||
|
||||
@staticmethod
|
||||
def create(name="Name", value=None, location="any", use=None, instructions=None):
|
||||
def create(name="Name", value=None, minOccurs=None, maxOccurs=None, instructions=None):
|
||||
"""Create an attribute facet that can be added to applicability or requirements of IDS specification.
|
||||
|
||||
:param name: Attribute name, such as "Description"
|
||||
:type name: str
|
||||
:param value: Attribute value, with type being strictly checked
|
||||
:type value: str, optional
|
||||
:param location: Where to check for the parameter. One of "any"|"instance"|"type", defaults to "any"
|
||||
:type location: str, optional
|
||||
:param use: 'required'|'optional', defaults to "required"
|
||||
:type use: str, optional
|
||||
:param minOccurs: The minimum total entities that should pass as an integer >= 0
|
||||
:type minOccurs: str, optional
|
||||
:param maxOccurs: The maximum total entities that should pass as an integer >= 0 or "unbounded"
|
||||
:type maxOccurs: str, optional
|
||||
:param instructions: Instructions as a guide for model authors when reading the requirements
|
||||
:type instructions: str, optional
|
||||
:return: entity object
|
||||
@@ -584,8 +578,8 @@ class attribute(facet):
|
||||
inst = attribute()
|
||||
inst.name = name
|
||||
inst.value = value
|
||||
inst.location = location
|
||||
inst.use = use
|
||||
inst.minOccurs = minOccurs
|
||||
inst.maxOccurs = maxOccurs
|
||||
inst.instructions = instructions
|
||||
return inst
|
||||
|
||||
@@ -598,10 +592,10 @@ class attribute(facet):
|
||||
results = {"name": parameter_asdict(self.name)}
|
||||
if self.value:
|
||||
results["value"] = parameter_asdict(self.value)
|
||||
if self.location:
|
||||
results["@location"] = self.location
|
||||
if self.use:
|
||||
results["@use"] = self.use
|
||||
if self.minOccurs:
|
||||
results["@minOccurs"] = self.minOccurs
|
||||
if self.maxOccurs:
|
||||
results["@maxOccurs"] = self.maxOccurs
|
||||
if self.instructions:
|
||||
results["@instructions"] = self.instructions
|
||||
return results
|
||||
@@ -622,25 +616,19 @@ class attribute(facet):
|
||||
return [getattr(element, name, None)]
|
||||
return [v for k, v in element.get_info().items() if k == name]
|
||||
|
||||
if self.location == "instance":
|
||||
values = get_values(inst, self.name)
|
||||
elif self.location == "type":
|
||||
element_type = ifcopenshell.util.element.get_type(inst)
|
||||
values = get_values(element_type, self.name) if element_type else []
|
||||
elif self.location == "any":
|
||||
element_type = ifcopenshell.util.element.get_type(inst)
|
||||
element_type = ifcopenshell.util.element.get_type(inst)
|
||||
|
||||
if isinstance(self.name, str):
|
||||
type_value = getattr(element_type, self.name, None) if element_type else None
|
||||
occurrence_value = getattr(inst, self.name, None)
|
||||
values = [occurrence_value if occurrence_value is not None else type_value]
|
||||
if isinstance(self.name, str):
|
||||
type_value = getattr(element_type, self.name, None) if element_type else None
|
||||
occurrence_value = getattr(inst, self.name, None)
|
||||
values = [occurrence_value if occurrence_value is not None else type_value]
|
||||
else:
|
||||
if element_type:
|
||||
info = element_type.get_info()
|
||||
info.update({k: v for k, v in inst.get_info().items() if v is not None})
|
||||
else:
|
||||
if element_type:
|
||||
info = element_type.get_info()
|
||||
info.update({k: v for k, v in inst.get_info().items() if v is not None})
|
||||
else:
|
||||
info = inst.get_info()
|
||||
values = [v for k, v in info.items() if k == self.name]
|
||||
info = inst.get_info()
|
||||
values = [v for k, v in info.items() if k == self.name]
|
||||
|
||||
is_pass = bool(values) and all([v is not None and v != "" for v in values])
|
||||
if is_pass and self.value:
|
||||
@@ -658,28 +646,30 @@ class classification(facet):
|
||||
The IDS classification facet by traversing the HasAssociations inverse attribute
|
||||
"""
|
||||
|
||||
parameters = ["system", "value", "location", "uri", "use", "instructions"]
|
||||
message = "%(location)sclassification reference %(value)s from '%(system)s'"
|
||||
parameters = ["system", "value", "uri", "minOccurs", "maxOccurs" "instructions"]
|
||||
message = "sclassification reference %(value)s from '%(system)s'"
|
||||
|
||||
@staticmethod
|
||||
def create(value=None, system=None, location="any", uri=None, use=None, instructions=None):
|
||||
def create(value=None, system=None, uri=None, minOccurs=None, maxOccurs=None, instructions=None):
|
||||
"""Create a classification facet that can be added to applicability or requirements of IDS specification.
|
||||
|
||||
:param location: Where to check for the parameter. One of "any"|"instance"|"type", defaults to "any"
|
||||
:type location: str, optional
|
||||
:param value: Value that is required. Could be alphanumeric or restriction object, defaults to None
|
||||
:type value: restriction|alphanumeric, optional
|
||||
:param system: System that is required. Could be alphanumeric or restriction object, defaults to None
|
||||
:type system: restriction|alphanumeric, optional
|
||||
:param minOccurs: The minimum total entities that should pass as an integer >= 0
|
||||
:type minOccurs: str, optional
|
||||
:param maxOccurs: The maximum total entities that should pass as an integer >= 0 or "unbounded"
|
||||
:type maxOccurs: str, optional
|
||||
:return: classification object
|
||||
:rtype: classification
|
||||
"""
|
||||
inst = classification()
|
||||
inst.value = value
|
||||
inst.system = system
|
||||
inst.location = location
|
||||
inst.uri = uri
|
||||
inst.use = use
|
||||
inst.minOccurs = minOccurs
|
||||
inst.maxOccurs = maxOccurs
|
||||
inst.instructions = instructions
|
||||
return inst
|
||||
|
||||
@@ -689,15 +679,17 @@ class classification(facet):
|
||||
:return: Xmlschema compliant dictionary.
|
||||
:rtype: dict
|
||||
"""
|
||||
results = {"@location": self.location}
|
||||
results = {}
|
||||
if self.value:
|
||||
results["value"] = parameter_asdict(self.value)
|
||||
if self.system:
|
||||
results["system"] = parameter_asdict(self.system)
|
||||
if self.uri:
|
||||
results["@uri"] = self.uri
|
||||
if self.use:
|
||||
results["@use"] = self.use
|
||||
if self.minOccurs:
|
||||
results["@minOccurs"] = self.minOccurs
|
||||
if self.maxOccurs:
|
||||
results["@maxOccurs"] = self.maxOccurs
|
||||
if self.instructions:
|
||||
results["@instructions"] = self.instructions
|
||||
return results
|
||||
@@ -712,13 +704,7 @@ class classification(facet):
|
||||
:return: result of the validation as bool and message
|
||||
:rtype: facet_evaluation(bool, str)
|
||||
"""
|
||||
if self.location == "instance":
|
||||
leaf_references = ifcopenshell.util.classification.get_references(inst, should_inherit=False)
|
||||
elif self.location == "type":
|
||||
element_type = ifcopenshell.util.element.get_type(inst)
|
||||
leaf_references = ifcopenshell.util.classification.get_references(element_type) if element_type else set()
|
||||
elif self.location == "any":
|
||||
leaf_references = ifcopenshell.util.classification.get_references(inst)
|
||||
leaf_references = ifcopenshell.util.classification.get_references(inst)
|
||||
|
||||
references = leaf_references.copy()
|
||||
for leaf_reference in leaf_references:
|
||||
@@ -734,8 +720,6 @@ class classification(facet):
|
||||
[self.system == ifcopenshell.util.classification.get_classification(r).Name for r in references]
|
||||
)
|
||||
|
||||
self.location_msg = location[self.location]
|
||||
|
||||
if references:
|
||||
return facet_evaluation(
|
||||
is_pass,
|
||||
@@ -743,11 +727,10 @@ class classification(facet):
|
||||
% {
|
||||
"system": list(references)[0][0],
|
||||
"value": list(references)[0][1],
|
||||
"location": self.location_msg,
|
||||
}, # TODO Fix this 0 index reference assumption when I refactor out the messages
|
||||
)
|
||||
else:
|
||||
return facet_evaluation(False, "does not have %sclassification reference" % self.location_msg)
|
||||
return facet_evaluation(False, "does not have classification reference")
|
||||
|
||||
|
||||
class partOf(facet):
|
||||
@@ -812,30 +795,32 @@ class property(facet):
|
||||
The IDS property facet implemented using `ifcopenshell.util.element`
|
||||
"""
|
||||
|
||||
parameters = ["name", "propertySet", "value", "location"]
|
||||
message = "%(location)sproperty '%(name)s' in '%(propertySet)s' with a value %(value)s"
|
||||
parameters = ["name", "propertySet", "value"]
|
||||
message = "property '%(name)s' in '%(propertySet)s' with a value %(value)s"
|
||||
|
||||
@staticmethod
|
||||
def create(
|
||||
propertySet="Property_Set",
|
||||
name="PropertyName",
|
||||
value=None,
|
||||
location="any",
|
||||
measure=None,
|
||||
uri=None,
|
||||
use=None,
|
||||
minOccurs=None,
|
||||
maxOccurs=None,
|
||||
instructions=None,
|
||||
):
|
||||
"""Create a property facet that can be added to applicability or requirements of IDS specification.
|
||||
|
||||
:param location: Where to check for the parameter. One of "any"|"instance"|"type", defaults to "any"
|
||||
:type location: str, optional
|
||||
:param propertySet: Propertyset that is required. Could be alphanumeric or restriction object, defaults to None
|
||||
:type propertySet: restriction|alphanumeric, optional
|
||||
:param name: Name that is required. Could be alphanumeric or restriction object, defaults to None
|
||||
:type name: restriction|alphanumeric, optional
|
||||
:param value: Value that is required. Could be alphanumeric or restriction object, defaults to None
|
||||
:type value: restriction|alphanumeric, optional
|
||||
:param minOccurs: The minimum total entities that should pass as an integer >= 0
|
||||
:type minOccurs: str, optional
|
||||
:param maxOccurs: The maximum total entities that should pass as an integer >= 0 or "unbounded"
|
||||
:type maxOccurs: str, optional
|
||||
:return: property object
|
||||
:rtype: property
|
||||
"""
|
||||
@@ -843,10 +828,10 @@ class property(facet):
|
||||
inst.propertySet = propertySet
|
||||
inst.name = name
|
||||
inst.value = value
|
||||
inst.location = location
|
||||
inst.measure = measure
|
||||
inst.uri = uri
|
||||
inst.use = use
|
||||
inst.minOccurs = minOccurs
|
||||
inst.maxOccurs = maxOccurs
|
||||
inst.instructions = instructions
|
||||
return inst
|
||||
|
||||
@@ -857,7 +842,6 @@ class property(facet):
|
||||
:rtype: dict
|
||||
"""
|
||||
results = {
|
||||
"@location": self.location,
|
||||
"propertySet": parameter_asdict(self.propertySet),
|
||||
"name": parameter_asdict(self.name),
|
||||
}
|
||||
@@ -867,8 +851,10 @@ class property(facet):
|
||||
results["@measure"] = self.measure
|
||||
if self.uri:
|
||||
results["@uri"] = self.uri
|
||||
if self.use:
|
||||
results["@use"] = self.use
|
||||
if self.minOccurs:
|
||||
results["@minOccurs"] = self.minOccurs
|
||||
if self.maxOccurs:
|
||||
results["@maxOccurs"] = self.maxOccurs
|
||||
if self.instructions:
|
||||
results["@instructions"] = self.instructions
|
||||
# TODO '@href': 'http://identifier.buildingsmart.org/uri/buildingsmart/ifc-4.3/prop/FireRating', #https://identifier.buildingsmart.org/uri/something
|
||||
@@ -884,15 +870,7 @@ class property(facet):
|
||||
:return: result of the validation as bool and message
|
||||
:rtype: facet_evaluation(bool, str)
|
||||
"""
|
||||
all_psets = {}
|
||||
if self.location == "instance":
|
||||
all_psets = ifcopenshell.util.element.get_psets(inst, should_inherit=False)
|
||||
elif self.location == "type":
|
||||
element_type = ifcopenshell.util.element.get_type(inst)
|
||||
if element_type:
|
||||
all_psets = ifcopenshell.util.element.get_psets(element_type, should_inherit=False)
|
||||
elif self.location == "any":
|
||||
all_psets = ifcopenshell.util.element.get_psets(inst)
|
||||
all_psets = ifcopenshell.util.element.get_psets(inst)
|
||||
|
||||
if isinstance(self.propertySet, str):
|
||||
pset = all_psets.get(self.propertySet, None)
|
||||
@@ -968,15 +946,13 @@ class property(facet):
|
||||
class material(facet):
|
||||
"""The IDS material facet used to traverse the HasAssociations inverse attribute."""
|
||||
|
||||
parameters = ["value", "location"]
|
||||
message = "%(location)smaterial '%(value)s'"
|
||||
parameters = ["value"]
|
||||
message = "material '%(value)s'"
|
||||
|
||||
@staticmethod
|
||||
def create(value=None, location="any", uri=None, use=None, instructions=None):
|
||||
def create(value=None, uri=None, minOccurs=None, maxOccurs=None, instructions=None):
|
||||
"""Create a material facet that can be added to applicability or requirements of IDS specification.
|
||||
|
||||
:param location: Where to check for the parameter. One of "any"|"instance"|"type", defaults to "any"
|
||||
:type location: str, optional
|
||||
:param value: Value that is required. Could be alphanumeric or restriction object, defaults to None
|
||||
:type value: restriction|alphanumeric, optional
|
||||
:return: material object
|
||||
@@ -984,9 +960,9 @@ class material(facet):
|
||||
"""
|
||||
inst = material()
|
||||
inst.value = value
|
||||
inst.location = location
|
||||
inst.uri = uri
|
||||
inst.use = use
|
||||
inst.minOccurs = minOccurs
|
||||
inst.maxOccurs = maxOccurs
|
||||
inst.instructions = instructions
|
||||
return inst
|
||||
|
||||
@@ -996,13 +972,15 @@ class material(facet):
|
||||
:return: Xmlschema compliant dictionary.
|
||||
:rtype: dict
|
||||
"""
|
||||
results = {"@location": self.location}
|
||||
results = {}
|
||||
if self.value:
|
||||
results["value"] = parameter_asdict(self.value)
|
||||
if self.uri:
|
||||
results["@uri"] = self.uri
|
||||
if self.use:
|
||||
results["@use"] = self.use
|
||||
if self.minOccurs:
|
||||
results["@minOccurs"] = self.minOccurs
|
||||
if self.maxOccurs:
|
||||
results["@maxOccurs"] = self.maxOccurs
|
||||
if self.instructions:
|
||||
results["@instructions"] = self.instructions
|
||||
return results
|
||||
@@ -1017,15 +995,7 @@ class material(facet):
|
||||
:return: result of the validation as bool and message
|
||||
:rtype: facet_evaluation(bool, str)
|
||||
"""
|
||||
material = None
|
||||
if self.location == "instance":
|
||||
material = ifcopenshell.util.element.get_material(inst, should_skip_usage=True, should_inherit=False)
|
||||
elif self.location == "type":
|
||||
element_type = ifcopenshell.util.element.get_type(inst)
|
||||
if element_type:
|
||||
material = ifcopenshell.util.element.get_material(element_type, should_skip_usage=True)
|
||||
elif self.location == "any":
|
||||
material = ifcopenshell.util.element.get_material(inst, should_skip_usage=True)
|
||||
material = ifcopenshell.util.element.get_material(inst, should_skip_usage=True)
|
||||
|
||||
is_pass = material is not None
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!-- edited with XMLSpy v2022 (x64) (http://www.altova.com) by Leon van Berlo (Overleaf Investments B.V.) -->
|
||||
<!-- February 8, 2022 - DRAFT -->
|
||||
<xs:schema xmlns:ids="http://standards.buildingsmart.org/IDS" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://standards.buildingsmart.org/IDS" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.5.8">
|
||||
<!-- May 24, 2022 - DRAFT -->
|
||||
<xs:schema xmlns:ids="http://standards.buildingsmart.org/IDS" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://standards.buildingsmart.org/IDS" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.6.1">
|
||||
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
|
||||
<xs:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="https://www.w3.org/2001/XMLSchema.xsd"/>
|
||||
<xs:import namespace="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://www.w3.org/2001/XMLSchema-instance"/>
|
||||
@@ -55,15 +55,6 @@
|
||||
<xs:element name="value" type="ids:idsValue" minOccurs="0"/>
|
||||
<xs:element name="system" type="ids:idsValue" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="location" use="required">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="type"/>
|
||||
<xs:enumeration value="instance"/>
|
||||
<xs:enumeration value="any"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="applicabilityType">
|
||||
<xs:sequence>
|
||||
@@ -73,71 +64,7 @@
|
||||
<xs:element name="property" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:complexContent>
|
||||
<xs:extension base="ids:propertyType">
|
||||
<xs:attribute name="measure">
|
||||
<xs:annotation>
|
||||
<xs:documentation>See the documentation and default units of these measures on https://github.com/buildingSMART/IDS/wiki/Physical-Quantities-and-Units</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="String"/>
|
||||
<xs:enumeration value="Number"/>
|
||||
<xs:enumeration value="AmountOfSubstance"/>
|
||||
<xs:enumeration value="AreaDensity"/>
|
||||
<xs:enumeration value="Area"/>
|
||||
<xs:enumeration value="DynamicViscosity"/>
|
||||
<xs:enumeration value="ElectricCapacitance"/>
|
||||
<xs:enumeration value="ElectricCharge"/>
|
||||
<xs:enumeration value="ElectricConductance"/>
|
||||
<xs:enumeration value="ElectricCurrent"/>
|
||||
<xs:enumeration value="ElectricResistance"/>
|
||||
<xs:enumeration value="ElectricVoltage"/>
|
||||
<xs:enumeration value="Energy"/>
|
||||
<xs:enumeration value="Force"/>
|
||||
<xs:enumeration value="Frequency"/>
|
||||
<xs:enumeration value="HeatFluxDensity"/>
|
||||
<xs:enumeration value="Heating"/>
|
||||
<xs:enumeration value="Illuminance"/>
|
||||
<xs:enumeration value="IonConcentration"/>
|
||||
<xs:enumeration value="IsoThermalMoistureCapacity"/>
|
||||
<xs:enumeration value="Length"/>
|
||||
<xs:enumeration value="Speed"/>
|
||||
<xs:enumeration value="LuminousFlux"/>
|
||||
<xs:enumeration value="LuminousIntensity"/>
|
||||
<xs:enumeration value="MassDensity"/>
|
||||
<xs:enumeration value="MassFlowRate"/>
|
||||
<xs:enumeration value="Mass"/>
|
||||
<xs:enumeration value="MassPerLength"/>
|
||||
<xs:enumeration value="ModulusOfElasticity"/>
|
||||
<xs:enumeration value="MoistureDiffusivity"/>
|
||||
<xs:enumeration value="MolecularWeight"/>
|
||||
<xs:enumeration value="MomentOfInertia"/>
|
||||
<xs:enumeration value="PH"/>
|
||||
<xs:enumeration value="PlanarForce"/>
|
||||
<xs:enumeration value="Angle"/>
|
||||
<xs:enumeration value="PlaneAngle"/>
|
||||
<xs:enumeration value="Power"/>
|
||||
<xs:enumeration value="Pressure"/>
|
||||
<xs:enumeration value="RadioActivity"/>
|
||||
<xs:enumeration value="Ratio"/>
|
||||
<xs:enumeration value="RotationalFrequency"/>
|
||||
<xs:enumeration value="SectionModulus"/>
|
||||
<xs:enumeration value="SoundPower"/>
|
||||
<xs:enumeration value="SoundPressure"/>
|
||||
<xs:enumeration value="SpecificHeatCapacity"/>
|
||||
<xs:enumeration value="TemperatureRateOfChange"/>
|
||||
<xs:enumeration value="ThermalConductivity"/>
|
||||
<xs:enumeration value="Temperature"/>
|
||||
<xs:enumeration value="Time"/>
|
||||
<xs:enumeration value="Torque"/>
|
||||
<xs:enumeration value="VaporPermeability"/>
|
||||
<xs:enumeration value="Volume"/>
|
||||
<xs:enumeration value="VolumetricFlowRate"/>
|
||||
<!-- kind of number defined in base of restriction -->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
</xs:extension>
|
||||
<xs:extension base="ids:propertyType"/>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
@@ -150,25 +77,71 @@
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="systemType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="href" type="xs:anyURI" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="propertyType">
|
||||
<xs:sequence>
|
||||
<xs:element name="propertySet" type="ids:idsValue"/>
|
||||
<xs:element name="name" type="ids:idsValue"/>
|
||||
<xs:element name="value" type="ids:idsValue" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="location" use="required">
|
||||
<xs:attribute name="measure">
|
||||
<xs:annotation>
|
||||
<xs:documentation>See the documentation and default units of these measures on https://github.com/buildingSMART/IDS/blob/master/Documentation/Physical_Quantities_and_Units.md</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="type"/>
|
||||
<xs:enumeration value="instance"/>
|
||||
<xs:enumeration value="any"/>
|
||||
<xs:enumeration value="String"/>
|
||||
<xs:enumeration value="Number"/>
|
||||
<xs:enumeration value="AmountOfSubstance"/>
|
||||
<xs:enumeration value="AreaDensity"/>
|
||||
<xs:enumeration value="Area"/>
|
||||
<xs:enumeration value="DynamicViscosity"/>
|
||||
<xs:enumeration value="ElectricCapacitance"/>
|
||||
<xs:enumeration value="ElectricCharge"/>
|
||||
<xs:enumeration value="ElectricConductance"/>
|
||||
<xs:enumeration value="ElectricCurrent"/>
|
||||
<xs:enumeration value="ElectricResistance"/>
|
||||
<xs:enumeration value="ElectricVoltage"/>
|
||||
<xs:enumeration value="Energy"/>
|
||||
<xs:enumeration value="Force"/>
|
||||
<xs:enumeration value="Frequency"/>
|
||||
<xs:enumeration value="HeatFluxDensity"/>
|
||||
<xs:enumeration value="Heating"/>
|
||||
<xs:enumeration value="Illuminance"/>
|
||||
<xs:enumeration value="IonConcentration"/>
|
||||
<xs:enumeration value="IsoThermalMoistureCapacity"/>
|
||||
<xs:enumeration value="Length"/>
|
||||
<xs:enumeration value="Speed"/>
|
||||
<xs:enumeration value="LuminousFlux"/>
|
||||
<xs:enumeration value="LuminousIntensity"/>
|
||||
<xs:enumeration value="MassDensity"/>
|
||||
<xs:enumeration value="MassFlowRate"/>
|
||||
<xs:enumeration value="Mass"/>
|
||||
<xs:enumeration value="MassPerLength"/>
|
||||
<xs:enumeration value="ModulusOfElasticity"/>
|
||||
<xs:enumeration value="MoistureDiffusivity"/>
|
||||
<xs:enumeration value="MolecularWeight"/>
|
||||
<xs:enumeration value="MomentOfInertia"/>
|
||||
<xs:enumeration value="PH"/>
|
||||
<xs:enumeration value="PlanarForce"/>
|
||||
<xs:enumeration value="Angle"/>
|
||||
<xs:enumeration value="PlaneAngle"/>
|
||||
<xs:enumeration value="Power"/>
|
||||
<xs:enumeration value="Pressure"/>
|
||||
<xs:enumeration value="RadioActivity"/>
|
||||
<xs:enumeration value="Ratio"/>
|
||||
<xs:enumeration value="RotationalFrequency"/>
|
||||
<xs:enumeration value="SectionModulus"/>
|
||||
<xs:enumeration value="SoundPower"/>
|
||||
<xs:enumeration value="SoundPressure"/>
|
||||
<xs:enumeration value="SpecificHeatCapacity"/>
|
||||
<xs:enumeration value="TemperatureRateOfChange"/>
|
||||
<xs:enumeration value="ThermalConductivity"/>
|
||||
<xs:enumeration value="Temperature"/>
|
||||
<xs:enumeration value="Time"/>
|
||||
<xs:enumeration value="Torque"/>
|
||||
<xs:enumeration value="VaporPermeability"/>
|
||||
<xs:enumeration value="Volume"/>
|
||||
<xs:enumeration value="VolumetricFlowRate"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
@@ -178,29 +151,11 @@
|
||||
<xs:element name="name" type="ids:idsValue"/>
|
||||
<xs:element name="value" type="ids:idsValue" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="location" use="required">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="type"/>
|
||||
<xs:enumeration value="instance"/>
|
||||
<xs:enumeration value="any"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="materialType">
|
||||
<xs:sequence>
|
||||
<xs:element name="value" type="ids:idsValue" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="location" use="required">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="type"/>
|
||||
<xs:enumeration value="instance"/>
|
||||
<xs:enumeration value="any"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="requirementsType">
|
||||
<xs:sequence maxOccurs="unbounded">
|
||||
@@ -210,13 +165,7 @@
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:complexContent>
|
||||
<xs:extension base="ids:entityType">
|
||||
<xs:attribute name="instructions">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Author of the IDS can leave instructions for the authors of the IFC. This text could/should be displayed in the BIM/IFC authoring tool.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:extension>
|
||||
<xs:extension base="ids:entityType"/>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
@@ -228,6 +177,12 @@
|
||||
<xs:enumeration value="IfcElementAssembly"/>
|
||||
<xs:enumeration value="IfcGroup"/>
|
||||
<xs:enumeration value="IfcSystem"/>
|
||||
<xs:enumeration value="IfcBuildingSystem"/>
|
||||
<xs:enumeration value="IfcBuiltSystem"/>
|
||||
<xs:enumeration value="IfcDistributionSystem"/>
|
||||
<xs:enumeration value="IfcZone"/>
|
||||
<xs:enumeration value="IfcAsset"/>
|
||||
<xs:enumeration value="IfcInventory"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
@@ -238,16 +193,8 @@
|
||||
<xs:complexContent>
|
||||
<xs:extension base="ids:classificationType">
|
||||
<xs:attribute name="uri" type="xs:anyURI" use="optional"/>
|
||||
<xs:attribute name="use" use="optional">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="optional"/>
|
||||
<xs:enumeration value="prohibited"/>
|
||||
<xs:enumeration value="required"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="instructions">
|
||||
<xs:attributeGroup ref="xs:occurs"/>
|
||||
<xs:attribute name="instructions" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Author of the IDS can leave instructions for the authors of the IFC. This text could/should be displayed in the BIM/IFC authoring tool.</xs:documentation>
|
||||
</xs:annotation>
|
||||
@@ -260,16 +207,8 @@
|
||||
<xs:complexType>
|
||||
<xs:complexContent>
|
||||
<xs:extension base="ids:attributeType">
|
||||
<xs:attribute name="use" use="optional">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="optional"/>
|
||||
<xs:enumeration value="prohibited"/>
|
||||
<xs:enumeration value="required"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="instructions">
|
||||
<xs:attributeGroup ref="xs:occurs"/>
|
||||
<xs:attribute name="instructions" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Author of the IDS can leave instructions for the authors of the IFC. This text could/should be displayed in the BIM/IFC authoring tool.</xs:documentation>
|
||||
</xs:annotation>
|
||||
@@ -283,79 +222,8 @@
|
||||
<xs:complexContent>
|
||||
<xs:extension base="ids:propertyType">
|
||||
<xs:attribute name="uri" type="xs:anyURI" use="optional"/>
|
||||
<xs:attribute name="use" use="optional">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="optional"/>
|
||||
<xs:enumeration value="prohibited"/>
|
||||
<xs:enumeration value="required"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="measure">
|
||||
<xs:annotation>
|
||||
<xs:documentation>See the documentation and default units of these measures on https://github.com/buildingSMART/IDS/wiki/Physical-Quantities-and-Units</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="String"/>
|
||||
<xs:enumeration value="Number"/>
|
||||
<xs:enumeration value="AmountOfSubstance"/>
|
||||
<xs:enumeration value="AreaDensity"/>
|
||||
<xs:enumeration value="Area"/>
|
||||
<xs:enumeration value="DynamicViscosity"/>
|
||||
<xs:enumeration value="ElectricCapacitance"/>
|
||||
<xs:enumeration value="ElectricCharge"/>
|
||||
<xs:enumeration value="ElectricConductance"/>
|
||||
<xs:enumeration value="ElectricCurrent"/>
|
||||
<xs:enumeration value="ElectricResistance"/>
|
||||
<xs:enumeration value="ElectricVoltage"/>
|
||||
<xs:enumeration value="Energy"/>
|
||||
<xs:enumeration value="Force"/>
|
||||
<xs:enumeration value="Frequency"/>
|
||||
<xs:enumeration value="HeatFluxDensity"/>
|
||||
<xs:enumeration value="Heating"/>
|
||||
<xs:enumeration value="Illuminance"/>
|
||||
<xs:enumeration value="IonConcentration"/>
|
||||
<xs:enumeration value="IsoThermalMoistureCapacity"/>
|
||||
<xs:enumeration value="Length"/>
|
||||
<xs:enumeration value="Speed"/>
|
||||
<xs:enumeration value="LuminousFlux"/>
|
||||
<xs:enumeration value="LuminousIntensity"/>
|
||||
<xs:enumeration value="MassDensity"/>
|
||||
<xs:enumeration value="MassFlowRate"/>
|
||||
<xs:enumeration value="Mass"/>
|
||||
<xs:enumeration value="MassPerLength"/>
|
||||
<xs:enumeration value="ModulusOfElasticity"/>
|
||||
<xs:enumeration value="MoistureDiffusivity"/>
|
||||
<xs:enumeration value="MolecularWeight"/>
|
||||
<xs:enumeration value="MomentOfInertia"/>
|
||||
<xs:enumeration value="PH"/>
|
||||
<xs:enumeration value="PlanarForce"/>
|
||||
<xs:enumeration value="Angle"/>
|
||||
<xs:enumeration value="PlaneAngle"/>
|
||||
<xs:enumeration value="Power"/>
|
||||
<xs:enumeration value="Pressure"/>
|
||||
<xs:enumeration value="RadioActivity"/>
|
||||
<xs:enumeration value="Ratio"/>
|
||||
<xs:enumeration value="RotationalFrequency"/>
|
||||
<xs:enumeration value="SectionModulus"/>
|
||||
<xs:enumeration value="SoundPower"/>
|
||||
<xs:enumeration value="SoundPressure"/>
|
||||
<xs:enumeration value="SpecificHeatCapacity"/>
|
||||
<xs:enumeration value="TemperatureRateOfChange"/>
|
||||
<xs:enumeration value="ThermalConductivity"/>
|
||||
<xs:enumeration value="Temperature"/>
|
||||
<xs:enumeration value="Time"/>
|
||||
<xs:enumeration value="Torque"/>
|
||||
<xs:enumeration value="VaporPermeability"/>
|
||||
<xs:enumeration value="Volume"/>
|
||||
<xs:enumeration value="VolumetricFlowRate"/>
|
||||
<!-- kind of number defined in base of restriction -->
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="instructions">
|
||||
<xs:attributeGroup ref="xs:occurs"/>
|
||||
<xs:attribute name="instructions" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Author of the IDS can leave instructions for the authors of the IFC. This text could/should be displayed in the BIM/IFC authoring tool.</xs:documentation>
|
||||
</xs:annotation>
|
||||
@@ -369,16 +237,8 @@
|
||||
<xs:complexContent>
|
||||
<xs:extension base="ids:materialType">
|
||||
<xs:attribute name="uri" type="xs:anyURI" use="optional"/>
|
||||
<xs:attribute name="use" use="optional">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="optional"/>
|
||||
<xs:enumeration value="prohibited"/>
|
||||
<xs:enumeration value="required"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="instructions">
|
||||
<xs:attributeGroup ref="xs:occurs"/>
|
||||
<xs:attribute name="instructions" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Author of the IDS can leave instructions for the authors of the IFC. This text could/should be displayed in the BIM/IFC authoring tool.</xs:documentation>
|
||||
</xs:annotation>
|
||||
@@ -394,16 +254,8 @@
|
||||
<xs:element name="applicability" type="ids:applicabilityType"/>
|
||||
<xs:element name="requirements" type="ids:requirementsType"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="use" use="required">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="optional"/>
|
||||
<xs:enumeration value="prohibited"/>
|
||||
<xs:enumeration value="required"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
<xs:attributeGroup ref="xs:occurs"/>
|
||||
<xs:attribute name="ifcVersion" use="required">
|
||||
<xs:simpleType>
|
||||
<xs:list>
|
||||
@@ -411,19 +263,19 @@
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="IFC2X3"/>
|
||||
<xs:enumeration value="IFC4"/>
|
||||
<xs:enumeration value="IFC4_3"/>
|
||||
<xs:enumeration value="IFC4X3"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:list>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="identifier">
|
||||
<xs:attribute name="identifier" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Author of the IDS can provide an identifier to the IDS. Beware: this cannot be enforced/assumed as (global) unique.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="description" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="instructions">
|
||||
<xs:attribute name="instructions" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Author of the IDS can leave instructions for the authors of the IFC. This text could/should be displayed in the BIM/IFC authoring tool.</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
Reference in New Issue
Block a user